주제: DT-3 Pipeline Parallel (Micro-batch Scheduling & Bubble Overhead)

분류: foundations

타입: concept

난이도: 중상

선수지식: 있음 — Model Parallel, 역전파, batch 학습

문제 설정

대형 모델에서는 모델을 여러 GPU에 나누는 Model Parallel이 필요합니다. 하지만 단순히 레이어를 GPU마다 배치하면 GPU들이 순차적으로 일하게 되어 효율이 떨어집니다.

이를 해결하기 위해 사용하는 방식이 Pipeline Parallel입니다.

핵심 아이디어:

직관 비유

1. Pipeline Parallel 구조

예: 4개의 GPU

GPU0 : Layer1
GPU1 : Layer2
GPU2 : Layer3
GPU3 : Layer4

forward 계산:

x -> GPU0 -> GPU1 -> GPU2 -> GPU3

수식 표현

y=f4(f3(f2(f1(x))))

왜 필요한가

모델이 너무 커서 하나의 GPU에 올릴 수 없을 때 학습이 가능합니다.

주의점

GPU가 순차적으로 작동하면 많은 시간이 낭비됩니다.

2. Micro-batch

전체 batch를 여러 작은 batch로 나눕니다.

B=Mxb

기호 의미

직관 설명

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

직관 설명

생산 라인이 완전히 채워지기 전까지 일부 작업자가 기다리는 상황과 같습니다.

수식 근사

Bubble(pipelinestages1)/microbatches

기호 의미

왜 중요한가

micro-batch 수가 많을수록 bubble overhead가 줄어듭니다.

5. 효율 개선

pipeline 효율:

EfficiencyM/(M+P1)

기호 의미

직관 설명

주의점

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개

체크리스트 (스스로 설명 가능해야 하는 질문)