[大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん \| 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 に載らない citeturn11view0 |
| **テンソル並列 (TP)** | “1枚の大きなピザをスライスして別々に焼く” | 行列演算を水平分割。通信量が多く高速ネットワーク必須 citeturn11view0 |
| **パイプライン並列 (PP)** | “流れ作業で前菜→メイン→デザートを別シェフが担当” | メモリ節約は大きいが待ち時間(バブル)が発生しやすい citeturn11view0 |
> **ポイント**
> - 3つを組み合わせた “3 D Parallelism” が現在の主流。
> - DeepSpeed ZeRO や PyTorch FSDP は “モデルを持たないデータ並列” として DP の弱点を補う。 citeturn11view0turn9view0
---
### 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 を増やすほど通信が律速**になるため、ノード間ネットワーク帯域がボトルネックに citeturn11view0 |
| **LLM‑jp 13 B** | mdx クラスタ 12 ノード (A100 40 GB×96) | ZeRO‑DP 12, PP 8, TP 1 | micro‑batch・activation ckpt を手動探索。**FLOPs 最適化は “試して測る” が近道** citeturn9view0 |
| **LLM‑jp 175 B** | ABCI 49 ノード (A100×392) | ZeRO‑DP 2, PP 49, TP 2 | 72 B token 付近で **Loss Spike**。skip‑batch や LR 調整を試すも時間切れ。巨大規模では“学習を止めずに回復する設計”が鍵 citeturn9view0 |
---
![[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 を自前で学習してみたい人にとって、「まず何を分割し、どこを測ればよいか」を具体的にイメージできる実践的なガイドになっています。