# パイプライン並列化 ## 定義 パイプライン並列化(Pipeline Parallelism、PP)は、ニューラルネットワークの層を複数のセグメント(ステージ/セル)に分割し、各ステージを別々の加速器(GPU/TPU)に割り当てる並列化手法である。層間の依存を保ちながら複数のマイクロバッチを同時に処理することで、デバイスの利用率を向上させる。 テンソル並列化(TP)が「1 つの行列演算を複数デバイスで分割する(層内分割)」のに対し、パイプライン並列化は「層を順番に割り当てる(層間分割)」である。通信はステージ境界の活性化テンソルの受け渡しのみで、AllReduce のような集合通信を必要としない。 推論サービングでは、各ステージが中間出力を次段へ転送しつつ次のマイクロバッチを処理する。DynaPipe は、自己回帰生成で最終ステージだけがサンプリング処理を担うために生じる不均衡を対象に、実行時の層再配分と非同期 KV キャッシュ移行を提案した。(Source: [[@2025__NeurIPS__DynaPipe - Dynamic Layer Redistribution for Efficient Serving of LLMs with Pipeline Parallelism]]) ### 主要な設計変数 | 変数 | 説明 | |------|------| | 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+(L/K)\times(N/M))$ へ削減。$L/K$ は各セルの層数、$N/M$ はマイクロバッチサイズである。 - **同期的更新の保証**: 全マイクロバッチの勾配をミニバッチ末尾に積算して一括適用するため、非同期更新のような重みストールが生じない。 - **低通信設計**: ステージ境界の活性化テンソルのみを転送するため、NVLink などの高速インターコネクトなしでも有効(GPU PCI-E 環境で K=8, M=32 時 Transformer 3.3× スピードアップ)。 [[@2026__30papers__GPipe Efficient Training of Giant Neural Networks using Pipeline Parallelism]]との照合で、同じ$K=8,M=32$でも正規化スループットは均質なTransformerで6.3、層コストが偏るAmoebaNetで3.48に留まることが確認できる。したがって、$M$を増やして理論上のfill-drainバブルを縮めることと、各ステージの計算時間を均衡させて実効バブルを縮めることは別の最適化問題である。後者は[[ストラグラー]]問題であり、後続のスケジューリング最適化だけでは解消しない。 ### 後継のスケジューリング最適化との関係 [[並列化戦略]] §横断的知見が示すように、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 層が単一加速器のメモリに収まることを要件とする。 ### ReCycle: パイプラインバブルを耐障害資源として転用(SOSP 2024) [[@2024__SOSP__ReCycle - Resilient Training of Large DNNs using Pipeline Adaptation]] は、パイプライン並列化の「バブル」を単なるアイドルスロットではなく**耐障害資源**として活用する観点を提示した。 - **1F1B のバブル量**: データ並列度 DP・パイプライン深度 PP に対して 3×(PP-1)×DP 個存在する。LLaMA-3 405B(PP=16, DP=64)では 2,880 バブル/イテレーションで最大 30 同時障害分を収容できる。 - **バブルの偏在問題**: ウォームアップとクールダウンフェーズに偏在し、ステディフェーズはバブルフリー。障害時の追加作業をステディフェーズに差し込むとスケジュールが崩れる。 - **分割逆伝播(Decoupled BackProp)**: B_weight(パラメータ勾配)をクールダウンバブルに遅延させ、ステディフェーズの空きを確保する。後段ほどメモリが空いているという既知の不均衡を活用する。 - **ストラグラーオプティマイザ(Staggered Optimizer)**: ステージごとのオプティマイザステップをずらしてウォームアップバブルも活用する。 (Source: [[@2024__SOSP__ReCycle - Resilient Training of Large DNNs using Pipeline Adaptation]]) ### 推論サービングにおける動的層再配分 DynaPipe は、学習用の静的な層再配分とは異なり、生成時のサンプリング負荷による最終ステージの偏りを扱う。担当層が変わるときは、移行対象層の KV キャッシュを新しいステージへ非同期に引き渡し、他の層の計算と通信を重ねる。したがって、推論の PP は学習の PP と同じ層間分割を用いる一方で、負荷不均衡と状態移行が固有の設計課題となる。(Source: [[@2025__NeurIPS__DynaPipe - Dynamic Layer Redistribution for Efficient Serving of LLMs with Pipeline Parallelism]]) ## 未解決の問い - GPipe の同期更新と PipeDream/1F1B の非同期・weight stashing との性能差は実用スケール(数百〜数千 GPU)でどの程度か。 - Zero Bubble は理論上バブルをほぼゼロにするが、BatchNorm のような非対応演算が混在するモデルへの適用可能性は。 - DualPipe(DeepSeek-V3)が選択したテンソル並列不使用 + 双方向パイプラインは、Transformer 以外(CNN・MoE・SSM)でも有効か。 - ステージ分割の自動均衡化(語彙層・損失層を含む)を訓練開始前に静的最適化できるか。 - GPipeの経験則$M\geq4K$は主に小規模な同種加速器で得られたが、数百ステージ、異種デバイス、動的な層コストの条件でも有効な閾値になるか。 - ReCycle の分割逆伝播はステージ後段のメモリ余剰を前提とするが、ZeRO スタイルの DP やインターリーブドスケジュールでは後段メモリの余剰が成立しないケースがある。パイプラインバブルの耐障害転用は他のスケジュール(Zero Bubble・DualPipe 等)に対してどう拡張できるか。 - DynaPipe の層再配分と[[Prefill-Decode分離]]・[[KVキャッシュ管理]]・[[テンソル並列]]の不均一分割は、同一クラスタで独立に最適化できるか、それとも競合するか。 - ステージ数が動的に変わるマルチインスタンス・オートスケーリング環境で、層再配分アルゴリズムをどう設計するか。 - MoE の Expert Parallelism が層間負荷分布を変えるとき、DynaPipe 型の再配分は Dense モデルと同じように機能するか。 ## 関連 - 概念: [[並列化戦略]] / [[再マテリアライゼーション]] / [[LLM分散学習]] / [[LLM推論]] / [[LLMサービング管理]] / [[KVキャッシュ管理]] / [[Prefill-Decode分離]] / [[テンソル並列]] / [[ストラグラー]] / [[集合通信]] / [[Mixture-of-Experts]] / [[耐障害LLM訓練]] - エンティティ: [[GPipe]] / [[Megatron-LM]] / [[DeepSeek-V3]] / [[Yanping Huang]] / [[Google Brain]] / [[ReCycle]] / [[Swapnil Gandhi]] / [[Christos Kozyrakis]] - ソース: [[@2019__NeurIPS__GPipe Easy Scaling with Micro-Batch Pipeline Parallelism]] / [[@2026__30papers__GPipe Efficient Training of Giant Neural Networks using Pipeline Parallelism]] / [[@2024__SOSP__ReCycle - Resilient Training of Large DNNs using Pipeline Adaptation]] / [[@2025__NeurIPS__DynaPipe - Dynamic Layer Redistribution for Efficient Serving of LLMs with Pipeline Parallelism]] - 関連 MOC: [[分散深層学習 - MOC]] ## 出典 - [[@2019__NeurIPS__GPipe Easy Scaling with Micro-Batch Pipeline Parallelism]](バッチ分割 PP の原典、バブル $O((K-1)/(M+K-1))$、再マテリアライゼーション、Transformer 83.9B 実証) - [[@2026__30papers__GPipe Efficient Training of Giant Neural Networks using Pipeline Parallelism]](30papers掲載版、同一$K,M$でのTransformerとAmoebaNetのスケール差、中心図と用語解説) - [[@2024__SOSP__ReCycle - Resilient Training of Large DNNs using Pipeline Adaptation]](パイプラインバブルを耐障害資源に転用・1F1B のバブル量 3×(PP-1)×DP・分割逆伝播・ストラグラーオプティマイザ) - [[@2025__NeurIPS__DynaPipe - Dynamic Layer Redistribution for Efficient Serving of LLMs with Pipeline Parallelism]](推論サービングのサンプリング負荷を考慮した動的層再配分と非同期 KV キャッシュ移行)