テンソル並列化(テンソルヘイレツカ)
大規模モデルの各層のテンソル演算を複数のGPUに分割して同時実行する並列化戦略。単一GPUのメモリに収まらないモデルの推論・学習を可能にする。
テンソル並列化とは
テンソル並列化(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次元並列化が必要になることもあります。