Pipeline Parallelism
Pipeline Parallelism (PP)
Pipeline Parallelism — метод распределения модели, при котором слои модели распределяются по GPU вертикально. Входные данные разбиваются на микро-батчи, обрабатываемые конвейером для минимизации простоя GPU.
Что такое Pipeline Parallelism
Pipeline Parallelism (PP) — разделение модели по слоям между GPU. GPU 0 выполняет слои 0-9, GPU 1 — слои 10-19 и т.д. Для уменьшения простоя (bubble) батч разбивается на микро-батчи, создавая конвейер.
Проблема наивного разделения
Без конвейера только одна GPU работает в каждый момент:
Наивное: GPU 0 [████ ] → GPU 1 [ ████ ] → GPU 2 [ ████ ]
Работает Ждёт Ждёт Работает Ждёт Работает
Утилизация: 33%
Конвейер (Pipeline)
Батч разбивается на chunks (микро-батчи):
chunk0 chunk1 chunk2 chunk3
GPU 0: [F0 ][F1 ][F2 ][F3 ][B3 ][B2 ][B1 ][B0 ]
GPU 1: [ ][F0 ][F1 ][F2 ][F3 ][B3 ][B2 ][B1 ]
GPU 2: [ ][ ][F0 ][F1 ][F2 ][F3 ][B3 ][B2 ]
F = forward, B = backward
Bubble (простой) = (PP_degree - 1) / (PP_degree - 1 + chunks)
Чем больше chunks, тем меньше bubble. При chunks=32 и PP=4: bubble = 3/35 ≈ 8.6%.
Расчёт batch size с PP
Global Batch Size = micro_batch_size × chunks × DP_degree
Пример:
micro_batch_size = 8
chunks = 32
DP_degree = 4
GBS = 8 × 32 × 4 = 1024
Схемы PP
| Схема | Bubble | Память | Описание |
|---|---|---|---|
| GPipe | Большой | Большая | Все forward, потом все backward |
| 1F1B | Меньше | Меньше | Forward и backward чередуются |
| Interleaved 1F1B | Минимальный | Средняя | Каждая GPU обрабатывает несколько непоследовательных слоёв |
Комбинация DP + PP + TP
На практике используют все три вида параллелизма:
64 GPU = 8 нод × 8 GPU:
- TP = 4 (внутри ноды, NVLink)
- PP = 4 (между нодами, InfiniBand)
- DP = 4 (между группами PP, All-Reduce)
Это позволяет обучать модели с триллионами параметров.