テンソル並列(Tensor Parallelism)(テンソルへいれつ)
LLMの重み行列を複数GPUに分割して並列計算する推論・学習技術。単一GPUに収まらない大規模モデルを複数デバイスで協調実行し、バンド幅とスループットを向上させる。
テンソル並列(Tensor Parallelism)とは
テンソル並列(Tensor Parallelism、TP)は、LLMの重み行列を複数のGPUに分割して並列計算することで、単一GPUのVRAM限界を超える大規模モデルの推論・学習を可能にする技術です。NVIDIA Megatron-LMによって広く普及し、現代のLLMインフラの基盤となっています。
なぜテンソル並列が必要か
大規模LLMの重みサイズは膨大です。Llama 3 8B(fp16)は約16GB→A100 80GB 1台で可能ですが、Llama 3 70B(fp16)は約140GB→1台では不可能(A100×2台以上必要)です。GPT-4相当(推定1.8T)は数十台のGPUが必要となります。テンソル並列はこの問題を「重み行列の分割」で解決します。
分割方式
列並列(Column Parallelism)
FFN(Feed-Forward Network)の第1層を列方向に分割:
# 元の重み行列 W: [d_model, 4*d_model]
# GPU 0が保持: W[:, :2*d_model](前半の列)
# GPU 1が保持: W[:, 2*d_model:](後半の列)
# 各GPUが独立して部分行列積を計算
output_gpu0 = input @ W_gpu0 # [batch, 2*d_model]
output_gpu1 = input @ W_gpu1 # [batch, 2*d_model]
# 結果を連結: [batch, 4*d_model]
行並列(Row Parallelism)
FFNの第2層を行方向に分割し、All-Reduceで集約:
# 各GPUで部分積を計算
partial_gpu0 = input_gpu0 @ W2_gpu0 # [batch, d_model]
partial_gpu1 = input_gpu1 @ W2_gpu1 # [batch, d_model]
# All-Reduceで全GPUの部分積を合計
output = all_reduce(partial_gpu0 + partial_gpu1)
Attentionのテンソル並列
Multi-Head Attentionはヘッド単位で自然に並列化できます。32ヘッドを4 GPUで分割する場合、各GPU 8ヘッドを担当し、Q/K/V投影をヘッド数で列並列分割します。各GPUで独立してアテンション計算を行い、出力投影でRow Parallelism + All-Reduceを適用します。
vLLMでのテンソル並列設定
from vllm import LLM, SamplingParams
# tensor_parallel_size=4 で4GPU並列
llm = LLM(
model="meta-llama/Meta-Llama-3-70B-Instruct",
tensor_parallel_size=4, # 4 A100 GPUs
dtype="float16",
gpu_memory_utilization=0.9
)
sampling_params = SamplingParams(temperature=0.8, max_tokens=512)
outputs = llm.generate(["Explain tensor parallelism"], sampling_params)
TGI(Text Generation Inference)での設定
docker run --gpus all \
-e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \
-p 8080:80 \
ghcr.io/huggingface/text-generation-inference:latest \
--model-id meta-llama/Meta-Llama-3-70B-Instruct \
--num-shard 4 \
--max-input-length 8192
テンソル並列度の選び方
モデルサイズ別の推奨TP数:7B(fp16)はTP=1でRTX 4090×1、13B(fp16)はTP=1-2でA100 40GB×1、70B(fp16)はTP=4-8でA100 80GB×2-4、405B(fp16)はTP=8-16でH100 80GB×12。
制約: TP数はアテンションヘッド数の約数でなければならない(32ヘッドモデルはTP=1,2,4,8,16,32のみ有効)。
他の並列手法との組み合わせ
実際の大規模推論では複数の並列戦略を組み合わせます。Tensor Parallelism(重み行列の分割・All-Reduce通信)、Pipeline Parallelism(レイヤーの分割・P2P通信)、Data Parallelism(バッチの分割・All-Reduce通信)の3D並列で、例えばTP=8, PP=4, DP=2で64 GPU構成を実現できます。
テンソル並列は現代の大規模LLM推論インフラの基盤技術です。vLLM・TGI・TensorRT-LLMなどの推論エンジンは自動的にテンソル並列を適用し、マルチGPU環境でのスループットを最大化します。