Distributed Training
분산 학습은 데이터 병렬 처리, 샤딩, 텐서 병렬 처리 또는 파이프라인 병렬 처리를 이용해 여러 GPU나 머신에 모델 학습을 분산합니다. DDP, FSDP, 확장 방법을 다룹니다.
분산 학습은 하나의 모델을 학습하는 작업을 여러 프로세서에 분산합니다. 일반적으로 한 머신 안의 GPU 또는 TPU를 사용하거나 클라우드 또는 온프레미스 클러스터 전반에 분산하여 학습을 더 빨리 완료하거나, 단일 장치의 메모리에 들어가지 않는 모델도 학습할 수 있게 합니다. 장치들은 NVIDIA NCCL과 같은 통신 라이브러리를 사용해 고속 인터커넥트로 그래디언트, 활성값 또는 파라미터 샤드를 교환합니다. 이를 통해 최신 파운데이션 모델과 대규모 언어 모델을 학습하며, 다중 GPU 워크스테이션에서 일상적인 객체 탐지 학습 시간도 단축할 수 있습니다.
분산 학습의 작동 원리#
데이터 병렬화는 가장 일반적인 전략입니다. 각 GPU는 모델 전체 복제본을 보유하고, 각 학습 데이터 배치에서 자체 데이터 부분을 처리한 뒤, 그래디언트를 평균화하는 올리듀스 작업에 참여합니다. 따라서 모든 복제본에 동일한 경사 하강법 업데이트가 적용됩니다. PyTorch의 DistributedDataParallel (DDP)는 역전파와 통신을 겹쳐 실행합니다. 전역 배치 크기는 GPU당 배치 크기에 GPU 수를 곱한 값이므로, 학습률도 보통 이에 비례해 조정해야 합니다. Goyal 외는 ImageNet에서 ResNet-50을 256개 GPU로 이미지 8,192개 배치 크기를 사용해 1시간 만에 학습했습니다. 선형 스케일링 규칙과 워밍업 단계를 적용했으며, GPU 8개에서 256개로 확장했을 때 효율은 약 90%였습니다.
샤딩 데이터 병렬화는 모델 복제본의 메모리 비용을 줄입니다. ZeRO와 PyTorch의 Fully Sharded Data Parallel (FSDP)는 파라미터, 그래디언트, 옵티마이저 상태를 GPU 간에 분할하고 각 레이어가 계산 중일 때만 해당 레이어의 전체 가중치를 모읍니다. 따라서 GPU를 추가할수록 GPU당 필요한 메모리가 감소합니다.
모델 병렬화는 신경망 자체를 분할합니다. 텐서 병렬화는 개별 행렬 곱셈을 여러 GPU에 분산하고, 파이프라인 병렬화는 연속된 레이어를 각기 다른 GPU에 할당해 마이크로 배치를 순차적으로 전달합니다. 컨텍스트 병렬화는 긴 시퀀스를 분할하고, 전문가 병렬화는 전문가 혼합 모델의 전문가들을 서로 다른 GPU에 배치합니다. Megatron-LM과 같은 프레임워크는 이러한 기법을 데이터 병렬화와 결합해 수천억 개의 파라미터를 가진 모델을 학습합니다.
실전 다중 GPU 학습#
주요 오버헤드는 통신입니다. 모든 축소 통신(all-reduce) 트래픽은 모델 크기에 따라 증가하므로, 노드 내부에서 NVLink로 연결된 GPU는 느린 네트워크로 연결된 노드보다 확장성이 뛰어납니다. 계층을 동기화 배치 정규화로 변환하지 않으면 배치 정규화 통계는 GPU별로 계산되며, 각 GPU에 할당된 배치가 작을 때 차이가 중요해집니다. Ultralytics YOLO26은 DDP를 통해 다중 GPU 학습을 수행합니다. 여러 장치 ID를 torch.distributed.run과 함께 지정하면 GPU마다 프로세스 하나를 실행하고, CUDA에서는 NCCL 백엔드를 사용하며, batch 값을 GPU 전체에 균등하게 나눕니다.
from ultralytics import YOLO
# 사전 학습된 YOLO26 모델을 불러옵니다
model = YOLO("yolo26n.pt")
# DDP로 GPU 0과 1에서 학습합니다. batch=32이면 GPU마다 스텝당 이미지 16개를 처리합니다
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, batch=32, device=[0, 1])실제 적용 사례#
- 대규모 언어 모델: Meta는 최대 16K개의 H100 GPU에서 Llama 3 405B를 학습했으며, 저자들이 4D 병렬화라고 부르는 방식으로 텐서, 파이프라인, 컨텍스트, 데이터 병렬화를 결합했습니다.
- 자율주행 차량: 인식 팀은 차량 플릿에서 수집한 카메라, 라이다, 레이더 기록의 대규모 아카이브로 탐지 및 세그멘테이션 모델을 학습하며, 이는 대규모 GPU 클러스터에서만 실용적입니다.
- 의료 영상 분석: 고해상도 3D CT 및 MRI 볼륨은 단일 GPU의 메모리에 부담을 주며, 배치 또는 모델 샤드를 GPU 간에 분산하면 더 큰 볼륨과 모델을 학습할 수 있습니다.
분산 학습과 관련 개념 비교#
- 연합 학습: 연합 학습도 여러 장치에서 학습하지만, 개인정보 보호를 위해 데이터는 휴대폰, 병원 또는 다른 클라이언트에 남겨 두고 모델 업데이트만 중앙 서버로 전송합니다. 분산 학습은 속도를 최대화하기 위해 하나의 클러스터에 데이터를 모읍니다.
- 분할 학습: 분할 학습은 클라이언트와 서버 간에 모델을 나누어 원시 데이터가 클라이언트 외부로 나가지 않도록 하며, 개인정보 보호를 위해 추가 통신을 감수합니다.
- 그래디언트 누적: 그래디언트 누적은 여러 개의 작은 배치에서 그래디언트를 합산한 후 한 번 업데이트하여 시간 비용을 감수하는 대신 단일 GPU에서 대규모 배치와 동일한 계산을 수행합니다. 데이터 병렬화는 이러한 배치를 여러 GPU에서 동시에 계산합니다.










