주제: DT-3 Pipeline Parallel (Micro-batch Scheduling & Bubble Overhead)
문제 설정
대형 모델에서는 모델을 여러 GPU에 나누는 Model Parallel이 필요합니다. 하지만 단순히 레이어를 GPU마다 배치하면 GPU들이 순차적으로 일하게 되어 효율이 떨어집니다.
이를 해결하기 위해 사용하는 방식이 Pipeline Parallel입니다.
핵심 아이디어:
- 모델을 여러 GPU에 레이어 단위로 분할
- batch를 여러 micro-batch로 나누어 파이프라인 처리
직관 비유
- 공장 생산 라인
- 각 공정이 서로 다른 작업을 수행
- 여러 제품이 동시에 다른 공정을 통과
1. Pipeline Parallel 구조
예: 4개의 GPU
GPU0 : Layer1
GPU1 : Layer2
GPU2 : Layer3
GPU3 : Layer4
forward 계산:
x -> GPU0 -> GPU1 -> GPU2 -> GPU3
수식 표현
왜 필요한가
모델이 너무 커서 하나의 GPU에 올릴 수 없을 때 학습이 가능합니다.
주의점
GPU가 순차적으로 작동하면 많은 시간이 낭비됩니다.
2. Micro-batch
전체 batch를 여러 작은 batch로 나눕니다.
기호 의미
- B : 전체 batch size
- M : micro-batch 수
- b : micro-batch 크기
직관 설명
micro-batch를 사용하면 여러 GPU가 동시에 작업할 수 있습니다.
micro-batch1
micro-batch2
micro-batch3
3. Pipeline 스케줄
예: 4 GPU, 4 micro-batch
Step1 GPU0 : MB1
Step2 GPU0 : MB2 GPU1 : MB1
Step3 GPU0 : MB3 GPU1 : MB2 GPU2 : MB1
Step4 GPU0 : MB4 GPU1 : MB3 GPU2 : MB2 GPU3 : MB1
이후 backward도 파이프라인으로 진행됩니다.
왜 중요한가
여러 GPU가 동시에 계산하도록 만들어 효율을 높입니다.
4. Bubble Overhead
Pipeline 시작과 끝에서는 일부 GPU가 대기 상태가 됩니다.
이 유휴 시간을 bubble이라고 합니다.
초기 단계
GPU0만 작업
GPU1~GPU3 idle
직관 설명
생산 라인이 완전히 채워지기 전까지 일부 작업자가 기다리는 상황과 같습니다.
수식 근사
기호 의미
- pipeline_stages : GPU 수
- micro_batches : micro-batch 수
왜 중요한가
micro-batch 수가 많을수록 bubble overhead가 줄어듭니다.
5. 효율 개선
pipeline 효율:
기호 의미
- M : micro-batch 수
- P : pipeline stage 수
직관 설명
- micro-batch 증가 -> GPU 활용 증가
- bubble 감소
주의점
micro-batch가 너무 많으면 메모리 사용량이 증가합니다.
6. Pipeline vs Tensor Parallel
| 방법 | 분할 방식 | 목적 |
|---|---|---|
| Pipeline Parallel | 레이어 분할 | 메모리 확장 |
| Tensor Parallel | 행렬 분할 | 연산 분산 |
코드-수식 연결
| 개념 | 구현 예 | 설명 |
|---|---|---|
| Pipeline Parallel | torch.distributed.pipeline.sync.Pipe |
pipeline 모델 |
| micro-batch | chunks |
batch 분할 |
| forward/backward | loss.backward() |
gradient 계산 |
자주 하는 오해 5개
- Pipeline Parallel은 Data Parallel과 동일하다고 생각한다
- micro-batch가 없어도 pipeline이 효율적이라고 생각한다
- bubble overhead가 항상 작다고 생각한다
- Pipeline Parallel은 통신이 필요 없다고 생각한다
- 모든 GPU가 항상 동시에 계산한다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- Pipeline Parallel의 기본 아이디어는 무엇인가?
- micro-batch는 왜 필요한가?
- bubble overhead는 왜 발생하는가?
- micro-batch 수가 늘어나면 효율은 어떻게 변하는가?
- Pipeline Parallel과 Tensor Parallel의 차이는 무엇인가?