データ並列(DP)・テンソル並列(TP)・パイプライン並列(PP)の3つの並列化手法を同時に組み合わせた大規模分散学習戦略。数百〜数千GPUでの効率的なLLM学習を実現し、Megatron-LMやDeepSpeedが代表的な実装。
3D並列(3D Parallelism)は、データ並列(DP)・テンソル並列(TP)・パイプライン並列(PP)の3つの並列化次元を同時に組み合わせた分散学習戦略である。各手法の長所を活かし短所を補完することで、数千GPU規模の大規模LLM学習を効率的に実現する。NVIDIAのMegatron-LMが2021年に体系化し、現在では事実上の業界標準となっている。
3D並列では、全GPU群を3つの次元で論理的にグループ分けする。
例えば64台のH100(8ノード×8GPU)で TP=8, PP=4, DP=2 の場合:
| 並列次元 | 通信頻度 | 通信量/回 | 推奨接続 | 配置範囲 |
|---|---|---|---|---|
| TP | 極高(毎レイヤー) | hidden_size × batch | NVLink 900GB/s | ノード内 |
| PP | 中(ステージ境界) | activation × micro_batch | InfiniBand 400Gbps |
| ノード間(近接) |
| DP | 低(全レイヤー計算後) | 全パラメータ勾配 | InfiniBand 400Gbps | ノード間(広域可) |
最も通信頻度の高いTPをノード内に、次にPPを近接ノード間に、DPを残りのノード間に配置するのが鉄則。
| モデル | 総GPU数 | TP | PP | DP | フレームワーク |
|---|---|---|---|---|---|
| Llama 3.1 405B | 16,384 H100 | 8 | 16 | 128 | 内製 |
| GPT-NeoX 20B | 96 A100 | 2 | 4 | 12 | Megatron-DeepSpeed |
| Bloom 176B | 384 A100 | 4 | 12 | 8 | Megatron-DeepSpeed |
| DeepSeek-V3 671B | 2,048 H800 | 1(EP=64) | 16 | 8 | 内製 |
| Falcon 180B | 4,096 A100 | 8 | 8 | 64 | 内製 |
DeepSeek-V3はMoEのため、テンソル並列の代わりにExpert並列(EP=64)を使用している点が特徴的。
パイプライン並列ではGPUがアイドルになる「バブル」が問題となる。以下のスケジューリング手法で最小化する。
| スケジュール | バブル率 | メモリ使用量 | 実装複雑度 |
|---|---|---|---|
| GPipe | (PP-1)/M | 高(全マイクロバッチ保持) | 低 |
| 1F1B | (PP-1)/M | 中(PP個のマイクロバッチ保持) | 中 |
| Interleaved 1F1B | (PP-1)/(M×V) | 中 | 高 |
| Zero Bubble | ≈0 | 中 | 非常に高 |
※ M=マイクロバッチ数、V=仮想ステージ数
# Megatron-LM 3D並列の設定パラメータ例(概念)
# --tensor-model-parallel-size 8 # TP=8(ノード内)
# --pipeline-model-parallel-size 4 # PP=4(4ノードにまたがる)
# --data-parallel-size は自動計算 # DP = 総GPU / (TP × PP)
# --micro-batch-size 1 # マイクロバッチサイズ
# --global-batch-size 2048 # グローバルバッチサイズ
# --num-layers-per-virtual-pipeline-stage 2 # Interleaved 1F1B
# --sequence-parallel # シーケンス並列有効化
# --use-flash-attn # FlashAttention使用
総GPU数 = TP × PP × DP で決まる。例: 256 GPU = 8 × 4 × 8。
3D並列の各次元をどう設定するかはモデルサイズ・GPU数・ネットワーク構成で決まる。
2025-2026年には3D並列をさらに拡張する手法が登場している。
Q1: 3D並列の各次元の優先順位は? A: まずTPをノード内GPU数に設定(通信帯域が最重要)、次にPPをメモリに収まる最小値に、残りをDPに割り当てる。DP度が大きいほどスケーリング効率が良いため、TP・PPは必要最小限にする。
Q2: 小規模(8-16GPU)でも3D並列は使いますか? A: 8GPUならTP=8のみ(1Dテンソル並列)で十分なことが多い。16GPU(2ノード)からTP=8+PP=2やTP=8+DP=2が選択肢。3次元すべて使うのは通常32GPU以上。
Q3: 3D並列のデバッグはどうしますか?
A: Megatron-LMの--log-validation-ppl-to-tensorboardで各ステージの損失を監視。NCCL_DEBUG=INFOで通信ログを確認。小規模(2-4GPU)で動作確認後にスケールアップする段階的アプローチが推奨。
Q4: 3D並列の設定ミスで起きやすい問題は? A: TP度がhidden_sizeを割り切れない場合のクラッシュ、PP度が大きすぎてバブルが50%以上になる性能劣化、DP度が小さすぎてAllReduceの効率が悪化する、マイクロバッチ数不足でパイプラインが埋まらない、などが典型的。