AWS에서 분산 학습 클러스터를 구축·운영하는 실전 가이드 3편으로, Enroot+Pyxis 컨테이너 환경 구성, 클러스터 기동 전 점검사항, 온프레미스 대비 AWS 운영 모델 차이, GPU vs Trainium 선택, 현장 반복 장애 해결법을 다룬다. 수십~수백 노드가 동일한 소프트웨어 스택을 실행해야 하는 분산 학습의 핵심 문제를 컨테이너로 해결하는 접근과, EFA·NCCL 설정 실수가 학습 성능에 조용히 영향을 주는 함정들을 정리했다.
핵심 포인트- Enroot(rootless 컨테이너 런타임) + Pyxis(Slurm 플러그인) + .sqsh 이미지 조합으로 모든 노드의 CUDA/NCCL/프레임워크 버전을 고정한다.
- AWS Nitro 시스템이 가상화 오버헤드를 제거해 p5/p6는 베어메탈 수준 성능이며, 온프레미스와의 실질 차이는 인터커넥트(InfiniBand → EFA/SRD)와 운영 모델에 있다.
- NCCL이 EFA 고속 경로를 타지 못하면 TCP로 조용히 폴백되어 오류 없이 성능만 급락한다.
- SageMaker HyperPod는 노드 장애 자동 감지·교체·학습 재개를 제공해 대규모 학습의 운영 부담을 줄인다.
- GPU(성숙한 CUDA 생태계) vs Trainium(저렴·수월한 확보, Neuron SDK 포팅 필요) 선택 기준을 제시한다.
상세 정리- 컨테이너 필요성: CUDA, cuDNN, NCCL, aws-ofi-nccl 등 핵심 의존성의 버전 불일치 하나만으로도 노드 간 학습 실패가 발생해 수십~수백 노드에서 환경 일관성 유지가 필수 과제다.
- Docker 대신 Enroot: Docker는 HPC 환경에서 root 권한·상시 데몬 필요 + Slurm 자원 제한이 컨테이너에 미적용되는 문제가 있다. Enroot는 rootless로 실행하며 상시 데몬이 없다.
- Pyxis 역할: Slurm과 Enroot를 중개하는 플러그인으로, srun --container-image=./myimage.sqsh 한 줄로 Slurm이 컨테이너 실행과 자원 연결을 처리한다. 기존 sbatch 워크플로우를 그대로 유지한다.
- .sqsh 이미지 운영: squashfs 기반 이미지를 FSx for Lustre 같은 공유 파일시스템에 한 번 올려 모든 노드가 마운트해 사용 — 수십 GB 이미지를 노드 수만큼 복제하지 않고 환경 일관성을 자동 보장한다.
- 클러스터 구축 전 점검 4가지: 컴퓨트 확보 방식(ODCR vs Capacity Block), 리전별 플랫폼·FSx 지원 여부, 운영 플랫폼 선택(ParallelCluster·PCS·HyperPod), AMI 전략(표준·DLAMI·Custom)을 사전에 확정해야 한다.
- 온프레미스 vs AWS: GPU 하드웨어(H100/B200/B300)와 NVLink/NVSwitch는 동일하고 Nitro가 가상화 오버헤드를 제거한다. 차이는 인터커넥트(InfiniBand → EFA/SRD), 용량 확보(구매 → 예약), 장애 대응(직접 교체 → HyperPod 자동화)이다.
- EFA 미설정 함정: 분산 학습에서 EFA를 활성화하지 않으면 NCCL이 TCP로 폴백되어 오류 메시지 없이 GPU 간 통신 속도만 급락한다. NCCL_DEBUG=INFO로 경로 확인이 필수다.
- GPU 활용률 저하 원인 2갈래: 데이터 로딩 병목(DataLoader worker 부족, FSx Preload 미완료)은 주기적 드롭으로, NCCL AllReduce 병목은 여러 노드에서 동시·매 스텝 같은 지점 드롭으로 구분된다.
- OOM 대응 우선순위: 배치 크기 감소 → Gradient Accumulation → Gradient Checkpointing → bf16 혼합 정밀도 → FSDP/ZeRO 분산 저장 → DeepSpeed ZeRO-Offload(CPU 오프로딩, 속도 저하 동반).
- 확장 효율 저하 대응: 텐서 병렬을 NVLink 도메인 내부로 제한하고, gradient 통신을 backward와 중첩하며, 글로벌 배치 크기를 늘린다(수렴 영향 주의 — learning rate 조정 필요).
- Gang 스케줄링: 멀티 노드 잡에서 일부 노드만 확보 후 나머지를 기다리면 고비용 GPU가 유휴 상태로 묶인다. Slurm은 all-or-nothing 할당이 기본, k8s 환경은 Kueue/Volcano 배치 스케줄러가 필요하다.
왜 읽나AWS에서 분산 학습 클러스터를 처음 구축하거나 온프레미스에서 전환하는 인프라·MLOps 엔지니어에게 Enroot/Pyxis 설정부터 NCCL 함정, 운영 장애 대응까지 실전 체크리스트를 제공한다.