张量并行
数据并行把模型复制到多卡;张量并行(TP)把模型切开——单个矩阵乘的权重矩阵按列或按行切到多卡上,每卡算一块,结果拼起来。它是唯一能解决"单层装不下"的并行方式,也是通信最贵、最依赖节点内 NVLink 的并行方式。
为什么需要它:单层的显存
Section titled “为什么需要它:单层的显存”TP 的动机不是"想并行",是"不切装不下"。一个大模型的单层参数:
- 7B 模型:一层 ~50 MB——单卡轻松
- 175B 模型(GPT-3 级):一层 ~1.2 GB——还好
- 但加上激活、优化器状态后,千亿模型的单层前向激活就能超过 80 GB 单卡
更硬的约束是单卡的计算时间:batch 拉满后单卡算一层仍然太慢,MFU 上不去(长序列场景尤甚)。TP 把单层的计算与显存都摊到多卡上——这是 DP 做不到的(DP 只能摊 batch,不能摊层)。
两种切法:按列与按行
Section titled “两种切法:按列与按行”Transformer 的核心是 和 。Megatron-LM 的经典切法:
列切(column-parallel):权重 按列切成 ,每卡算自己的列:
行切(row-parallel):接着权重 按行切,每卡用自己那份列切的输入算自己的部分和:
MLP 的标准组合:列切 + 行切,一层只在结尾做一次 all-reduce。通信量:
每层前向 + 反向共 4 次(前向 1、反向 1、每半各一),以 7B 模型、batch 8、seqlen 4096 计,每层 all-reduce ~100+ MB——每层都通信、GB 级累计、延迟敏感,这就是 TP 必须待在 450 GB/s 的 NVLink 域内的原因(跨机 IB 上一算就慢 10 倍)。
Attention 同理:Q/K/V 投影列切(多头天然按头切分),输出投影行切。多头注意力的"头"维度就是现成的切分维度——8 头切 8 卡,每卡算自己的头,最后 output 投影处 all-reduce。
通信代价与带宽下限
Section titled “通信代价与带宽下限”把 TP 的每层通信需求算成对带宽的硬要求。TP=8 时每卡每步的通信时间:
要 TP 不拖慢计算(通信时间 < 计算时间的 20%),反解出带宽下限:
| TP 度 | 激活大小(7B,batch 8,4096) | 需要带宽 | 对应硬件 |
|---|---|---|---|
| 2 | ~25 MB | ~200 GB/s | NVLink 够 |
| 8 | ~100 MB | ~450 GB/s | 恰好 NVLink 域内 |
| 16+ | ~200 MB | ~900 GB/s | NVLink5/NVL72 或跨机不可行 |
| 跨机 | 同上 | — | 慢 10 倍,❌ |
TP 的可行域 = NVLink 域(8 卡传统,Blackwell NVL72 扩到 72 卡)。这个结论反过来塑造了集群设计:节点内 NVLink 带宽是"买 TP 度"的钱。
序列维度的补充:Megatron-SP
Section titled “序列维度的补充:Megatron-SP”TP 有个隐藏浪费:LayerNorm 和 Dropout 的激活不分片(每卡全量)。序列太长时这部分撑爆显存。Megatron-SP(Sequence Parallelism)把这部分按序列维度切开,与 TP 的 all-reduce 互相转换:
TP 区域(按 hidden 切) ←all-reduce/gather→ SP 区域(按 seqlen 切)all-reduce 拆成 all-gather + reduce-scatter,恰好完成两种切法的转换,通信量不增。这是长序列训练的标准配置:TP + SP 总是成对出现。
- TP 度的选择:能小则小(2、4、8),TP 每加一倍,通信翻倍、单卡计算减半——在"装得下"的前提下选最小的 TP
- Megatron vs FSDP 的分工:TP 切层内,FSDP/ZeRO 切层间(优化器状态),两者正交可叠加
- 词表与 embedding:词表维度(15 万 × hidden)也是显存大户,Megatron 按词表切 embedding(Vocab-Parallel)
- 调试:TP 数值等价性易碎(all-reduce 顺序影响浮点求和),切分后 loss 与单卡基线应有微小但稳定的差异,突然变大就是切分 bug
什么时候用 TP
Section titled “什么时候用 TP”| 场景 | 建议 |
|---|---|
| 7B 以下,单卡 80 GB | 不用 TP,ZeRO-2/FSDP 就够 |
| 13–70B,单卡装不下但层装得下 | FSDP 优先;MFU 低再考虑 TP=2/4 |
| 70B+,单层激活撑爆显存 | TP=4/8 必备,配 SP |
| 千亿+,节点内都装不下单层 | TP=8 + 更大互联域(NVL72)或改用 PP |
| 长序列(32k+) | TP+SP 标配,或上下文并行 |
- TP 是唯一能切"单层"的并行:列切 + 行切的组合让 MLP/Attention 每层只通信一次 all-reduce。
- 多头注意力的头维度是天然的 TP 切分维度。
- 每层通信 GB 级累计、延迟敏感,TP 的可行域 = NVLink 域(8 卡或 NVL72)。
- Megatron-SP 按 seqlen 切 LayerNorm/Dropout 激活,与 TP 成对出现、通信量不增。
- TP 度能小则小:"装得下"前提下选最小值;TP 每加一倍通信翻倍。
- TP 与 FSDP 正交可叠加:TP 切层内,FSDP 切层间。
- 数据并行与 ZeRO / FSDP — 上一章:正交的另一半
- 流水线并行 — 下一章:跨机切层的方法
- 节点内互连 — TP 可行域的硬件根据
- 序列与上下文并行 — 长序列的专用切法