AI・機械学習
上級

テンソル並列(テンソルヘイレツ)

大規模言語モデルの分散学習手法の一つ。Transformer の Attention 層や FFN 層の行列演算を複数 GPU に列方向・行方向に分割して並列実行する技術。Megatron-LM が提唱し、ノード内 NVLink 接続での高速通信が前提。

0 回閲覧
0 いいね

テンソル並列とは

テンソル並列(Tensor Parallelism, TP)は、ニューラルネットワークの個々のレイヤー内の行列演算を複数のGPUに分割して並列実行する分散学習手法である。2019年にNVIDIAのMegatron-LMチームが提唱し、現在ではほぼ全ての大規模LLM学習で使用される基盤技術となっている。

テンソル並列の基本原理

Transformerの主要な計算はすべて行列積(GEMM)で構成される。行列 A×B を計算する際、行列Bを列方向に分割(Column Parallel)するか、行方向に分割(Row Parallel)することで複数GPUに計算を分散できる。

  • Column Parallel(列並列): 重み行列Wを列方向に分割 W=[W₁, W₂]。各GPUが X×Wᵢ を計算し、結果を連結
  • Row Parallel(行並列): 重み行列Wを行方向に分割 W=[W₁; W₂]。入力Xも対応するように分割し、各GPUの計算結果をAllReduceで集約

Megatron-LMではAttention層でColumn Parallel、FFN層の後半でRow Parallelを使い、通信回数を最小化する設計となっている。

Transformer各層の分割方法

層分割方式通信操作通信回数/層
Self-Attention QKV投影Column Parallelなし(ローカル計算)0
Self-Attention 出力投影Row ParallelAllReduce1
FFN 第1層(up projection)Column Parallelなし0
FFN 第2層(down projection)Row ParallelAllReduce1
LayerNorm複製(各GPUで同一計算)なし0
EmbeddingColumn ParallelAllGather1

1つのTransformerブロックあたりの通信はforward passで2回、backward passで2回の計4回AllReduceとなる。

テンソル並列の通信要件

テンソル並列は非常に高頻度の通信(各レイヤーごと)を必要とするため、GPU間の通信帯域が性能を決定する。

  • NVLink(推奨): H100 NVSwitchで双方向900GB/s。8GPU DGXノード内でTP=8が標準
  • NVLink 5(GB200): 双方向1.8TB/sで次世代のTP=72も視野に
  • PCIe 5.0: 双方向128GB/s。NVLinkの1/7以下であり、TP向きではない
  • InfiniBand NDR: ノード間400Gbps(50GB/s)。TP向きではないが、やむを得ず使う場合もある

実用上、テンソル並列度(TP度)はノード内GPU数(通常8)に制限される。ノード間でTPを実行すると通信レイテンシで性能が大幅に低下する。

Megatron-LMのテンソル並列実装

NVIDIA Megatron-LMは最も成熟したテンソル並列実装を提供する。

  • TP度設定: --tensor-model-parallel-size 8 で8GPU分割
  • シーケンス並列統合: LayerNormやDropoutをシーケンス次元で分割し、TP以外の計算も並列化
  • アクティベーション再計算: メモリ節約のためforward計算結果を破棄し、backward時に再計算
  • FP8対応: H100以降でFP8精度のGEMM+TPが可能。通信量も半減
  • Grouped GEMM: MoEモデルの複数Expert演算をバッチ化して効率化

テンソル並列 vs パイプライン並列

観点テンソル並列(TP)パイプライン並列(PP)
分割単位レイヤー内の行列レイヤー群(ステージ)
通信頻度非常に高い(毎レイヤー)低い(ステージ境界のみ)
通信量/回小〜中(hidden_size × batch)中(activation × batch)
必要帯域NVLink級(900GB/s+)InfiniBand級(50GB/s+)で可
GPU利用率高い(バブルなし)パイプラインバブルあり
スケール限界ノード内GPU数(通常8)ノード数に応じて拡張可
メモリ効率パラメータ+オプティマイザを分割ステージ分のみ保持

2025-2026年の最新動向

  • TP+SP(Sequence Parallelism): テンソル並列とシーケンス並列を組み合わせ、LayerNorm・Dropoutの計算もGPU間で分散。Megatron-LM v0.7で標準化
  • Context Parallel(CP): 長シーケンス(128K+トークン)のAttention計算をシーケンス次元で分割。Ring Attentionの発展形
  • Ulysses Attention: DeepSpeedが提唱したシーケンス次元でのAttention分割手法。AlltoAll通信で実装
  • Expert Tensor Parallelism: MoEモデルの各ExpertをさらにTP分割する二重並列化

よくある質問(FAQ)

Q1: テンソル並列度はいくつに設定すべきですか? A: ノード内のGPU数(通常8)以下にする。H100 DGX(8GPU、NVSwitch接続)ならTP=8が標準。RTX系でNVLinkなしの場合はTP=2程度が限界で、それ以上はPCIeの帯域がボトルネックとなる。

Q2: テンソル並列はどのサイズのモデルから必要ですか? A: 目安として、モデルパラメータがGPUメモリの40%を超えたら検討する。FP16で7Bモデル(14GB)はH100 80GBに収まるがオプティマイザ含め余裕がない。13B以上でTP=2、70B以上でTP=8が実用的。

Q3: テンソル並列とZeRO-3の違いは何ですか? A: テンソル並列は計算(行列演算)を分割して各GPUが一部を担当する。ZeRO-3はパラメータ・勾配・オプティマイザ状態のメモリを分割するが、計算時にはAllGatherでパラメータを再収集する。テンソル並列の方が通信パターンが規則的で効率的だが、NVLink必須。

まとめ

  • テンソル並列はTransformerの行列演算をGPU間で分割する技術
  • Column ParallelとRow Parallelの組み合わせで通信を最小化
  • NVLink級の高帯域接続が必須でノード内に限定される
  • TP=8(DGXノード内)が標準、GB200でTP=72も可能に
  • パイプライン並列やデータ並列と組み合わせて3D並列を構成