Files
2026-05-16 17:16:51 +08:00

88 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 张量并行Tensor Parallelism
## 概述
张量并行Tensor ParallelismTP是将单个计算任务如矩阵乘法的张量切分到多个GPU上并行执行的技术。主要用于训练参数量巨大的模型如千亿参数LLM通过将模型参数沿某个维度切分使每个GPU只负责存储和计算的一部分。
## 核心切分策略
### 1. Column-Bert切分列切分
**原理**将权重矩阵按列维度切分每个GPU持有部分列的权重。
```
原始权重 W ∈ R^(d_hidden × d_ff)
切分后: W1 ∈ R^(d_hidden × d_ff/2), W2 ∈ R^(d_hidden × d_ff/2)
```
**计算方式**
- 输入X保持完整在每个GPU上分别计算 `Y1 = X @ W1`, `Y2 = X @ W2`
- 最终结果 `Y = [Y1, Y2]`(沿列维度拼接)
**适用场景**:适合 Linear 层中权重形状为 (hidden_size, intermediate_size) 的投影层(如 QKV 投影、FFN 第一个线性层)
**代表实现**Megatron-LM 的 ColumnParallelLinear
### 2. Row-Bert切分行切分
**原理**将权重矩阵按行维度切分每个GPU持有部分行的权重。
```
原始权重 W ∈ R^(d_ff × d_hidden)
切分后: W1 ∈ R^(d_ff/2 × d_hidden), W2 ∈ R^(d_ff/2 × d_hidden)
```
**计算方式**
- 各GPU分别计算 `Y1 = X @ W1^T`, `Y2 = X @ W2^T`
- 最终结果 `Y = Y1 + Y2`AllReduce求和
**适用场景**:适合 FFN 第二个线性层intermediate_size → hidden_size因为其输出需要求和
**代表实现**Megatron-LM 的 RowParallelLinear
### 3. 通信分析
| 切分方式 | 通信操作 | 通信量 |
|---------|---------|--------|
| Column切分 | AllReduce | O(sequence_length × hidden_size) |
| Row切分 | AllReduce | O(sequence_length × hidden_size) |
| All-to-All集合通信 | 用于跨层级联时 | 视实现而定 |
通信主要发生在每层的前向传播和反向传播中,由于通信带宽成为瓶颈,通常要求 NVLink 或高速互联。
## 3D并行中的角色
张量并行是 3D 并行(数据并行 + 流水线并行 + 张量并行)的一维:
- **Pipeline Parallelism流水线并行**按模型层垂直切分不同Stage的GPU负责不同层的计算
- **Tensor Parallelism张量并行**对单层内部运算水平切分同一Stage内不同GPU负责不同张量分片
- **Data Parallelism数据并行**相同配置复制多份处理不同batch数据
典型配置如NVIDIA Megatron框架
```
tensor_parallelism = 8 # 每层在8个GPU间切分
pipeline_parallelism = 4 # 模型分为4个stage
data_parallelism = N/(8*4) # 剩余GPU用于数据并行
```
## 实现框架
| 框架 | 实现方式 |
|------|---------|
| Megatron-LM | 专门优化TP支持all-reduce融合、异步通信 |
| DeepSpeed | 通过ZeRO-Inference支持TP但主要focus在ZeRO |
| PyTorch FSDP | 采用分片策略非传统TP |
| NeMo-Megatron | 基于Megatron封装的分布式训练框架 |
## 关键技术点
1. **AllReduce通信重叠**:利用计算掩盖通信
2. **梯度同步**反向传播时需要对各TP分片的梯度做AllReduce
3. **模型一致性**:需要保证所有分片在相同输入上行为一致
4. **Memory efficiency**激活值和分片权重在GPU间分布降低单卡峰值内存
## 注意事项
- 张量并行度增加会显著提升通信开销超过8卡通常收益递减
- GPU拓扑NVLink vs PCIe直接影响TP效率
- 某些操作如BatchNorm、LayerNorm需要在切分后做特殊处理保持语义一致