

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

# SageMaker HyperPod 클러스터에서 Slurm 작업 예약
<a name="sagemaker-hyperpod-run-jobs-slurm-schedule-slurm-job"></a>

표준 Slurm `sbatch` 또는 `srun` 명령을 사용하여 훈련 작업을 시작할 수 있습니다. 예를 들어 8노드 훈련 작업을 시작하려면 `srun -N 8 --exclusive train.sh` SageMaker HyperPod를 실행하여 `conda`, `venv`, `docker`, 및 `enroot`를 포함한 다양한 환경에서 훈련을 지원할 수 있습니다. SageMaker HyperPod 클러스터에서 수명 주기 스크립트를 실행하여 ML 환경을 구성할 수 있습니다. 가상 환경으로도 사용할 수 있는 Amazon FSx와 같은 공유 파일 시스템을 연결할 수도 있습니다.

다음 예제에서는 Amazon FSx 공유 파일 시스템이 있는 SageMaker HyperPod 클러스터에서 완전 샤딩된 데이터 병렬 처리(FSDP) 기술로 Llama-2를 훈련하기 위한 작업을 실행하는 방법을 보여줍니다. [Awsome Distributed Training GitHub 리포지토리](https://github.com/aws-samples/awsome-distributed-training/) 에서 더 많은 예제를 찾을 수도 있습니다.

**작은 정보**  
모든 SageMaker HyperPod 예제는 [Awsome Distributed Training GitHub 리포지토리](https://github.com/aws-samples/awsome-distributed-training/)의 `3.test_cases` 폴더에서 사용할 수 있습니다.

1. [Awsome Distributed Training GitHub 리포지토리](https://github.com/aws-samples/awsome-distributed-training/)를 복제하고 훈련 작업 예제를 Amazon FSx 파일 시스템에 복사합니다.

   ```
   $ TRAINING_DIR=/fsx/users/my-user/fsdp
   $ git clone https://github.com/aws-samples/awsome-distributed-training/
   ```

1. [https://github.com/aws-samples/awsome-distributed-training/blob/main/3.test_cases/10.FSDP/0.create_conda_env.sh](https://github.com/aws-samples/awsome-distributed-training/blob/main/3.test_cases/10.FSDP/0.create_conda_env.sh) 스크립트 실행. 이렇게 하면 Amazon FSx 파일 시스템에 `conda` 환경이 생성됩니다. 클러스터의 모든 노드가 파일 시스템에 액세스할 수 있는지 확인합니다.

1. 다음과 같이 단일 노드 슬러밍 작업을 시작하여 가상 Conda 환경을 구축합니다.

   ```
   $ srun -N 1 /path_to/create_conda_env.sh
   ```

1. 환경이 구축된 후 공유 볼륨의 환경 경로를 가리키면 훈련 작업을 시작할 수 있습니다. 동일한 설정으로 단일 노드 및 다중 노드 훈련 작업을 모두 시작할 수 있습니다. 작업을 시작하려면 다음과 같이 작업 시작 스크립트(엔트리 포인트 스크립트라고도 함)를 생성합니다.

   ```
   #!/usr/bin/env bash
   set -ex
   
   ENV_PATH=/fsx/users/my_user/pytorch_env
   TORCHRUN=$ENV_PATH/bin/torchrun
   TRAINING_SCRIPT=/fsx/users/my_user/pt_train.py
   
   WORLD_SIZE_JOB=$SLURM_NTASKS
   RANK_NODE=$SLURM_NODEID
   PROC_PER_NODE=8
   MASTER_ADDR=(`scontrol show hostnames \$SLURM_JOB_NODELIST | head -n 1`)
   MASTER_PORT=$(expr 10000 + $(echo -n $SLURM_JOBID | tail -c 4))
   
   DIST_ARGS="--nproc_per_node=$PROC_PER_NODE \
              --nnodes=$WORLD_SIZE_JOB \
              --node_rank=$RANK_NODE \
              --master_addr=$MASTER_ADDR \
              --master_port=$MASTER_PORT \
             "
             
   $TORCHRUN $DIST_ARGS $TRAINING_SCRIPT
   ```
**작은 정보**  
SageMaker HyperPod 의 자동 재개 기능을 사용하여 하드웨어 장애에 대한 훈련 작업을 더 탄력적으로 만들려면 진입점 스크립트에서 `MASTER_ADDR` 환경 변수를 올바르게 설정해야 합니다. 자세한 내용은 [자동 노드 복구 및 자동 재개](sagemaker-hyperpod-resiliency-slurm-auto-resume.md)를 참조하세요.

   이 자습서에서는 이 스크립트가 `/fsx/users/my_user/train.sh`로 저장된다고 가정합니다.

1. `/fsx/users/my_user/train.sh`의 공유 볼륨에 이 스크립트를 사용하여 다음 `srun` 명령을 실행하여 Slurm 작업을 예약합니다.

   ```
   $ cd /fsx/users/my_user/
   $ srun -N 8 train.sh
   ```