

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# PyTorch モデルのトレーニング
<a name="train-models-with-hyperpod"></a>

このトピックでは、HyperPod を使用して PyTorch モデルをトレーニングするプロセスについて説明します。

このシナリオでは、`hyp-pytorch-job` テンプレートを使用して PyTorch モデルをトレーニングしてみます。これにより、一般的に使用されるパラメータを公開して、ジョブの作成が簡素化されます。モデルアーティファクトは、後で推論で使用するため、S3 バケットに保存されます。ただし、これはオプションであり、任意のストレージの場所を選択できます。

## トレーニングジョブを作成する
<a name="create-training-job"></a>

CLI または Python SDK を使用してモデルをトレーニングできます。

### CLI の使用
<a name="using-cli"></a>

以下のコマンドを使って、トレーニングジョブを作成します。

```
hyp create hyp-pytorch-job \
    --version 1.0 \
    --job-name test-pytorch-job \
    --image pytorch/pytorch:latest \
    --command '["python", "train.py"]' \
    --args '["--epochs", "10", "--batch-size", "32"]' \
    --environment '{"PYTORCH_CUDA_ALLOC_CONF": "max_split_size_mb:32"}' \
    --pull-policy "IfNotPresent" \
    --instance-type ml.p4d.24xlarge \
    --tasks-per-node 8 \
    --label-selector '{"accelerator": "nvidia", "network": "efa"}' \
    --deep-health-check-passed-nodes-only true \
    --scheduler-type "kueue" \
    --queue-name "training-queue" \
    --priority "high" \
    --max-retry 3 \
    --volumes '["data-vol", "model-vol", "checkpoint-vol"]' \
    --persistent-volume-claims '["shared-data-pvc", "model-registry-pvc"]' \
    --output-s3-uri s3://my-bucket/model-artifacts
```

**主な必須パラメータの説明**：
+ `--job-name`: トレーニングジョブの一意の識別子
+ `--image`: トレーニング環境を含む Docker イメージ

このコマンドは、`test-pytorch-job` という名前のトレーニングジョブを開始します。`s3://my-bucket/model-artifacts` を使用して、トレーニングされたモデルアーティファクトの保存先を指定できます。例えば、`--output-s3-uri` です。カスタムモデルのデプロイに必要になるため、この保存先は書き留めておきます。

### SDK for Python を使用する場合
<a name="using-python-sdk"></a>

プログラムによるコントロールには、SDK を使用します。Python スクリプトを作成して、同じトレーニングジョブを起動します。

```
from sagemaker.hyperpod import HyperPodPytorchJob
from sagemaker.hyperpod.job 
import ReplicaSpec, Template, Spec, Container, Resources, RunPolicy, Metadata

# Define job specifications
nproc_per_node = "1"  # Number of processes per node
replica_specs = 
[
    ReplicaSpec
    (
        name = "pod",  # Replica name
        template = Template
        (
            spec = Spec
            (
                containers =
                [
                    Container
                    (
                        # Container name
                        name="container-name",  
                        
                        # Training image
                        image="448049793756.dkr.ecr.us-west-2.amazonaws.com/ptjob:mnist",  
                        
                        # Always pull image
                        image_pull_policy="Always",  
                        resources=Resources\
                        (
                            # No GPUs requested
                            requests={"nvidia.com/gpu": "0"},  
                            # No GPU limit
                            limits={"nvidia.com/gpu": "0"},   
                        ),
                        # Command to run
                        command=["python", "train.py"],  
                        # Script arguments
                        args=["--epochs", "10", "--batch-size", "32"],  
                    )
                ]
            )
        ),
    )
]
# Keep pods after completion
run_policy = RunPolicy(clean_pod_policy="None")  

# Create and start the PyTorch job
pytorch_job = HyperPodPytorchJob
(
    # Job name
    metadata = Metadata(name="demo"),  
    # Processes per node
    nproc_per_node = nproc_per_node,   
    # Replica specifications
    replica_specs = replica_specs,     
    # Run policy
    run_policy = run_policy,           
    # S3 location for artifacts
    output_s3_uri="s3://my-bucket/model-artifacts"  
)
# Launch the job
pytorch_job.create()
```

## トレーニングジョブをモニタリングする
<a name="monitor-training-job"></a>

次のコマンドを使用して、ジョブの進行状況をモニタリングします。

### CLI の使用
<a name="monitor-cli"></a>

```
# Check job status
hyp list hyp-pytorch-job

# Get detailed information
hyp describe hyp-pytorch-job --job-name test-pytorch-job

# View logs
hyp get-logs hyp-pytorch-job \
    --pod-name test-pytorch-job-pod-0 \
    --job-name test-pytorch-job
```

**注**: トレーニング時間はモデルの複雑さとインスタンスタイプによって異なります。ログをモニタリングして進行状況を追跡します。

これらのコマンドは、ジョブのステータスを確認し、問題をトラブルシューティングするのに役立ちます。ジョブが正常に完了すると、モデルアーティファクトは `s3://my-bucket/model-artifacts` に保存されます。

### SDK for Python を使用する場合
<a name="monitor-python-sdk"></a>

Python スクリプトに次のコードを含めます。

```
print("List all pods created for this job:")
print(pytorch_job.list_pods())

print("Check the logs from pod0:")
print(pytorch_job.get_logs_from_pod(pod_name="demo-pod-0"))

print("List all HyperPodPytorchJobs:")
print(HyperPodPytorchJob.list())

print("Describe job:")
print(HyperPodPytorchJob.get(name="demo").model_dump())

pytorch_job.refresh()
print(pytorch_job.status.model_dump())
```

## 次の手順
<a name="next-steps"></a>

トレーニング後、モデルアーティファクトは、指定した S3 バケット (`s3://my-bucket/model-artifacts`) に保存されます。これらのアーティファクトを使用してモデルをデプロイできます。現時点では、トレーニングから推論への移行を手動で管理する必要があります。これには以下が含まれます。
+ **アーティファクトの検索**: S3 バケット (`s3://my-bucket/model-artifacts`) をチェックして、トレーニング済みモデルファイルが存在することを確認できます。
+ **パスの記録**: 推論設定で使用する正確な S3 パス (`s3://my-bucket/model-artifacts/test-pytorch-job/model.tar.gz` など) を書き留めておきます。
+ **デプロイでの参照**: 適切なモデルがロードされるように、カスタムエンドポイントを設定する際に、この S3 パスを指定します。