**分散深層学習**とは、単一計算機の計算資源とメモリに収まらない規模のモデル、データ、学習時間制約に対して、複数の計算資源(GPU/TPU/CPU、ノード、ラック、さらにはデータセンター間)を協調させて一つの学習過程を実現する方法論と実装群の総称である。その射程は学習(訓練)と推論の両方に及ぶが、とりわけ訓練段階では、勾配計算・パラメータ更新・状態管理・入出力・障害回復・再現性といった系の全構成要素が密接に絡み合う。なお、通信制約下で異なる組織に跨る学習を強調する「連合学習」は、データ主権やプライバシの要請に基づく別系統のパラダイムであり、本稿の対象である「分散深層学習」は主として同一信頼境界内での高性能分散計算を指す。
学習過程の基本動作は、[[順伝播]]、損失算出、[[誤差逆伝播法]]、勾配の集約、最適化器によるパラメータ更新という一連の反復からなる。自動微分系は演算グラフにフックを挿入し、各テンソルの勾配が可用になった時点で通信ライブラリに集合通信(AllReduce・ReduceScatter・AllGather・Broadcast 等)を発行する。半精度計算(FP16/BF16)と混合精度最適化、損失スケーリング、勾配蓄積、勾配クリッピングは大規模化に伴い事実上の標準構成であり、1ステップの実効バッチサイズは「データ並列度 × 勾配蓄積ステップ数 × 各デバイスのミニバッチ」から決まる。ステップ時間は粗く $T_\mathrm{step}\approx T_\mathrm{comp}+T_\mathrm{comm}+T_\mathrm{io}+T_\mathrm{sync}+T_\mathrm{straggle}$ と書け、計算・通信のオーバーラップ、I/O の前取り、同期点の削減、遅延ワーカー緩和がスケーリング効率の鍵となる。
並列化戦略は古典的にデータ並列、モデル並列、パイプライン並列に大別されるが、現代的システムはしばしばこれらを合成し、さらに専門化した並列(例えば Mixture-of-Experts におけるエキスパート並列や、長文脈処理のシーケンス/コンテキスト並列)を含めた「3D/4D 並列」の設計空間で最適化される。データ並列は同一モデルを複製し、異なるバッチ分割を処理して勾配を平均化する SPMD(Single Program Multiple Data)様式が基本で、同期 SGD をリング型 AllReduce で実装するのが主流である。リング AllReduce の通信量は各ランクあたり $2\frac{P-1}{P}N$ バイト(N は勾配総量、P はランク数)で、遅延–帯域モデルでは $2(P-1)\alpha + 2\frac{P-1}{P}N\beta$ のコストを持つ。帯域律速な大規模勾配通信を抑えるため、勾配のバケット化とフック駆動の逐次 AllReduce、ReduceScatter–AllGather 分解、圧縮や量子化、スパース化、バックワード計算との重ね合わせが実装上の定石である。モデル並列は単層内の行列・テンソルを分割するテンソル並列を中核に、列分割・行分割線形層の交互配置や注意機構のヘッド分割などで各ステップの AllGather/ReduceScatter 点を抑制する設計が採られる。パイプライン並列はモデルを段(ステージ)に分割し、マイクロバッチを流す。ステージ数を S、マイクロバッチ数を M とするとバブルの非効率率は概ね $(S-1)/M$ に比例するため、1F1B(one-forward-one-backward)系のスケジューリングや仮想ステージ化でバブルを縮める。Mixture-of-Experts ではトークンをゲートでサブネット(エキスパート)に振り分けるため AllToAll が主要通信となるが、容量制約・K-Top ルーティング・バランス正則化で負荷の歪みとホットスポットを抑える。
メモリ階層と状態管理は、分散深層学習で最も頻出のボトルネックである。Adam 系最適化では各パラメータにつきモーメント二種(m, v)と FP32 マスター重みが追加され、FP16/BF16 訓練でも総メモリは「パラメータ+勾配+マスター+二つのモーメント」によりパラメータサイズの数倍に膨らむ。これを緩和する枠組みがゼロ冗長化([[2019__SC__ZeRO - Memory optimizations Toward Training Trillion Parameter Models|ZeRO]])と完全シャーディング([[FSDP]])であり、ZeRO Stage 1 は最適化器状態、Stage 2 は勾配、Stage 3 はパラメータ自身までをデータ並列グループで分割して保持し、必要時にだけ AllGather で集約、更新後に再シャードする。理想化すればデータ並列度 D に対してメモリは約 $1/D$ に縮むが、断片化・再構成の通信コスト、チェックポイント再構築、オーバーラップ設計が成否を分ける。活性化のメモリも深いネットでは支配的になり、チェックポイント法(再計算)により保存点間隔 s に対して計算を $(1+1/s)$ 倍に増やす代わりに活性化メモリを大幅に削減する。NVLink/NVSwitch、PCIe、InfiniBand/RoCE といった接続の帯域・トポロジを踏まえた階層的通信(ノード内は高速集約、ノード間は疎通信)と、CPU/NVMe への状態オフロードの併用が実務では一般的になっている。
データパイプラインは、分散度が高いほど学習ループの律速になりやすい。シャーディングされたデータローダは各ランクに一意なサンプル列を供給し、エポック再現性を保ちつつ分散シャッフルを行う。テキスト事前学習ではコーパス混合比の温度付きサンプリング、トークナイズの前処理キャッシュ、長文脈では文書境界を跨ぐサンプル化と位置埋め込みの扱いが重要である。I/O 側では、メモリマップ・シーケンシャル先読み・非同期ロード・カラムナフォーマット・程度の良い圧縮の組み合わせでストレージ負荷を平準化する。統計的均質性を保つため、失敗・再実行時のサンプル重複(あるいは欠落)を抑えるリーダ・レプリカ方式や決定的サンプル割当の仕組みを備えるのが良い。
最適化と学習動学の観点では、分散度の上昇とともに実効バッチが増大し、一般化と収束特性が変化する。大規模バッチでは勾配ノイズスケールが低下し、学習率のウォームアップと層別学習率、LARS/LAMB のような比率型スケーリング、適切なウェイト・デカイと正則化、勾配クリッピングが安定性に寄与する。同期型に比べて非同期 SGD はストレール(古い重みに基づく勾配)の影響を受けやすく、パラメータサーバ方式では一貫性モデル(バウンデッド・スタレネス等)の設計が不可欠となるが、現行の超大規模訓練では収束・再現性・デバッグ容易性の観点から同期待ち(全縮約)を前提にする構成が主流である。
通信の微視的最適化としては、勾配の量子化(例えば 8-bit/1-bit 勾配、符号SGD)、誤差補償つき圧縮、勾配の重要度サンプリング、スパース AllReduce の実験的実装があるものの、汎用的には「勾配バケットのサイズ調整」「バックワードとの重ね合わせ」「ReduceScatter を基調にした分割更新」「トポロジー認識のルーティング」「重み更新の遅延・合成(gradient accumulation)」の方が再現性が高い。AllReduce の実装もリング・ツリー・階層化の選択が効く。ノード内は GPU 間の NVLink/NVSwitch を活かした大粒度集約、ノード間は InfiniBand の階層木や2D トーラス/ドラゴンフライでのパターン最適化が奏功する。
ソフトウェア・スタックは多層的である。上位に [[PyTorch]]/TensorFlow/JAX といったフレームワーク、下位に [[NCCL]]/[[RCCL]]、MPI/Gloo、XLA/PJRT や各種自動並列化コンパイラ、さらに監視とオーケストレーションの層([[Slurm]]、[[Kubernetes]]、[[2018__OSDI__Ray A Distributed Framework for Emerging AI Applications|Ray]] 等)が重なる。PyTorch DDP は自動微分の勾配到達をトリガにしたバケット単位の AllReduce を提供し、FSDP/ZeRO/FairScale/DeepSpeed 系は状態分割・再構成を抽象化する。JAX 系では SPMD パーティショナ(GSPMD/DTensor)や Mesh 設計でテンソル軸とデバイス軸の写像を宣言的に与える。これらはモデルの静的性(グラフの固定)を暗黙に仮定することが多く、動的制御フローや巨大埋め込みのホットスワップには追加の配慮がいる。
障害耐性と運用は、研究コードの域を出てプロダクションで学習を走らせるための核心である。シャーディド・チェックポイントはパラメータ・オプティマイザ・ランダム種・データカーソルを一貫して保存し、部分的な破損やランク配置変更に耐えるべくメタデータを冗長化する。プリエンプションが常態のクラスタではエラスティック・トレーニング(ランク数の動的伸縮)やスポット・インスタンス耐性の設計が不可欠となるが、集団通信の世界観と整合的に扱うには一段複雑さが増す。運用監視では、ステップ時間分解、通信待ち比率、デバイスメモリ・SM 利用率、リンク帯域・リトライ、勾配ノルム・NaN 汚染、学習曲線の分散統計といったメトリクスを統合可視化し、退行検知の基盤を整える。
推論の分散は訓練とは異なる律速を持つ。大規模言語モデルなどでは、プレフィル(エンコーディング)区間はテンソル並列・データ並列で強い算術密度を活かし、デコード区間はトークン毎の逐次性と KV キャッシュの肥大化が支配的となる。KV キャッシュのシャーディング、シーケンス並列、連続バッチング、推測的デコーディングやドラフト・モデル併用、ページング型注意(paged attention)といった技術でスループットを維持しつつレイテンシを抑える。長文脈拡張ではリング注意・スライディング窓・ブロックワイズの分散演算が追加の通信パターンを生むため、トークン・ルーティングとコレクティブの整合設計が求められる。
歴史的には、初期の大規模学習はパラメータサーバ方式と非同期更新が顕著であったが、GPU の計算密度と高速相互接続の向上、通信ライブラリの成熟に伴い、同期待ちのリング型 AllReduce を基盤とするデータ並列が主流化した。モデル規模の指数的成長は単純なデータ並列の限界をあらわにし、行列演算の分割に基づくテンソル並列と、レイヤ粒度のパイプライン並列が確立され、さらにゼロ冗長化や完全シャーディングがメモリ側の制約を打破した。MoE は一時期沈静化した後、通信・ロードバランシング・正則化の洗練により再興し、4D 並列(データ × テンソル × パイプライン × エキスパート)と呼ばれる合成戦略が実務の標準的設計になっている。並行して、自動並列化コンパイラ、手書きカーネルの融合・スケジューリング、圧縮・量子化・低精度訓練の数値解析が進み、計算–通信–メモリの三者バランスを理論・実装両面で詰める流れが続いている。
設計指針としては、まず目標を「パラメータ規模・文脈長・トークン処理量・所要時間・コスト上限」という具体的可観測量に落とし、これを満たす並列戦略を小規模プロトタイプで同型に検証することが肝要である。通信–計算のボトルネックを α–β モデルとトポロジ実測で見積もり、リングと階層木の切り替え、バケット閾値、オーバーラップ度合い、パイプラインのマイクロバッチ数とステージ分割を天秤にかける。メモリは「パラメータ系」「活性化」「バッファ・一時領域」の三区分で見積もり、ZeRO/FSDP のグラニュラリティ、チェックポイント間隔、オフロード容量、活性化圧縮や注意の低ランク近似の適用余地を検討する。学習安定性は実効バッチとスケジューリングの関数として設計し、学習率スケジュール・重み減衰・正則化・クリッピング・混合精度のダイナミクスを系統的ベンチマークで合わせ込む。最後に、チェックポイント・再現性・障害注入テスト・[[Observability|可観測性]]を「当たり前に回る」水準まで作り込むことで初めて、スケールの上に信頼性が乗る。
今後の主要課題は、訓練側ではより強力な自動並列化とプログラム変換、投機的再計算や分散メモリ管理の一層の賢さ、近接メモリやスマートNICの活用、量子化訓練・低精度最適化器の実用域拡張にあり、推論側では長文脈・高同時接続・低遅延を両立するスケジューリングとキャッシュ管理、ネットワーク越しの協調推論の効率化が焦点になる。分散深層学習は、アルゴリズム・数値解析・システム・運用の境界面に立つ学際領域であり、通信と計算、メモリと精度、安定性と速度という対立項をいかに局所最適化ではなく全体最適化に収束させるかが、引き続き実践の核心となる。