# パイプライン並列化
## 定義
パイプライン並列化(Pipeline Parallelism、PP)は、ニューラルネットワークの層を複数のセグメント(ステージ/セル)に分割し、各ステージを別々の加速器(GPU/TPU)に割り当てる並列化手法である。層間の依存を保ちながら複数のマイクロバッチを同時に処理することで、デバイスの利用率を向上させる。
テンソル並列化(TP)が「1 つの行列演算を複数デバイスで分割する(層内分割)」のに対し、パイプライン並列化は「層を順番に割り当てる(層間分割)」である。通信はステージ境界の活性化テンソルの受け渡しのみで、AllReduce のような集合通信を必要としない。
### 主要な設計変数
| 変数 | 説明 |
|------|------|
| K | ステージ数(=デバイス数) |
| M | マイクロバッチ数 |
| スケジューリング | バブル(アイドル時間)の発生パターンを決定する |
### パイプラインバブル
素朴なモデル並列化では、順伝播でステージ 1 → 2 → ... → K と順番に処理するため、各ステージは前後の処理が終わるまで待機する。この待機時間が「パイプラインバブル」である。
バッチ分割(マイクロバッチ化)によりバブルを削減できる。M 個のマイクロバッチを順次パイプラインに流せば、複数のマイクロバッチが異なるステージで同時に処理される状態が続く。
## 横断的知見
### GPipe: 同期的バッチ分割パイプライン(2019)
[[@2019__NeurIPS__GPipe Easy Scaling with Micro-Batch Pipeline Parallelism]] は、マイクロバッチ化と[[再マテリアライゼーション]]を組み合わせた同期的パイプライン並列化の起点となる実装を提案した。
- **バブルオーバーヘッドの定式化**: $O((K-1)/(M+K-1))$ であり、M ≥ 4K のとき無視可能。
- **活性化メモリの削減**: 再マテリアライゼーションにより $O(N \times L)$ から $O(N + K \times L/M)$ へ削減。
- **同期的更新の保証**: 全マイクロバッチの勾配をミニバッチ末尾に積算して一括適用するため、非同期更新のような重みストールが生じない。
- **低通信設計**: ステージ境界の活性化テンソルのみを転送するため、NVLink などの高速インターコネクトなしでも有効(GPU PCI-E 環境で K=8, M=32 時 Transformer 3.3× スピードアップ)。
### 後継のスケジューリング最適化との関係
[[並列化戦略]] §横断的知見が示すように、GPipe(fill-drain)の後に 1F1B スケジューリング(Megatron-LM)・インターリーブドスケジュール・Zero Bubble・DualPipe(DeepSeek-V3)と改良が続く。主な改良軸は:
1. **バブルの削減**: GPipe は M ≥ 4K が条件だが、1F1B は (K-1)/M と小さく、Zero Bubble はほぼゼロにする。
2. **メモリと計算のバランス**: インターリーブドスケジュールは仮想ステージを用いてバブルを削減しつつメモリ消費を増やすトレードオフがある。
3. **双方向パイプライン**: DualPipe は順伝播と逆伝播を双方向に重ねて計算と通信を完全に隠蔽するが、実装の複雑性と保守コストを増す。
### テンソル並列化との比較
- **通信量**: TP は AllReduce が多発し高速インターコネクト(NVLink)必須。PP はステージ境界の点対点転送のみ。
- **適用範囲**: TP はノード内に限定されることが多い。PP はノード間にまたがって使いやすい。
- **スケール**: GPipe で実証した Transformer-83.9B(128 加速器)のような大規模分割は TP のみでは困難。
### 実装上の課題
1. **バッチ統計を跨ぐ演算**: BatchNorm などマイクロバッチをまたぐ統計量が必要な演算は複雑な対処が要る。
2. **ステージ分割の不均衡**: [[ストラグラー]] ページが示すように、最終ステージに損失層が集中すると計算不均衡が生じる(Transformer の損失層は FF 層の約 9 倍の計算量)。
3. **1 層が 1 デバイスに収まる前提**: GPipe は 1 層が単一加速器のメモリに収まることを要件とする。
## 未解決の問い
- GPipe の同期更新と PipeDream/1F1B の非同期・weight stashing との性能差は実用スケール(数百〜数千 GPU)でどの程度か。
- Zero Bubble は理論上バブルをほぼゼロにするが、BatchNorm のような非対応演算が混在するモデルへの適用可能性は。
- DualPipe(DeepSeek-V3)が選択したテンソル並列不使用 + 双方向パイプラインは、Transformer 以外(CNN・MoE・SSM)でも有効か。
- ステージ分割の自動均衡化(語彙層・損失層を含む)を訓練開始前に静的最適化できるか。
## 関連
- 概念: [[並列化戦略]] / [[再マテリアライゼーション]] / [[LLM分散学習]] / [[ストラグラー]] / [[集合通信]] / [[Mixture-of-Experts]]
- エンティティ: [[GPipe]] / [[Megatron-LM]] / [[DeepSeek-V3]] / [[Yanping Huang]] / [[Google Brain]]
- ソース: [[@2019__NeurIPS__GPipe Easy Scaling with Micro-Batch Pipeline Parallelism]]
- 関連 MOC: [[分散深層学習 - MOC]]
## 出典
- [[@2019__NeurIPS__GPipe Easy Scaling with Micro-Batch Pipeline Parallelism]](バッチ分割 PP の原典、バブル $O((K-1)/(M+K-1))$、再マテリアライゼーション、Transformer 83.9B 実証)