[大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん \| PPT](https://www.slideshare.net/slideshow/ss-7984/264914233) **動画の概要** - タイトル:Weights & Biases Meetup #9「大規模言語モデル開発を支える分散学習技術」 - 登壇者:藤井一喜(東京工業大学 横田理央研究室・博士課程/Turing Inc. リサーチインターン) - 収録日:2023 年 12 月 26 日(公開は 2024 年初頭) - 内容構成: 1. 分散並列学習の基礎 2. 3 D Parallelism と DeepSpeed ZeRO 3. 学習事例(LLaMA‑2 ほか) 4. Weights & Biases(W&B)の活用例 --- ### 1. なぜ「分散学習」が必要か - 10 億〜数千億パラメータ規模の LLM は 1 枚の GPU メモリには収まらず、**複数 GPU/ノードへ“分けて”学習させる仕組み**が不可欠。 - 13 B パラメータの LLM‑jp や 70 B の LLaMA‑2 でさえ、データ並列だけでは足りず **テンソル並列・パイプライン並列の併用**が必須になる。 --- ### 2. 分散並列学習の3つの基本形 | 方式 | 直感的なたとえ | 得意・不得意 | | ----------------- | ---------------------------- | -------------------------------------------------- | | **データ並列 (DP)** | “同じ料理レシピを各自が作り、最後に味を平均して決める” | 学習時間短縮に強いが、モデルが大き過ぎると GPU に載らない citeturn11view0 | | **テンソル並列 (TP)** | “1枚の大きなピザをスライスして別々に焼く” | 行列演算を水平分割。通信量が多く高速ネットワーク必須 citeturn11view0 | | **パイプライン並列 (PP)** | “流れ作業で前菜→メイン→デザートを別シェフが担当” | メモリ節約は大きいが待ち時間(バブル)が発生しやすい citeturn11view0 | > **ポイント** > - 3つを組み合わせた “3 D Parallelism” が現在の主流。 > - DeepSpeed ZeRO や PyTorch FSDP は “モデルを持たないデータ並列” として DP の弱点を補う。 citeturn11view0turn9view0 --- ### 3. DeepSpeed ZeRO と 3 D Parallelism | ZeRO Stage | 何を分割するか | 効果 | |------------|---------------|------| | **Stage 1** | Optimizer state | メモリ 2/3 削減 | | **Stage 2** | 勾配 (Gradients) | さらに 1/3 削減 | | **Stage 3** | パラメータ (Weights) | ほぼ “モデルコピー0枚” を実現 | - **ZeRO + TP + PP = 3 D** で“巨大モデルを小さく切り刻みながら同時に走らせる”イメージ。 - PyTorch FSDP は設計思想は似ているが実装は独立。実験コードの自由度は高いが、機能の安定性や実装コストに注意。 --- ### 4. ケーススタディ | プロジェクト | ハード構成 | 分散設定 | 学び・課題 | | ------------------------------------ | ------------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------- | | **LLaMA‑2 (7 B / 13 B / 70 B) 継続学習** | ABCI A100 × 複数ノード | DP+TP+PP (Megatron‑DeepSpeed) | 70 B では **TP と PP を増やすほど通信が律速**になるため、ノード間ネットワーク帯域がボトルネックに citeturn11view0 | | **LLM‑jp 13 B** | mdx クラスタ 12 ノード (A100 40 GB×96) | ZeRO‑DP 12, PP 8, TP 1 | micro‑batch・activation ckpt を手動探索。**FLOPs 最適化は “試して測る” が近道** citeturn9view0 | | **LLM‑jp 175 B** | ABCI 49 ノード (A100×392) | ZeRO‑DP 2, PP 49, TP 2 | 72 B token 付近で **Loss Spike**。skip‑batch や LR 調整を試すも時間切れ。巨大規模では“学習を止めずに回復する設計”が鍵 citeturn9view0 | --- ![[Pasted image 20250418222718.png]] ### 5. トラブルシューティング & 実践ノウハウ 1. **Loss Spike/Loss 乖離** - checkpoint から再開時に Loss が跳ね上がる → FlashAttention の dropout が 0 で強制上書きされていたバグを修正。 2. **ノード故障検知** - 1 ノードでもハングすると全体停止。W&B の run status と最終更新時刻を監視し、Slack へ自動通知するスクリプトで回避。 3. **チェックポイント変換** - Megatron ↔︎ HuggingFace 間で TP/PP ≠ 1 の重量級モデルを完全一致させるコンバータを自作(約3週間)。 4. **Config 探索のコツ** - まず **DP を上限まで伸ばし**、メモリが溢れない範囲で TP・PP を調整。 - activation checkpointing/FlashAttention v2/BF16 などのメモリ圧縮技術を合わせ技で使う。 ![[Pasted image 20250418223100.png]] 1. 学習環境のGPUにおいてDPが最大になる & CUDA out of memoryが発生しないTP, PPを発見 2. micro-batch数やactivation-checkpointingをselective, fullにするなどして最もFLOPsが出る組み合わせを探す a. PP数を増加させてmicro-batch数を増やしてみる b. activation-checkpointを有効化して、TP, PPが減らせないか確かめる 3. 学習環境における最適な組み合わせを発見する → GPUノード間通信環境(inter-node connect)やGPU間通信の充実度によって最適なconfigは**変化する** 技術 - FlashAttention v2 - RoPE(Rotary Positiional Embedding) - BF16 - ... --- ### 6. W&B を使った実験管理 - **すべてのメトリクスをとりあえず送信**し、必要に応じて可視化を絞り込む方針が推奨。 - 3 D Parallelism では各プロセスが別ジョブになるため、一体型ダッシュボードで“全ノードの GPU 利用率を同時に追える”ことがデバッグの生命線。 --- ## まとめ & 重要メッセージ 1. **LLM トレーニングは“切り分け”と“同期”の連続芸**。DP・TP・PP を状況に応じて組み合わせよう。 2. 学習効率の最適化は **「理論」より「計測」**――GUI で眺めるだけでなく FLOPs と通信ボトルネックを数値で追え。 3. 障害は必ず起きる。**再開可能なワークフローと可視化・通知の仕組み**を先に用意しておくと安心。 4. 巨大モデルほど “学習停止がコスト” になる。**Loss Spike や checkpoint 互換性を含めた“継続学習の設計”が成功の鍵**。 この動画とスライドは、これから LLM を自前で学習してみたい人にとって、「まず何を分割し、どこを測ればよいか」を具体的にイメージできる実践的なガイドになっています。