

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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`이라는 훈련 작업을 시작합니다. `--output-s3-uri`는 예를 들어 `s3://my-bucket/model-artifacts`와 같이 훈련된 모델 아티팩트가 저장될 위치를 지정합니다. 사용자 지정 모델을 배포하는 데 필요하므로 이 위치를 기록해 두세요.

### Python SDK 사용
<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`에 저장됩니다.

### Python SDK 사용
<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 경로를 제공합니다.