AI・機械学習
上級

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

大規模モデルの各層のテンソル演算を複数のGPUに分割して同時実行する並列化戦略。単一GPUのメモリに収まらないモデルの推論・学習を可能にする。

0 回閲覧
0 いいね

テンソル並列化とは

テンソル並列化(Tensor Parallelism、TP)は、Transformerモデルの個々の層内にある行列演算(テンソル演算)を複数のGPU間で分割して並列実行する手法です。Megatron-LMの論文(Shoeybi et al., 2019)で体系化され、現在のLLMサービング基盤における標準的な並列化戦略の一つです。

パイプライン並列化との違い

LLMの並列化には主に3つの戦略があります。テンソル並列化は層内分割、パイプライン並列化は層間分割、データ並列化はバッチ分割です。

並列化戦略分割単位通信頻度適用場面
テンソル並列化(TP)層内の行列高い(AllReduce)同一ノード内GPU
パイプライン並列化(PP)層のグループ低い(Point-to-Point)ノード間
データ並列化(DP)ミニバッチ中(AllReduce)スケールアウト

Self-Attention層の分割

Multi-Head Attention では、Q・K・V の射影行列を列方向に分割し、各GPUが担当するヘッドの Attention を独立計算します。ヘッド数がGPU数で割り切れる場合、通信オーバーヘッドなしで分割できます。最終的な出力射影の前に AllReduce で結果を集約します。

FFN層の分割

Feed-Forward Network は2つの線形変換で構成されます。最初の行列を列方向に分割し、各GPUで活性化関数を適用した後、2番目の行列を行方向に分割して AllReduce で集約します。この Column-Row 分割パターンにより、AllReduce は各層で2回のみです。

通信コストとスケーリング

テンソル並列化は各層で AllReduce 通信が発生するため、GPU間の帯域幅が性能を左右します。NVLink(900 GB/s、H100 SXM)やNVSwitch接続の同一ノード内GPUでは効率的ですが、ノード間のInfiniBand(400 Gbps)では帯域がボトルネックになりやすいです。

推奨構成

  • 同一ノード内8GPU: TP=8 が効率的
  • 2ノード16GPU: TP=8 × PP=2 の組み合わせ
  • 大規模クラスタ: TP=8 × PP=N × DP=M の3次元並列化

実装例

Megatron-LM、DeepSpeed、vLLM、TensorRT-LLM、FairScale など主要フレームワークがテンソル並列化をサポートしています。設定は通常 --tensor-model-parallel-size N のようなフラグで指定します。

FAQ

Q1: テンソル並列化のGPU数を増やすほど速くなりますか?

A1: 通信オーバーヘッドがあるため、無制限には速くなりません。同一ノード内のNVLink接続GPU(通常4〜8基)では効率的ですが、ノード間に跨ると帯域律速になります。実測では TP=8 を超えると効率が急落するケースが多いです。

Q2: テンソル並列化はFine-tuningでも使えますか?

A2: はい。Megatron-LMやDeepSpeedではFine-tuning時にもTPを適用できます。ただし勾配の同期が加わるため、推論時よりも通信量が増加します。LoRAなどのPEFT手法と組み合わせることで通信コストを抑えるアプローチも一般的です。

Q3: Expert Parallelism(EP)との関係は?

A3: Mixture-of-Experts(MoE)モデルでは、Expert層をGPU間で分割するExpert Parallelismが追加されます。TPはAttentionとFFN層を分割し、EPはExpert層を分割するため、MoEモデルではTP + EP + PP + DPの4次元並列化が必要になることもあります。