기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SageMaker HyperPod는 다음과 같은 클러스터 복원력 기능을 제공합니다.
클러스터 상태 확인
이 섹션에서는 SageMaker HyperPod가 클러스터 인스턴스 상태를 정기적으로 모니터링하여 액셀러레이터(GPU 및 Trainium 코어) 및 네트워킹(EFA)과 같은 디바이스 관련 문제를 모니터링하는 데 사용하는 상태 확인 세트를 설명합니다.
범주 | 유틸리티 이름 | 인스턴스 유형 호환성 | 설명 |
---|---|---|---|
액셀러레이터 | DCGM 정책 | GPU | 클러스터의 각 인스턴스는 NVIDIA DCGM |
액셀러레이터 | NVIDIA SMI | GPU | nvidia-sminvidia-smi 의 출력을 구문 분석하여 인스턴스의 상태를 확인합니다. |
액셀러레이터 | Neuron sysfs | Trainium | Trainium 기반 인스턴스의 경우 Neuron 드라이버가 직접 전파하는 Neuron sysfs |
네트워크 | EFA | GPU 및 Trainium | EFA(Elastic Fabric Adaptor) 디바이스의 진단을 돕기 위해 EFA 상태 확인기는 인스턴스 내에서 사용 가능한 모든 EFA 카드를 사용하여 일련의 연결 테스트를 실행합니다. |
스트레스 | DCGM 진단 |
GPU | DCGM 진단 |
스트레스 | CPU 스트레스 | GPU 및 Trainium | CPU 상태는 100% CPU 사용률을 달성하고 I/O 작업을 수행하기 위해 여러 스레드를 실행하는 Linux 스트레스 |
자동 재개
이 섹션에서는 노드가 16개 이상인 클러스터에 하드웨어 장애가 발생할 경우 마지막으로 저장된 체크포인트에서 훈련 작업을 자동으로 복구할 수 있는 제로 터치 복원력 인프라를 제공하는 SageMaker HyperPod 자동 재개 기능을 사용하여 훈련 작업을 실행하는 방법을 설명합니다.
자동 재개 기능을 사용하면 하드웨어 장애 또는 훈련 간 일시적인 문제로 인해 작업이 실패하는 경우 SageMaker HyperPod 자동 재개는 노드 교체 워크플로를 시작하고 결함이 있는 노드를 교체한 후 작업을 다시 시작합니다.
참고
일반 리소스(GRES)
Slurm에서 SageMaker HyperPod 자동 재개 기능 사용
SageMaker HyperPod 자동 재개를 Slurm과 함께 사용하는 경우 salloc
또는 sbatch
를 사용하여 획득한 독점 할당 내에서 작업을 실행해야 합니다. 어떤 경우든 작업을 재개할 때 모든 설정 단계가 단일 srun
명령으로 실행되도록 하려면 진입점 스크립트를 수정해야 합니다. 진입점 스크립트를 통해 작업 단계가 중지되기 전에 실행 중이었던 환경과 일치하도록 교체된 노드의 환경을 설정하는 것이 중요합니다. 다음 절차에서는 환경을 일관되게 유지하고 단일 srun
명령으로 실행하도록 진입점 스크립트를 준비하는 방법을 보여줍니다.
작은 정보
sbatch
를 사용하는 경우 환경을 설정하고 단일 srun
명령을 사용하여 별도의 스크립트를 생성하여 배치 스크립트를 간단하게 유지할 수 있습니다.
-
다음 코드 예제를 사용하여 스크립트를 생성하고
train_auto_resume.sh
로 저장합니다. 이 스크립트는 이전에 교체된 노드에 대해 수행된 수동 구성이 없다고 가정하여 훈련 환경 설정을 배포합니다. 이렇게 하면 환경이 노드에 구애받지 않으므로 노드를 교체할 때 작업을 재개하기 전에 노드에서 동일한 환경이 프로비저닝됩니다.참고
다음 코드 예제는 작업과 연결된 Slurm 노드 목록을 검색하는 방법을 보여줍니다. SageMaker HyperPod가 작업을 자동 재개한 후 값이 오래되었을 수 있으므로 Slurm에서 제공하는
$SLURM_JOB_NODELIST
환경 변수를 사용하지 마세요. 다음 코드 예제에서는SLURM_JOB_NODELIST
를 대체할 새NODE_LIST
변수를 정의한 다음NODE_LIST
변수에서MASTER_NODE
및MASTER_ADDR
변수를 설정하는 방법을 보여줍니다.#!/bin/bash # Filename: train_auto_resume.sh # Sample containerized script to launch a training job with a single srun which can be auto-resumed. # Place your training environment setup here. # Example: Install conda, docker, activate virtual env, etc. # Get the list of nodes for a given job NODE_LIST=$(scontrol show jobid=$SLURM_JOBID | \ # Show details of the SLURM job awk -F= '/NodeList=/{print $2}' | \ # Extract NodeList field grep -v Exc) # Exclude nodes marked as excluded # Determine the master node from the node list MASTER_NODE=$(scontrol show hostname $NODE_LIST | \ # Convert node list to hostnames head -n 1) # Select the first hostname as master node # Get the master node address MASTER_ADDR=$(scontrol show node=$MASTER_NODE | \ # Show node information awk -F= '/NodeAddr=/{print $2}' | \ # Extract NodeAddr awk '{print $1}') # Print the first part of NodeAddr # Torchrun command to launch the training job torchrun_cmd="torchrun --nnodes=$SLURM_NNODES \ --nproc_per_node=1 \ --node_rank=$SLURM_NODE \ --master-addr=$MASTER_ADDR \ --master_port=
1234
\<your_training_script.py>
" # Execute the torchrun command in the 'pytorch' Conda environment, # streaming output live /opt/conda/bin/conda run --live-stream -n pytorch $torchrun_cmd작은 정보
위의 스크립트를 사용하여 작업에 대한 추가 종속성을 설치하기 위한 명령을 더 추가할 수 있습니다. 그러나 클러스터 생성 중에 사용되는 수명 주기 스크립트 세트에 종속성 설치 스크립트를 보관하는 것이 좋습니다. 공유 디렉터리에서 호스팅되는 가상 환경을 사용하는 경우 이 스크립트를 사용하여 가상 환경을 활성화할 수도 있습니다.
-
하드웨어 실패 시
srun
명령을 자동으로 재시도해야 함을 나타내는--auto-resume=1
플래그를 추가하여 SageMaker HyperPod 자동 재개가 활성화된 작업을 시작합니다.참고
sbatch
또는salloc
를 사용하여 리소스 할당을 설정한 경우 할당 내에서 여러srun
명령을 실행할 수 있습니다. 장애가 발생할 경우 SageMaker HyperPod 자동 재개 기능은 플래그--auto-resume=1
가 있는srun
명령의 현재 작업 단계에서만 작동합니다. 즉, srun
명령에서 자동 재개를 활성화하는 것은 리소스 할당 세션 내에서 시작된 다른srun
명령에는 적용되지 않습니다.다음은
auto-resume
이 사용 설정된srun
명령의 예입니다.sbatch 사용
환경을 설정하기 위한 대부분의 로직은 이미
train_auto_resume.sh
에 있으므로 배치 스크립트는 간단하고 다음 코드 예제와 유사해야 합니다. 다음 배치 스크립트가batch.sh
로 저장된다고 가정합니다.#!/bin/bash #SBATCH --nodes 2 #SBATCH --exclusive srun --auto-resume=1
train_auto_resume.sh
다음 명령을 사용하여 앞의 배치 스크립트를 실행하세요.
sbatch
batch.sh
salloc 사용
먼저 독점 할당을 획득하고
--auto-resume
플래그와 진입점 스크립트로srun
명령을 실행합니다.salloc -N 2 --exclusive srun --auto-resume=1
train_auto_resume.sh
HyperPod에서 자동으로 재개되지 않는 결함이 있는 노드를 교체하는 방법
HyperPod 자동 재개 기능은 Slurm 노드의 상태가 fail
또는 down
으로 바뀌는지 모니터링합니다. sinfo
를 실행하여 Slurm 노드의 상태를 확인할 수 있습니다.
노드에 문제가 있지만 HyperPod 자동 재개 기능으로 해결되지 않는 경우 다음 명령을 실행하여 노드의 상태를 fail
로 변경하는 것이 좋습니다.
scontrol update node=<ip-ipv4>
state=fail
reason="Action:Replace"
이전 명령 예제에서
를 교체하려는 결함이 있는 인스턴스의 Slurm 노드 이름(호스트 이름)으로 바꿉니다.<ip-ipv4>
이 명령을 실행한 후 노드는 fail
상태로 전환되고, 현재 실행 중인 작업이 완료될 때까지 대기하고, 정상 인스턴스로 대체되고, 동일한 호스트 이름으로 복구됩니다. 이 프로세스는 가용 영역에서 사용 가능한 인스턴스와 수명 주기 스크립트를 실행하는 데 걸리는 시간에 따라 시간이 걸립니다. 업데이트 및 교체 프로세스 중에는 노드의 상태를 수동으로 다시 변경하거나 Slurm 컨트롤러를 다시 시작하지 마세요. 이렇게 하면 교체가 실패할 수 있습니다. 노드가 오랜 시간 후에도 복구되지 않거나 idle
상태로 전환되지 않으면 AWS 지원 부서에
결함이 있는 노드가 fail
상태에서 계속 중단되면 시도할 수 있는 마지막 수단은 노드 상태를 down
으로 강제 변경하는 것입니다. 여기에는 관리자 권한(sudo 권한)이 필요합니다.
주의
다음 명령을 실행하기 전에 주의 깊게 진행하세요. 강제로 모든 작업이 종료되고 저장되지 않은 모든 작업이 손실될 수 있습니다.
scontrol update node=<ip-ipv4>
state=down
reason="Action:Replace"