Tensor Parallelism, TP,是把单层内部的张量计算切分到多张 GPU 上。它不同于 Data Parallel 的“每张 GPU 都有完整模型”,也不同于 Pipeline Parallel 的“不同 GPU 负责不同层”。TP 关注的是同一层里的矩阵乘法、attention heads 或 MLP hidden dimension 如何拆分。

TP 主要解决单层参数和激活太大、单卡无法高效计算的问题,是大规模预训练和 Megatron-style 训练的核心组件。

线性层切分

Transformer 中大量计算来自线性层:

其中 。Tensor parallel 可以按列或按行切分

Column Parallel

按输出维度切分:

每张 GPU 计算:

最后 。如果下一层可以消费分片输出,就不必立即 AllGather。

Row Parallel

按输入维度切分:

每张 GPU 计算 partial output:

然后通过 AllReduce 求和:

Megatron-LM 的 MLP 常用 column-parallel + row-parallel 配对,以减少不必要通信。

Attention 与 MLP 切分

在 Transformer 中:

  • attention 的 Q/K/V projection 可以按 heads 或 hidden dimension 切分;
  • attention output projection 可以用 row parallel;
  • MLP 的 up/gate projection 常用 column parallel;
  • MLP 的 down projection 常用 row parallel。

这种设计让每个 GPU 只处理部分 heads 或部分 intermediate dimension,降低单卡计算和参数压力。

通信模式

TP 的通信发生在层内部,通常比 data parallel 更频繁。常见通信:

  • AllReduce:合并 row-parallel partial outputs;
  • AllGather:收集分片 activation;
  • ReduceScatter:合并并分发结果;
  • broadcast / scatter:准备输入分片。

因为 TP 通信频繁,最好放在同节点高速互联 GPU 上,例如 NVLink。跨节点做大 TP 往往通信开销很高。

Sequence Parallel

Sequence Parallelism 常与 tensor parallel 配合,把某些 activation 沿 sequence dimension 切分,减少 activation memory。它通常用于 LayerNorm、Dropout、residual 等不需要完整 hidden dimension 的部分。

直观上:

  • TP 切 hidden / heads / MLP dimension;
  • sequence parallel 切 sequence dimension;
  • 二者配合降低单卡 activation 和通信压力。

具体实现依赖框架,Megatron-Core 中 sequence parallel 是重要优化。

与其他并行的关系

TP 解决单层太大的问题;PP 解决层数/模型深度分布问题;DP/FSDP/ZeRO 解决数据并行冗余状态问题。

常见组合:

如果一个 1024 GPU 训练使用 ,则 。每个并行维度有不同通信组。

适用场景

TP 适合:

  • 单层矩阵乘法太大;
  • attention heads 很多;
  • hidden size / MLP intermediate size 很大;
  • 希望提高单 step 计算并行度;
  • 大规模预训练中同节点 GPU 高速互联充足。

TP 不适合过小模型或低带宽跨节点环境,因为通信可能超过计算收益。

常见失败模式

  • TP degree 过大:每卡矩阵太小,kernel efficiency 下降。
  • 跨节点 TP:频繁通信导致严重瓶颈。
  • 通信未重叠:AllReduce/AllGather 等待时间变长。
  • 与 PP/DP 组网不匹配:GPU 拓扑没有按通信密集度布置。
  • 实现细节错误:分片权重、checkpoint 合并和随机种子处理复杂。

相关概念