本章では、大規模モデルを現実的な時間・コストで学習するための「分散学習技術」に焦点を当てる。
単一GPUでは扱えないモデルをどのように分割し、効率的に並列処理するかを理解し、 実務レベルでGPUクラスタを設計・運用できる能力の獲得を目指す。
1. 分散学習の基本構造
大規模モデルのトレーニングでは、計算資源を複数のGPU・ノードに分散する必要がある。 主な並列化手法は以下の3つに分類される。
- Data Parallel(データ並列)
- Model Parallel(モデル並列)
- Pipeline Parallel(パイプライン並列)
2. Data Parallel / Model Parallel / Pipeline Parallel
■ Data Parallel
同一モデルを複数GPUに複製し、異なるデータを並列処理する手法。
- 各GPUで勾配を計算
- All-Reduceで勾配を同期
- 実装が比較的シンプル
ただし、モデルサイズがGPUメモリを超える場合には適用できない。
■ Model Parallel
モデル自体を複数GPUに分割して処理する手法。
- レイヤーやテンソル単位で分割
- 通信コストが増加
- 超大規模モデルに対応可能
■ Pipeline Parallel
モデルのレイヤーを段階的に分割し、パイプライン処理を行う。
- 各GPUが異なるレイヤーを担当
- マイクロバッチで効率化
- バブル(待機時間)の最適化が重要
3. DeepSpeed / FSDPの仕組み
■ DeepSpeed
Microsoftが開発した分散学習フレームワークであり、 ZeRO(Zero Redundancy Optimizer)によりメモリ効率を大幅に改善する。
- ZeRO Stage 1:Optimizer状態を分割
- ZeRO Stage 2:勾配を分割
- ZeRO Stage 3:パラメータも分割
これにより、単一GPUでは扱えないモデルサイズを実現可能となる。
■ FSDP(Fully Sharded Data Parallel)
PyTorch標準の分散学習手法であり、モデル・勾配・Optimizer状態をすべてシャーディングする。
- 通信と計算のオーバーラップ
- 自動的なメモリ最適化
- 大規模LLMで広く利用
4. Mixed Precision Training(FP16 / BF16)
計算精度を下げることで、メモリ使用量と計算速度を最適化する手法。
■ FP16(半精度浮動小数点)
- メモリ使用量削減
- 高速計算が可能
- 数値不安定性のリスクあり
■ BF16(Brain Floating Point)
- 指数部が広く、数値安定性が高い
- 最新GPUで標準対応
実務では、Mixed Precision + Loss Scalingを組み合わせて安定性を確保する。
5. 勾配チェックポイントとメモリ最適化
大規模モデルでは、メモリ制約がボトルネックとなる。 そのため、計算とメモリのトレードオフを活用する最適化が重要となる。
■ 勾配チェックポイント(Gradient Checkpointing)
- 中間アクティベーションを保存しない
- 逆伝播時に再計算
- メモリ削減 vs 計算コスト増加
■ その他の最適化手法
- Activation Offloading(CPU/NVMeへの退避)
- Parameter Sharing
- Sparse Attention
これらを組み合わせることで、限られたリソースで最大のモデルを扱うことが可能となる。
6. 実務における設計指針
GPUクラスタ設計では、以下の観点が重要となる。
- 通信帯域(NVLink / InfiniBand)の最適化
- 並列手法の組み合わせ(Hybrid Parallelism)
- バッチサイズとスループットの調整
- コストと性能のバランス設計
特に大規模LLMでは、単一手法ではなく複数の並列化手法を組み合わせることが前提となる。
まとめ
本章では、大規模モデルのトレーニングを支える分散学習技術を体系的に整理した。
- Data / Model / Pipeline並列の使い分け
- DeepSpeed / FSDPによるメモリ最適化
- Mixed Precisionで高速化
- 勾配チェックポイントによるメモリ削減
これにより、GPUクラスタを用いた大規模モデルの設計・運用が可能となる。