핵심 인사이트 (3줄 요약)

  1. 본질: 데이터 병렬화 (Data Parallelism)는 모델을 복제하고 데이터를 나누는 방식이며, 모델 병렬화 (Model Parallelism)는 모델 자체를 나누어 단일 Graphics Processing Unit (GPU) 메모리 한계를 넘는 방식이다.
  2. 가치: 데이터 병렬화는 처리량 확장에 가장 단순하고 강력하지만 모델 크기를 줄여 주지 않으며, 모델 병렬화는 초대형 모델 학습을 가능하게 하지만 통신과 스케줄링 복잡도를 크게 높인다.
  3. 판단 포인트: 모델이 한 GPU에 들어가면 먼저 데이터 병렬화와 Fully Sharded Data Parallel (FSDP)를 검토하고, 한 레이어조차 한 장비에 담기지 않을 때 Tensor Parallelism과 Pipeline Parallelism까지 조합하는 것이 실무적 순서다.

Ⅰ. 개요 및 필요성

분산 학습 (Distributed Training)은 "GPU가 느리다"보다 먼저 "GPU 한 장에 모델이 안 들어간다"는 문제에서 출발한다. 예를 들어 70B 파라미터 모델을 Brain Floating Point 16-bit (BFloat16) 기준 가중치 2바이트, 그래디언트 2바이트, Adam 옵티마이저 상태 8바이트로만 계산해도 파라미터당 약 12바이트가 필요하다. 활성값과 체크포인팅 오버헤드를 빼고도 대략 840GB 수준이어서 80GB GPU 한 장으로는 물리적으로 불가능하다.

┌────────────────────────────────────────────────────────────────────┐
│                  Memory wall of large-model training              │
├────────────────────────────────────────────────────────────────────┤
│ 70B params                                                        │
│ × (weights 2B + grads 2B + Adam states 8B)                        │
│ ≈ 840 GB before activations                                       │
│                                                                    │
│ A100 80GB x 1  -> impossible                                      │
│ A100 80GB x N  -> only possible if compute/memory are partitioned │
└────────────────────────────────────────────────────────────────────┘

여기서 두 가지 다른 병목이 갈린다. 첫째는 처리량 병목이다. 모델은 한 GPU에 들어가지만 학습이 너무 오래 걸리는 경우다. 둘째는 용량 병목이다. 모델 자체가 한 GPU 메모리에 담기지 않는 경우다. 데이터 병렬화는 전자에, 모델 병렬화는 후자에 먼저 대응한다.

따라서 분산 학습 설계의 핵심 질문은 단순히 "GPU를 몇 장 쓸 것인가"가 아니다. "무엇을 나눌 것인가", "어디서 통신할 것인가", "어느 병목이 먼저 오는가"를 구분해야 한다. 이 구분이 없으면 GPU 수는 늘었는데 속도도, 학습 가능 모델 크기도 기대만큼 오르지 않는다.

  • 📢 섹션 요약 비유: 숙제가 너무 많을 때는 같은 문제집을 여러 친구가 나눠 푸는 방법이 있고, 문제집이 너무 두꺼워 한 명 가방에 안 들어갈 때는 앞장과 뒷장을 서로 나눠 드는 방법이 있다. 분산 학습은 이 두 상황을 구분하는 일이다.

Ⅱ. 아키텍처 및 핵심 원리

데이터 병렬화와 모델 병렬화의 차이는 "분할 대상"이 어디냐에 있다. 데이터 병렬화는 모델 복사본을 여러 GPU에 두고 미니배치를 나누어 계산한 뒤, 각 GPU가 만든 그래디언트를 합친다. 모델 병렬화는 한 번의 순전파와 역전파 자체가 여러 GPU를 지나가도록 모델 가중치나 레이어를 나눈다.

┌────────────────────────────────────────────────────────────────────┐
│                     Where the split happens                       │
├───────────────────────────────┬────────────────────────────────────┤
│ Data Parallelism              │ Model Parallelism                  │
├───────────────────────────────┼────────────────────────────────────┤
│ batch B0 -> GPU0 [full model] │ GPU0 [part of layer / stage]      │
│ batch B1 -> GPU1 [full model] │ GPU1 [part of layer / stage]      │
│ batch B2 -> GPU2 [full model] │ GPU2 [part of layer / stage]      │
│ batch B3 -> GPU3 [full model] │ GPU3 [part of layer / stage]      │
│ after backward: All-Reduce    │ during forward/backward: send      │
│ same weights on all GPUs      │ activations / partial sums         │
└───────────────────────────────┴────────────────────────────────────┘
전략무엇을 나누나대표 통신가장 잘 해결하는 문제
데이터 병렬화 (DP)미니배치Gradient All-Reduce처리량 확장
텐서 병렬화 (Tensor Parallelism, TP)한 레이어의 행렬All-Gather, All-Reduce거대한 레이어 메모리
파이프라인 병렬화 (Pipeline Parallelism, PP)레이어 스테이지Activation hop깊은 모델 분할
FSDP / ZeRO파라미터·그래디언트·옵티마이저 상태Shard gather / reduce-scatter데이터 병렬화의 메모리 중복 완화

데이터 병렬화의 핵심 공식은 단순하다. Global Batch = Local Batch × Replica 수 × Gradient Accumulation. 이 방식은 구현이 비교적 쉽고, PyTorch Distributed Data Parallel (DDP)처럼 표준 프레임워크 지원도 강하다. 대신 모델은 각 GPU에 그대로 복제되므로, 모델이 한 GPU에 들어가지 않는 순간 데이터 병렬화만으로는 해결되지 않는다.

모델 병렬화는 다시 두 갈래로 나뉜다. 텐서 병렬화는 한 레이어의 큰 행렬 곱을 여러 GPU로 분할하고, 파이프라인 병렬화는 레이어 묶음을 스테이지로 나누어 순차적으로 통과시킨다. 텐서 병렬화는 고속 상호연결이 필수이고, 파이프라인 병렬화는 마이크로배치를 사용해 버블을 줄여야 효율이 난다.

  • 📢 섹션 요약 비유: 데이터 병렬화는 여러 주방이 같은 레시피로 동시에 요리하는 것이고, 모델 병렬화는 한 접시가 너무 커서 재료 손질, 굽기, 플레이팅을 서로 다른 주방에 맡기는 것이다.

Ⅲ. 비교 및 연결

실무에서는 데이터 병렬화와 모델 병렬화를 대립 개념으로만 보면 부족하다. 둘은 경쟁 관계라기보다 병목에 따라 이어지는 단계다. 모델이 한 GPU에 들어가고 배치 크기를 키우고 싶다면 데이터 병렬화가 먼저다. 모델은 들어가지만 옵티마이저 상태 때문에 메모리가 빠듯하면 FSDP나 ZeRO가 그다음이다. 그마저 부족해 한 레이어 자체가 너무 크면 텐서 병렬화, 레이어 깊이가 너무 커지면 파이프라인 병렬화가 들어온다.

비교 축데이터 병렬화모델 병렬화
모델 복제있음없음 또는 부분만 유지
메모리 절감거의 없음
처리량 확장매우 좋음상황에 따라 제한
구현 난이도낮음중간~높음
통신 위치스텝 끝 그래디언트 동기화레이어 내부 또는 스테이지 경계
네트워크 민감도상대적으로 낮음매우 높음

하드웨어 토폴로지도 선택을 바꾼다. 텐서 병렬화는 레이어마다 통신이 자주 발생하므로 NVLink 같은 고대역폭 링크 안쪽에 배치하는 편이 좋다. 반면 데이터 병렬화는 스텝 끝에서만 동기화하므로 노드 간 InfiniBand를 타도 상대적으로 견디기 쉽다. 그래서 대형 학습 클러스터는 보통 노드 내부는 TP/PP, 노드 간은 DP라는 층위 구조를 갖는다.

┌────────────────────────────────────────────────────────────────────┐
│                 Typical placement of hybrid parallelism           │
├────────────────────────────────────────────────────────────────────┤
│ Node 0: GPU0 GPU1 GPU2 GPU3  <- TP / PP over NVLink              │
│ Node 1: GPU4 GPU5 GPU6 GPU7  <- TP / PP over NVLink              │
│    │            │                                                  │
│    └────── DP gradient sync across nodes over InfiniBand ────────┘ │
└────────────────────────────────────────────────────────────────────┘

여기서 FSDP는 중요한 연결 고리다. 이름 때문에 모델 병렬화처럼 보이기 쉽지만, 철학적으로는 데이터 병렬화 계열이다. 모델을 복제하되 파라미터와 상태를 샤딩해 메모리 낭비를 줄이기 때문이다. 즉 분산 학습은 DP와 MP의 이분법보다, 복제-샤딩-분할을 어디까지 섞을 것인가의 스펙트럼으로 이해하는 편이 정확하다.

  • 📢 섹션 요약 비유: 같은 이삿짐을 여러 트럭이 나눠 싣는 것이 데이터 병렬화라면, 너무 큰 가구를 분해해서 트럭 여러 대에 실어야 하는 것이 모델 병렬화다. 실제 이사는 보통 두 방법을 함께 쓴다.

Ⅳ. 실무 적용 및 기술사 판단

실무에서 가장 먼저 해야 할 일은 병렬화 기법 선택이 아니라 메모리와 통신 프로파일링이다. 파라미터, 그래디언트, 옵티마이저 상태, 활성값 중 무엇이 먼저 한계에 닿는지 알아야 하기 때문이다. 그 다음 원칙은 "가장 단순한 방법부터 시작해, 정말 필요할 때만 더 복잡한 병렬화로 간다"이다.

┌────────────────────────────────────────────────────────────────────┐
│                    Practical decision order                       │
├────────────────────────────────────────────────────────────────────┤
│ model fits on one GPU?                                            │
│      ├─ yes -> start with DDP / gradient accumulation             │
│      │                                                             │
│      └─ no                                                         │
│          │                                                         │
│          ▼                                                         │
│ memory issue from replicated states?                               │
│      ├─ yes -> FSDP / ZeRO                                         │
│      └─ no, single layer too large -> TP                           │
│                     deep model across many GPUs -> add PP          │
└────────────────────────────────────────────────────────────────────┘
상황권장 선택이유
모델이 한 GPU에 충분히 들어감DDP가장 단순하고 디버깅이 쉬움
모델은 들어가지만 메모리 여유가 적음FSDP / ZeRO복제 상태를 줄여 더 큰 배치 가능
Attention / MLP 한 층이 너무 큼TP레이어 내부 행렬을 쪼개야 함
레이어 수가 많고 장비가 많음PP + 마이크로배치여러 스테이지를 동시에 활용
다중 노드 대규모 Large Language Model (LLM) 학습DP + TP + PP 하이브리드처리량, 메모리, 토폴로지 균형

안티패턴

  1. 고속 링크가 없는 노드 간에 세밀한 텐서 병렬화를 강제로 확장하는 것
  2. 배치 크기만 키우다 최적화 안정성과 수렴 품질을 잃는 것
  3. 통신 병목을 무시하고 GPU 수만 늘려 선형 확장을 기대하는 것
  4. 체크포인팅 전략 없이 복잡한 병렬화만 추가해 장애 복구 시간을 키우는 것

기술사 답안에서는 "DP는 속도, MP는 용량"이라는 1차 구분 위에, FSDP/ZeRO와 TP/PP의 경계를 덧붙이면 답안 깊이가 살아난다. 특히 토폴로지에 따라 병렬화 계층을 배치한다는 점을 넣으면 실무성이 높아진다.

  • 📢 섹션 요약 비유: 회사를 옮길 때 작은 짐은 사람 수를 늘려 나르면 되고, 너무 큰 냉장고는 분해하거나 특수 장비를 써야 한다. GPU 병렬화도 먼저 어떤 짐이 문제인지 봐야 한다.

Ⅴ. 기대효과 및 결론

분산 학습을 올바르게 설계하면 학습 시간 단축과 모델 규모 확장을 동시에 달성할 수 있다. 데이터 병렬화는 실험 회전 속도를 높여 주고, 모델 병렬화는 단일 장비 한계를 넘어 대형 모델 연구를 가능하게 만든다. 여기에 FSDP, TP, PP를 적절히 섞으면 수십억~수백억 파라미터 모델도 실용적인 시간 안에 학습할 수 있다.

하지만 병렬화가 곧바로 효율을 의미하지는 않는다. 통신 오버헤드, 버블, 체크포인트 복잡도, 디버깅 난이도는 GPU 수와 함께 커진다. 특히 네트워크가 약한 환경에서는 모델 병렬화가 계산 이득보다 통신 손해를 더 크게 만들 수 있다.

따라서 이 주제는 "GPU를 많이 쓰는 법"보다 "병목에 맞게 분할 축을 고르는 법"으로 기억하는 것이 정확하다. 처리량 문제는 데이터 병렬화, 메모리 문제는 모델 병렬화, 그리고 초대형 모델은 하이브리드 병렬화라는 계단식 판단이 핵심이다.

  • 📢 섹션 요약 비유: 큰 공연을 준비할 때 같은 악보를 여러 연주자가 나눠 연습하는 것과, 한 사람이 들 수 없을 만큼 큰 악기를 여러 명이 함께 다루는 것은 다른 문제다. 분산 학습은 이 둘을 구분하고 조합하는 지휘 기술이다.

📌 관련 개념 맵

개념연결 포인트
DDP (Distributed Data Parallel)모델 복제 + 배치 분할의 표준 구현
All-Reduce데이터 병렬화에서 그래디언트를 동기화하는 핵심 통신
FSDP (Fully Sharded Data Parallel)데이터 병렬화의 메모리 중복을 줄이는 샤딩 전략
Tensor Parallelism한 레이어의 거대한 행렬을 여러 GPU로 분할
Pipeline Parallelism레이어 묶음을 스테이지로 나눠 순차 처리
NVLink / InfiniBand병렬화 계층 배치에 직접적인 영향을 주는 상호연결

📈 관련 키워드 및 발전 흐름도

Single-GPU training
    │
    ├─ throughput wall -> Data Parallelism (DDP)
    ├─ memory wall from replicated states -> FSDP / ZeRO
    └─ layer too large -> Tensor Parallelism / Pipeline Parallelism
    ▼
Hybrid 3D parallelism (DP + TP + PP)
    │
    ▼
Large-scale foundation model training

이 흐름은 분산 학습이 단순한 GPU 추가가 아니라, 병목 유형에 따라 병렬화 축을 단계적으로 확장하는 과정임을 보여준다.

👶 어린이를 위한 3줄 비유 설명

  1. 데이터 병렬화는 같은 문제집을 여러 친구가 나눠 풀고 마지막에 답을 모아 보는 거예요.
  2. 모델 병렬화는 문제집이 너무 두꺼워서 앞장은 한 친구, 뒷장은 다른 친구가 맡는 거예요.
  3. 아주 큰 숙제는 두 방법을 같이 써서 빨리도 하고, 한 사람 가방이 터지지 않게 해요.