细粒度张量并行#
概述#
细粒度张量并行通过为不同的模型组件启用独立的张量并行大小,扩展了标准的张量并行。细粒度 TP 不再对所有层应用统一的全局tensor_parallel_size,而是允许用户通过finegrained_tp_config参数,为关键模块(如 Embedding、语言模型头、注意力输出投影和 MLP 块)单独配置 TP 大小。
此功能支持在单个模型内采用异构并行策略,从而对跨设备的权重分布、内存布局和通信模式进行更精细的控制。该特性与标准的密集 Transformer 架构兼容,并无缝集成到 vLLM 的推理流水线中。
细粒度 TP 的优势#
细粒度张量并行通过有针对性的权重分片,带来两个主要的性能优势:
降低单设备内存占用:细粒度 TP 将大型权重矩阵跨设备分片,从而降低峰值内存使用量。这使得在不使用量化的情况下,也能支持更大的批次或在内存受限的硬件上进行部署。
加速 GEMM 内存访问:在以解码为主的工作负载中,GEMM 性能通常受限于内存带宽。权重分片减少了单个设备需要获取的权重数据量,降低了 DRAM 流量并提高了带宽效率——对于像 LM Head 和 o_proj 这样对延迟敏感的层尤其有效。
综上所述,这些优化使得开发者能够更好地平衡内存、通信和计算资源,同时保持对标准密集 Transformer 模型的兼容性。
支持的场景#
模型支持#
细粒度 TP 是模型无关的,支持所有标准的密集 Transformer 架构,包括 Llama、Qwen、DeepSeek 等。
组件与执行模式支持情况#
TP 配置项目 |
Eager 模式 |
图模式 |
混合模式 |
预填充 |
解码 |
|---|---|---|---|---|---|
embedding |
✅ |
✅ |
✅ |
✅ |
✅ |
o_proj |
❌ |
✅ |
❌ |
❌ |
✅ |
mlp |
✅ |
✅ |
✅ |
✅ |
✅ |
LMhead |
✅ |
✅ |
✅ |
✅ |
✅ |
⚠️ 注意:
o_proj的 TP 仅在解码阶段的图模式下支持,因为 Eager 模式下的 dummy_run 不会触发 o_proj。
mlpTP 支持密集模型,或者 MoE 模型中的密集层。例如,DeepSeek-R1 的前三个密集层。
配置限制#
任何组件的细粒度 TP 大小必须满足:
必须 ≤ 数据并行的大小,且
必须能整除 DP 大小,以确保有效的设备分配和通信组划分。
⚠️ 违反这些约束将导致运行时错误或未定义的行为。
如何使用细粒度 TP#
配置格式#
细粒度 TP 通过 --additional-config 中的 finegrained_tp_config 字段进行控制。
--additional-config '{
"finegrained_tp_config": {
"embedding_tensor_parallel_size": 8,
"lmhead_tensor_parallel_size": 8,
"oproj_tensor_parallel_size": 8,
"mlp_tensor_parallel_size": 8
}
}'
使用示例#
vllm serve deepseek-ai/DeepSeek-R1 \
--data-parallel-size 16 \
--tensor-parallel-size 1 \
--enable-expert-parallel \
--additional-config '{
"finegrained_tp_config": {
"embedding_tensor_parallel_size": 8,
"lmhead_tensor_parallel_size": 8,
"mlp_tensor_parallel_size": 8
}
}'
实验结果#
为评估细粒度 TP 在大规模服务场景下的有效性,我们使用 DeepSeek-R1-W8A8 模型,在 32 卡 Ascend Atlas A2 推理产品*64G 环境下部署 PD 分离的解码实例。并行配置为 DP32+EP32,细粒度 TP 大小设为 8。性能数据如下。
模块 |
内存节省 |
TPOT 影响 |
|---|---|---|
o_proj TP = 8 |
5.8 GB |
+1.5 ms |
LM head TP = 8 |
1.51 GB |
−1.2 ms |
FFN TP = 8 |
0.9 GB |
−1.0 ms |
Embedding TP = 8 |
1.51 GB |
−1.0 ms |
合计 |
9.72 GB |
— |
我们在单卡内存容量利用率方面获得了显著收益,同时在 TPOT 性能上也取得了进步。
✅ 部署建议#
细粒度 TP 在 PD 分离的解码实例中最为有效。在该场景下,模型通常以全 DP 模式部署,通过对权重密集的层进行分片,可以有效减少冗余存储并缓解内存压力。