GPT급 대규모 언어모델은 파라미터가 수십억에서 수천억 개에 달해, GPU 한 장의 메모리에는 애초에 다 올라가지 않습니다. 분산 학습(Distributed Training)은 이 거대한 모델과 방대한 데이터를 여러 GPU, 나아가 여러 노드에 나눠서 동시에 학습시키는 기술입니다. AI 인프라 엔지니어에게는 “GPU를 몇 장 붙이느냐”만큼이나 “학습을 어떻게 쪼개느냐”가 중요한 역량입니다. 이 글에서는 데이터·모델·파이프라인 병렬화부터 ZeRO, FSDP, DeepSpeed까지 핵심 개념을 한 번에 정리합니다.
분산 학습이란 무엇인가
분산 학습은 하나의 모델을 학습하는 연산을 여러 GPU에 분산시켜 메모리 한계를 넘고 학습 속도를 끌어올리는 방법입니다. 문제의 핵심은 ‘메모리 벽’입니다. 학습에는 파라미터뿐 아니라 그래디언트, 옵티마이저 상태(Adam이라면 모멘텀·분산), 활성값(activation)까지 필요합니다. 예를 들어 70B 파라미터 모델은 FP16 파라미터만 약 140GB이고, 옵티마이저 상태까지 더하면 1TB를 훌쩍 넘깁니다. 80GB짜리 H100 한 장으로는 감당할 수 없죠. 그래서 ‘나눠서’ 학습해야 합니다.
왜 분산 학습이 필요한가
- 메모리 한계: 모델과 옵티마이저 상태가 단일 GPU 용량을 초과합니다.
- 학습 속도: 데이터가 많으면 한 장으로는 며칠에서 몇 주가 걸립니다. 여러 장이 나눠 처리하면 시간이 크게 줄어듭니다.
- 확장성: GPU를 늘릴수록 처리량이 선형에 가깝게 늘어나, 클러스터 규모로 확장할 수 있습니다.
3가지 병렬화 전략
분산 학습은 ‘무엇을 나누느냐’에 따라 크게 세 가지로 구분됩니다. 실무에서는 이 전략들을 조합해서 사용합니다.
| 전략 | 무엇을 나누나 | 통신 특징 | 언제 쓰나 |
|---|---|---|---|
| 데이터 병렬화 (DP) | 데이터(배치)를 나눔, 모델은 각 GPU에 복제 | 매 스텝 그래디언트 동기화(AllReduce) | 모델이 한 장에 올라갈 때, 가장 흔함 |
| 텐서 병렬화 (TP) | 한 레이어의 행렬 연산 자체를 쪼갬 | 레이어마다 통신 발생, 고속 인터커넥트 필수 | 레이어 하나도 한 장에 안 들어갈 때 |
| 파이프라인 병렬화 (PP) | 레이어를 단계별로 여러 GPU에 배치 | 단계 간 활성값 전달, ‘버블’ 발생 | 모델이 매우 깊고 클 때 |
데이터 병렬화는 각 GPU가 같은 모델을 복제해 들고, 서로 다른 데이터 조각을 학습한 뒤 그래디언트를 합쳐(AllReduce) 동기화하는 방식으로 가장 널리 쓰입니다. 텐서 병렬화는 거대한 가중치 행렬 곱을 여러 GPU가 나눠 계산하기 때문에 통신량이 많아 NVLink 같은 고속 연결이 필요합니다. 파이프라인 병렬화는 모델의 레이어를 구간으로 잘라 GPU에 배치하고 마이크로배치를 흘려보내는데, 초반과 끝단에 GPU가 노는 ‘버블’을 줄이는 것이 관건입니다.
핵심 개념: ZeRO와 FSDP
데이터 병렬화는 편리하지만 모든 GPU가 파라미터·그래디언트·옵티마이저 상태를 똑같이 중복 저장한다는 낭비가 있습니다. 이 중복을 제거하는 것이 ZeRO와 FSDP입니다.
- ZeRO (Zero Redundancy Optimizer): DeepSpeed의 핵심 기술로, 옵티마이저 상태(Stage 1), 그래디언트(Stage 2), 파라미터(Stage 3)를 순차적으로 여러 GPU에 나눠 저장해 메모리 낭비를 없앱니다.
- FSDP (Fully Sharded Data Parallel): PyTorch에 내장된 방식으로, ZeRO-3와 유사하게 파라미터를 샤딩(sharding)해 각 GPU가 일부만 들고 있다가 필요할 때 모읍니다.
- 3D 병렬화: 데이터·텐서·파이프라인 병렬화를 모두 결합한 방식으로, Megatron-LM 등에서 수백억~수천억 파라미터급 초대형 모델을 학습할 때 사용합니다.
FSDP vs DeepSpeed, 무엇을 고를까
| 항목 | FSDP | DeepSpeed (ZeRO) |
|---|---|---|
| 소속 | PyTorch 네이티브 | Microsoft 라이브러리 |
| 방식 | 파라미터 샤딩(ZeRO-3 유사) | ZeRO 1~3 단계 선택 + 오프로딩 |
| 메모리 오프로딩 | 제한적 | CPU·NVMe 오프로딩에 강점 |
| 진입 장벽 | PyTorch에 익숙하면 쉬움 | 설정이 풍부하지만 다소 복잡 |
| 추천 상황 | PyTorch 생태계 표준을 원할 때 | 극단적 메모리 절약·초대형 학습 |
정답은 없습니다. PyTorch만으로 깔끔하게 가고 싶다면 FSDP, GPU 메모리를 최대한 쥐어짜야 하거나 CPU·NVMe로 오프로딩까지 하고 싶다면 DeepSpeed가 유리합니다.
분산 학습 vs 추론 최적화
둘 다 ‘GPU를 효율적으로 쓴다’는 점은 같지만 목적과 병목이 전혀 다릅니다. 헷갈리지 않도록 정리했습니다.
| 관점 | 분산 학습 (Training) | 추론 최적화 (Inference) |
|---|---|---|
| 목적 | 모델을 만들거나 업데이트 | 완성된 모델로 빠르게 응답 |
| 다루는 것 | 그래디언트·옵티마이저 상태까지 | 순전파(forward)만 |
| 핵심 병목 | GPU 간 통신·메모리 | 지연시간·처리량·KV 캐시 |
| 대표 기법 | DP/TP/PP, ZeRO, FSDP | 양자화, KV 캐시, 배칭 |
추론 쪽 최적화가 궁금하다면 LLM 서빙·추론 최적화 완벽 가이드를, 학습이 끝난 모델을 내 데이터로 다듬는 방법은 파인튜닝 완벽 가이드를 함께 보면 그림이 완성됩니다.
인프라·취업 관점
분산 학습의 성능은 결국 GPU 간 통신이 좌우합니다. 실무에서 챙겨야 할 포인트는 다음과 같습니다.
- 통신 라이브러리·인터커넥트: NCCL이 GPU 간 집합 통신(AllReduce 등)을 담당하고, NVLink·InfiniBand·RDMA 같은 고속 연결이 실제 속도를 결정합니다. GPU와 AI 가속기 완벽 가이드에서 하드웨어 배경을 함께 보면 좋습니다.
- 스케줄링: 다중 노드 학습은 쿠버네티스(GPU 오퍼레이터)나 Slurm으로 자원을 배분합니다.
- 안정성: 수백 GPU가 며칠씩 도는 만큼 체크포인팅과 장애 복구(elastic training)가 필수입니다. 이는 MLOps 관점과 직결됩니다.
- 채용 관점: ‘다중 GPU/노드 학습 경험’, ‘DeepSpeed·FSDP 사용 경험’, ‘NCCL 튜닝’은 AI 인프라·시스템 직무 공고에서 우대사항으로 자주 등장합니다.
자주 묻는 질문(FAQ)
GPU 몇 장부터 분산 학습이 필요한가요?
단일 GPU에 모델과 배치가 다 올라가지 않거나 학습이 지나치게 느릴 때가 기준입니다. 보통 수억~수십억 파라미터급이거나 GPU 2장 이상을 쓰는 순간부터 데이터 병렬화가 자연스럽게 등장합니다.
데이터 병렬화와 모델 병렬화 중 뭘 먼저 써야 하나요?
모델이 GPU 한 장에 올라간다면 데이터 병렬화(+ ZeRO/FSDP)만으로도 충분한 경우가 많습니다. 레이어 하나조차 한 장에 담기지 않을 만큼 클 때 텐서·파이프라인 병렬화를 추가로 도입합니다.
ZeRO와 FSDP는 뭐가 다른가요?
개념은 거의 같습니다. 둘 다 파라미터·상태를 여러 GPU에 샤딩해 중복을 없앱니다. 차이는 구현체입니다. ZeRO는 DeepSpeed의 기능이고, FSDP는 PyTorch 네이티브 구현입니다. CPU·NVMe 오프로딩은 DeepSpeed가 더 강합니다.
신입이 분산 학습을 어디까지 알아야 하나요?
직접 초대형 모델을 처음부터 학습할 일은 드뭅니다. 하지만 병렬화 3종(DP/TP/PP)과 ZeRO의 개념, NCCL·인터커넥트의 역할, 멀티 GPU 실행 방법을 이해하고 있으면 AI 인프라 직무에서 확실한 강점이 됩니다.
더 읽어보기
- GPU와 AI 가속기 완벽 가이드: 왜 AI는 GPU로 돌아가는가
- 쿠버네티스로 AI 워크로드 운영하기: GPU 스케줄링과 오토스케일링
- 파인튜닝 완벽 가이드: LoRA·PEFT로 LLM을 내 것으로
- LLM 서빙·추론 최적화 완벽 가이드: 양자화부터 KV 캐시까지
- MLOps 완벽 가이드: 데이터부터 배포·모니터링까지
※ 이 글은 분산 학습의 핵심 개념을 정리한 입문·실무 안내용 자료입니다. 실제 프레임워크 설정과 최적 병렬화 조합은 모델 규모와 하드웨어 환경에 따라 달라질 수 있습니다.