Further Reading
단일 머신을 사용한 모델 병렬화 모범 사례
Model Parallelism
큰 모델을 여러 GPU에 나누는 방법론



weight 행렬의 열 부분을 나누어 계산row-wise
텐서를 가로로 쪼갠다.



weight 행렬의 행 부분을 나누어 계산
단계
1. Initialization
- 모델을 연속적인 여러 스테이지로 나누고
- 각각의 스테이지들을 GPU에 할당한다.
2. Forward Pass
- 데이터 Batch를 더 작은 단위로 쪼갬
- 쪼개진 Micro-batch 데이터를 순차적으로 주입
- 왜 잘게 쪼개서 주입하나요?
각 GPU에서는 이전의 스테이지가 끝나야지만 연산을 시작할 수 있음
GPU가 연산을 하지 못하는 유휴 시간을Pipeline Bubble이라 지칭
위와 같은 버블 타임을 줄이려면 데이터를 쪼개어 순차적으로 넣어주면 된다.
쪼개진 데이터 단위의 크기만큼 GPU가 쉬기 때문!
다만, 그렇다고해서 너무 작게 분해할 경우 어쨌뜬 현재 Multi-GPU를 사용하는 만큼 그 통신 비용도 존재하기에 통신비용과 데이터사이즈 간에 적절한 최적을 찾아야함
3. Backward Pass
마이크로배치들이 스테이지에 들어간 역순으로 gradients 계산 모델 업데이트

Synchronous Pipeline
각 GPU가 Forward Pass, Backward Pass의 순서를 지켜 처리하여 마이크로배치의 gradients를 동기적으로 집계됨

Asynchronous Pipeline
각 GPU가 Forward Pass, Backward Pass를 번갈아 처리함으로써 gradients가 각 GPU에 따라 비동기적으로 집계됨
DDP와 같은 원리)


병렬 학습의 Trade-off
학습 속도, 메모리 효율성, 수렴 특성 간의 다양한 트레이드오프가 존재
Trade-off
- 학습 속도, 메모리 효율성, 수렴 특성은 서로 충돌하는 경우가 많다.
- 마이크로 배치 수를 늘리면:
- 더 빈번한 단계 통신이 필요해져서 오버헤드가 증가할 수 있다. (메모리 효율성 감소).
- 때로는 모델의 정확도가 낮아지고 (수렴 감소).
- 마이크로 배치 수를 줄이면:
- GPU 메모리 효율성이 감소하게 된다.
- 파이프라인 단계를 줄이면:
- 파이프라인 크기가 증가하여 파이프라인 Bubble이 더 많이 발생한다.
프레임워크 비교:
프레임워크 개발사 유형 속도 향상 메모리 효율성 수렴 GPipe 동기 3 1 3 PipeDream Microsoft 비동기 3 1 1 DAPPLE Alibaba 동기 2 4 4 PipeMare SambaNova Systems 비동기 4 2 2 어떤 전략도 모든 장점을 동시에 달성하기는 힘들다.
| 분류 | Synchronous Pipeline | Asynchronous Pipeline |
|---|---|---|
| 학습 속도 | 학습 속도가 크게 증가하지만 동기화 과정에서 병목 현상이 발생할 수 있음 | 동기화 과정이 없으므로 학습 속도 크게 증가 |
| 메모리 효율성 | 모든 GPU에서 gradients들이 동기화되어야 하기 때문에 메모리 효율성이 상대적으로 낮음 | 동기화 과정에서 생기는 idle time을 최소화하기 때문에 메모리 효율성이 높음 |
| 수렴도 | 안정적이고, 모델의 정확도 높음 | 각 GPU에서 비동기적으로 gradients를 업데이트하기 때문에 불안정하고, 정확도 상대적으로 낮음 |
| 장점 | 구현이 상대적으로 쉬움 | 학습 속도, 메모리 효율성 증가 |
| 단점 | Gradient 동기화 과정으로 인한 idle time 발생 | 구현이 매우 복잡함 |
| 사용 전락 | 동일한 GPU를 여러 개 사용하고, 모델이 안정적으로 수렴해야 할 때 사용 | GPU 환경이 각각 다르고, 메모리 효율성을 극대화할 때 사용 |

| 구분 | Data Parallelism | Tensor Parallelism | Pipeline Parallelism |
|---|---|---|---|
| 전략 | 데이터를 여러 GPU에 분산하여 각 GPU가 모델의 복사본으로 병렬 처리 | 모델의 텐서(weights)를 여러 GPU에 분산하여 각 GPU가 모델의 일부만 처리 | 모델의 여러 층들을 GPU에 분산하여 각 GPU가 순차적으로 모델 일부를 처리 |
| 장점 | 구현이 쉽고, 큰 데이터셋 처리에 효과적 | GPU당 메모리 사용량 감소 | 매우 큰 모델 처리 가능하고, 메모리 부담 감소 |
| 단점 | 각 GPU에 모델 전체가 필요해 메모리 한계 존재 | GPU간 통신이 증가하여 병목(bottleneck) 가능 | 모델 간 데이터 전달로 인한 지연 발생 |
| 사용 전략 | 큰 데이터셋과 중간 크기 모델 학습에 적합 | GPT-3와 같은 초대형 모델 학습에 적합 | 깊은 구조의 대형 모델에 적합 |
어떻게 하면 다양한 상황 속에서 AI 모델들을 더가볍게 만들고, 한정된 자원을 효율적으로 활용할 수 있을까?
최적화경량화키워드를 잘 생각해라
모델 경량화
Pruning
Knowledge Distillation
Quantization

PEFT
Adapter
Low-Rank Adaptation(LoRA)
QLoRA

Data ParallelismModel Parallelism