# パイプライン並列化 ## 定義 パイプライン並列化(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 個のマイクロバッチを順次パイプラインに流せば、複数のマイクロバッチが異なるステージで同時に処理される状態が続く。 ## 横断的知見 - **Zero Bubbleの実運用では、バブル削減と投機的更新を分離できる**: [[PLaMo-100B]]はZero Bubbleのパイプラインスケジューリングを採用したが、デバッグの難しさとgradient clippingの常時発生を理由に投機的なパラメータ更新は採用しなかった。理論上のバブル削減率だけでなく、更新方式の実装複雑性を別途評価する必要がある。(Source: [[@2024__Preferred Networks__1,000億パラメータ規模の独自LLM「PLaMo-100B」の事前学習]]) ### 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]]) ### 長系列訓練における部分系列単位のバブル削減(SPPO, ICS 2026) [[@2026__ICS__SPPO - Making Million-Token LLM Training Practical on Modest GPU Clusters]] は、長系列(最大400万トークン)LLM 訓練において1F1Bのようなマイクロバッチベースのバブル削減策が機能しなくなる問題を扱う。系列長が増大しマイクロバッチ数が1に収束すると、1F1Bは素朴なパイプラインスケジュールに退化し大きなバブルが生じる。SPPOはこれを部分系列(subsequence)単位のパイプライン化で解決する。 - **多重化系列分割(Multiplexing Sequence Partitioning)**: バブル隣接部分系列を Left-SP・Steady・Right-SP の3フェーズに再分割し、従来のシーケンス並列化([[シーケンス並列化]])を局所適用して並列に前進・後退計算を実行することで、追加メモリオーバーヘッドなしにバブルを埋める。バブル比率 $R_b = (p-1)/N$(p はパイプライン段数、N は部分系列数)を、N を大きくするだけでなく、バブル隣接部分だけをさらに細分化してシーケンス並列で埋めるという二段構えで削減する発想は、GPipe の $M \geq 4K$ という単純なマイクロバッチ数増加戦略とは異なる軸である。 - **オフロードとパイプラインスケジューリングの結合最適化**: SPPO はヒューリスティックソルバーでパイプライン段数 PP・部分系列数 N・シーケンス並列度 SP を同時決定し、[[アクティベーションオフロード]]の適応的オフロード比率と組み合わせる。パイプラインバブル削減とメモリオフロードを独立に最適化する既存研究(GPipe・1F1B・ReCycle 等)に対し、両者を結合して最適化する点が新しい。 - アブレーションでは、多重化系列分割の追加により GPT-13B で 1.44 倍、GPT-65B で 3.48 倍の相対速度向上を得ており、バブル比率が高い(N と p の組み合わせで決まる)ケースほど効果が顕著。 (Source: [[@2026__ICS__SPPO - Making Million-Token LLM Training Practical on Modest GPU Clusters]]) ### 導入教科書における素朴なパイプライン並列化の説明 [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]] §6.1.4.2は、GPipeのようなマイクロバッチ化やバブルの定式化には立ち入らず、4台のマシンに1〜4層目を割り当て、各マシンが最初のマイクロバッチの計算を終えたら結果を次段へ渡しつつ自分は次のマイクロバッチに着手する、という素朴な説明でパイプライン並列化の核心(層間分割+マイクロバッチ化による待機削減)を示す。本ページが蓄積してきたGPipeの定量的なバブル定式化$O((K-1)/(M+K-1))$や1F1B・Zero Bubbleのスケジューリング最適化は、この素朴な説明が持つ「マイクロバッチをずらして流せば待機時間を削れる」という直感を、具体的にどれだけ削れるか・どう削るかへ精緻化したものと位置づけられる。同時に本書は、モデルの並列化とデータの並列化は排他的ではなく多くの企業が併用しているとも述べており、本ページが扱う3D parallelismという実務上の帰結を、GPipeのような単一次元の技術解説より前の段階で予告している。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]] §6.1.4.2) - [SPMD比較] PATHWAYS 上で 3B パラメータ Transformer を16段パイプラインに分割しても、SPMD構成(125.7k tokens/s)を上回る131.4k tokens/sのスループットを維持し、ステージ数を4→16に増やした際の低下も133.7k→131.4k tokens/sとわずかである。SPMDの集合通信オーバーヘッドがパイプラインバブルオーバーヘッドより大きい場合、パイプライン並列化はSPMDに対して競争力を持つことを示す一事例。(Source: [[@2022__MLSys__Pathways - Asynchronous Distributed Dataflow for ML]]) - [ステージ化の柔軟性] Alpa の inter-operator 並列は、パイプライン並列を一般化し、ステージが不均等な数の演算子・層を含んでよく、かつ異なる形状のデバイスメッシュに写されてよいという 2 点の柔軟性を与える。Megatron-LM/PTD-P のような手動 3D Parallelism は、全ステージへ等しい層数を割り当て、全ステージへ同じ次数のデータ・テンソル並列を強制するのに対し、Alpa は動的計画法(DP)でステージ・メッシュ割り当てを最適化し、Wide-ResNet のような層ごとに計算・メモリ特性が大きく変わる異種モデルでも 32 GPU で 80% のスケーリング効率を達成した。(Source: [[@2022__OSDI__Alpa - Automating Inter- and Intra-Operator Parallelism for Distributed Deep Learning]]) ## 未解決の問い - 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 モデルと同じように機能するか。 - SPPO の多重化系列分割は N と p の組み合わせで決まるバブル比率が高いケースで有効だが、Zero Bubble・DualPipe のようなバブルをほぼゼロにする既存スケジュールと組み合わせた場合、追加の利得は残るか、それとも冗長になるか。 ## 関連 - 概念: [[並列化戦略]] / [[再マテリアライゼーション]] / [[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]] / [[@2026__ICS__SPPO - Making Million-Token LLM Training Practical on Modest GPU Clusters]] / [[@2022__MLSys__Pathways - Asynchronous Distributed Dataflow for ML]] / [[@2022__OSDI__Alpa - Automating Inter- and Intra-Operator Parallelism for Distributed Deep Learning]] - 関連 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 キャッシュ移行) - [[@2026__ICS__SPPO - Making Million-Token LLM Training Practical on Modest GPU Clusters]](部分系列単位の適応的オフロードと多重化系列分割によるバブル削減・最大3.38倍のスループット改善) - [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]](4台のマシンによる素朴なパイプライン並列化の導入的説明、モデル並列化とデータ並列化の併用への言及)