HPC & GPU Engineering/AI Infrastructure Engineer

[HPC/GPU 클러스터 운영 Zero to Hero 34편] 멀티 노드 분산 학습 – Horovod와 DeepSpeed 활용법

ygtoken 2025. 8. 11. 21:19
728x90

멀티 노드 분산 학습이 필요한 이유

 

딥러닝 모델의 규모는 매년 폭발적으로 커지고 있습니다. GPT, LLaMA, Stable Diffusion 등 최신 모델은 수십억~수천억 개의 파라미터를 포함하며, 단일 GPU는 물론 단일 서버에서도 학습이 불가능한 경우가 많습니다.

 

이 문제를 해결하는 핵심 방법이 **멀티 노드 분산 학습(Multi-Node Distributed Training)**입니다.

여러 대의 GPU 서버를 연결해 하나의 거대한 연산 클러스터처럼 동작시키고, 통신 최적화 라이브러리와 분산 학습 프레임워크를 통해 학습 속도를 극대화합니다.

 


 

멀티 노드 학습의 구성 요소

계층 역할 예시
하드웨어 GPU·NVLink·InfiniBand H100, A100, NDR 400G
런타임 CUDA·NCCL GPU 연산 및 통신 최적화
분산 프레임워크 Horovod·DeepSpeed 병렬 학습 로직 구현
스케줄러 Slurm·K8s 노드·GPU 자원 할당

 


 

Horovod – 심플한 데이터 병렬 프레임워크

 

Horovod는 Uber가 개발한 오픈소스 분산 학습 프레임워크로, TensorFlow·PyTorch·MXNet 등을 지원합니다.

  • 핵심 철학: 기존 코드 최소 변경으로 멀티 GPU/노드 학습 확장
  • 통신 방식: NCCL 기반 Ring All-Reduce로 파라미터 동기화
  • 특징: 스케일 아웃이 간단하고, MPI나 Gloo 런타임 선택 가능

 

설치 예시

pip install horovod[torch]

 

PyTorch 예시 코드

import torch
import horovod.torch as hvd

hvd.init()
torch.cuda.set_device(hvd.local_rank())

model = MyModel().cuda()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

optimizer = hvd.DistributedOptimizer(
    optimizer, named_parameters=model.named_parameters()
)

hvd.broadcast_parameters(model.state_dict(), root_rank=0)

 

실행 명령 예시

mpirun -np 8 \
    -H node1:4,node2:4 \
    -bind-to none -map-by slot \
    -x NCCL_DEBUG=INFO \
    python train.py

 


 

DeepSpeed – 초대형 모델 최적화 툴킷

 

DeepSpeed는 Microsoft가 개발한 대규모 모델 학습 최적화 라이브러리입니다.

 

  • 주요 기능:
    • ZeRO(Zero Redundancy Optimizer)로 메모리 사용량 절감
    • 모델 병렬·파이프라인 병렬 지원
    • 혼합 정밀도(FP16·BF16) 학습 최적화
  • 강점: 수천억 파라미터 모델도 단일 GPU 메모리에 맞춰 학습 가능

 

설치 예시

pip install deepspeed

DeepSpeed 설정 파일 예시 (ds_config.json)

{
  "train_batch_size": 1024,
  "fp16": {
    "enabled": true
  },
  "zero_optimization": {
    "stage": 2,
    "offload_optimizer": {
      "device": "cpu",
      "pin_memory": true
    }
  }
}

실행 명령 예시

deepspeed --num_nodes=2 --num_gpus=4 train.py --deepspeed --deepspeed_config ds_config.json

 


 

Horovod vs DeepSpeed 비교

구분 Horovod DeepSpeed
주요 전략 데이터 병렬 중심 데이터·모델·파이프라인 병렬
코드 변경 적음 비교적 많음
초대형 모델 지원 제한적 강력
통신 최적화 Ring All-Reduce ZeRO + NCCL
적용 범위 범용 ML/DL 프레임워크 대규모 Transformer 계열

 


 

멀티 노드 환경 설정 체크리스트

  1. 네트워크 구성
    • InfiniBand 또는 RoCEv2 기반 RDMA 환경 구축
    • GPU Direct RDMA 활성화
    • MTU, GID Index 최적화 (ibstat, mlxconfig 활용)
  2. NCCL 환경 변수 설정
export NCCL_IB_HCA=mlx5_0
export NCCL_NET_GDR_LEVEL=2
export NCCL_SOCKET_IFNAME=eth0

 

  1. 스케줄러 연동(Slurm 예시)
srun --nodes=2 --ntasks-per-node=4 \
     --gres=gpu:4 \
     python train.py

 


 

산업별 활용 사례

  • AI 연구소: GPT·LLaMA 계열 모델 학습
  • 제약·바이오: 단백질 구조 예측(AlphaFold)
  • 금융: 초고속 리스크 시뮬레이션
  • 자동차: 자율주행 시뮬레이션

 


 

장점과 단점

 

장점

  • Horovod: 손쉬운 확장성, 기존 코드 재사용 가능
  • DeepSpeed: 초대형 모델 학습 가능, 메모리 효율 최적화
  • 둘 다 NCCL/IB 기반 통신 최적화 지원

 

단점

  • Horovod: 초대형 모델에는 한계
  • DeepSpeed: 설정 복잡, 학습 파이프라인 재설계 필요
  • 네트워크·버전 호환성 이슈 가능

 


 

실무 최적화 팁

  • 프레임워크 선택: 모델 규모·코드 변경 가능성·운영 복잡도에 따라 선택
  • 통신 병목 제거: 토폴로지 인식 배치와 RDMA 최적화
  • 벤치마크 필수: Horovod → horovodrun --check-build, DeepSpeed → deepspeed --benchmark

 


 

정리하며

멀티 노드 분산 학습은 현대 AI 인프라에서 필수적인 기술입니다.

Horovod는 간단한 데이터 병렬 확장에, DeepSpeed는 초대형 모델 최적화에 강점을 가지고 있습니다.

운영자는 하드웨어·네트워크·프레임워크를 종합적으로 고려해 환경을 구성해야 하며, 올바른 도구 선택이 성능과 비용 효율을 동시에 좌우합니다.

 

728x90