Distributed GPU Training

1. 개요

대형 모델(70B ~ 1.8T)은 단일 GPU 메모리에 적재할 수 없다. 따라서 여러 GPU에 모델이나 데이터를 쪼개어 학습시키는 **분산 학습(Distributed Training)**이 필수적이다.

핵심 전략: 3D Parallelism

실무에서는 아래 세 가지 기법을 조합하여 사용한다. Total GPUs =

2. 병렬화 기법 비교

기법한국어 명칭핵심 아이디어적용 대상 (Size)
Data Parallelism (DP)데이터 병렬모델은 복사, **데이터(Batch)**만 나눔소형 모델 (< 7B)
Tensor Parallelism (TP)텐서 병렬하나의 **레이어(행렬)**를 쪼갬대형 모델 (70B+)
Pipeline Parallelism (PP)파이프라인 병렬레이어 그룹을 층별로 나눔초대형 모델 (100+ Layers)

3. 메모리 소비 모델링 (수식)

모델 파라미터 수()에 따른 대략적인 VRAM 요구량은 다음과 같다.

  • Mixed Precision(fp16/bf16) 기준, 파라미터 1개당 약 16~20 bytes의 메모리가 필요하다.
  • 예: 70B 모델 (단일 GPU 불가능)

4. 상세 기법

4.1. Data Parallelism (DP)

가장 기초적인 방식이다. 모든 GPU가 동일한 모델 복사본을 가진다.

  • 작동: 배치를 등분하여 각자 계산 후, Gradient를 합친다.
  • 통신: AllReduce 연산으로 Gradient를 동기화한다.
  • 한계: 모델 자체가 GPU 메모리보다 크면 사용할 수 없다.

graph TD
    subgraph GPU1
        M1["Model Copy"] --> G1["Gradient"]
    end
    subgraph GPU2
        M2["Model Copy"] --> G2["Gradient"]
    end
    subgraph GPU_N
        Mn["Model Copy"] --> Gn["Gradient"]
    end
    
    G1 & G2 & Gn --> AR["AllReduce<br/>(Gradient 동기화)"]
    AR --> M1 & M2 & Mn

    style AR fill:#FFF9C4,stroke:#FBC02D

4.2. Tensor Parallelism (TP)

하나의 거대한 행렬 곱(MatMul) 연산을 여러 GPU가 나누어 처리한다.

  • 작동: 행렬을 열(Column)이나 행(Row) 단위로 쪼갠다.
  • 통신: AllGather가 필요하며, 통신 빈도가 매우 높아 NVLink 같은 고속 연결이 필수다.
  • 특징: Megatron-LM의 핵심 기술이며, 보통 단일 노드(8 GPU) 내부에서만 수행한다.

graph LR
    X["입력 X"] --> Split["Split Input"]
    
    Split --> G1["GPU 1<br/>(W의 1/2)"]
    Split --> G2["GPU 2<br/>(W의 2/2)"]
    
    G1 --> AG["AllGather<br/>(결과 합치기)"]
    G2 --> AG
    
    AG --> Y["출력 Y"]
    
    style AG fill:#E1F5FE,stroke:#0277BD

4.3. Pipeline Parallelism (PP)

모델을 층(Layer) 단위로 잘라서 서로 다른 GPU에 배치한다.

  • 작동: GPU 1이 110층, GPU 2가 1120층을 담당한다.
  • Micro-Batch: 노는 시간(Bubble)을 줄이기 위해 배치를 아주 잘게 쪼개서 흘려보낸다.

graph LR
    Input --> G1["GPU 1<br/>Layers 1~20"]
    G1 --> G2["GPU 2<br/>Layers 21~40"]
    G2 --> G3["GPU 3<br/>Layers 41~60"]
    G3 --> Output["Output"]
    
    subgraph "Micro-Batches Flow"
        MB1["mb1"] -.-> MB2["mb2"] -.-> MB3["mb3"]
    end
    
    style MB1 fill:#E8F5E9,stroke:#388E3C

5. ZeRO (Zero Redundancy Optimizer)

DP의 문제점인 “모든 GPU가 똑같은 파라미터를 중복해서 가짐”을 해결하기 위해 개발되었다. (Microsoft DeepSpeed 팀)

핵심 개념

“어차피 다 연결되어 있으니, 파라미터를 조각내서 서로 나눠 갖자(Sharding).“

5.1. 단계별 절감 효과

단계분할 대상 (Sharding Target)메모리 절감율비고
ZeRO-1Optimizer States4배속도 저하 거의 없음 (기본값)
ZeRO-2Gradients + Opt States8배통신량 약간 증가
ZeRO-3Parameters + Grads + Opt메모리 비례통신량 증가, 초대형 모델 필수
OffloadCPU/NVMe로 데이터 피신극대화단일 GPU로 거대 모델 학습 가능

5.2. ZeRO-3 작동 원리 수식

기존 DP 메모리 사용량이 에 관계없이 일정했다면, ZeRO-3는 GPU 수에 비례해 줄어든다.

  • 결과: GPU를 늘릴수록 더 큰 모델을 올릴 수 있게 된다.

6. 프레임워크 비교

프레임워크장점단점추천 상황
DeepSpeedZeRO, 3D Parallel, Offload 등 기능 최강설정이 다소 복잡함학습(Training) 표준
FSDP (PyTorch)PyTorch 내장(Native), 설정 간편DeepSpeed 대비 기능 약간 부족Llama, Gemma 미세조정
Megatron-LMTP(Tensor Parallel) 최적화가 가장 잘됨코드가 오래되고 유지보수 어려움Pre-training 연구
vLLM추론(Inference) 속도 압도적학습 기능은 제한적추론(Serving) 표준

7. 실무 요약 가이드 (2025 기준)

모델 크기추천 조합 (Recipe)
~7BDP (ZeRO-1/2)
13B ~ 70BZeRO-3 (FSDP or DeepSpeed)
70B ~ 175BZeRO-3 + TP (GPU 8장 이상)
400B+3D Parallelism (DP TP PP)
NoteBookZeRO-Offload (느리지만 학습 가능)

결론

2025년 기준, 분산 학습은 “DeepSpeed(혹은 FSDP) + ZeRO-3” 조합이면 99%의 상황을 해결할 수 있다.