张量并行是什么
张量并行(tensor parallel,TP)把每层的权重与计算切分到多张卡:每卡只需驻留约 1/TP 的权重,同时也能为 KV 腾出显存,是「单卡装不下」场景的常规扩展方式。vLLM 用 --tensor-parallel-size 指定并行度。代价是每层每一步都要做跨卡通信,卡间互联质量直接决定收益大小。
基本信息
| 参数 | vLLM:--tensor-parallel-size(常见写法 --tensor-parallel-size 4) |
|---|---|
| 适用 | 单卡放不下权重,或需要为 KV 腾出显存的场景 |
| 前提 | 并行度通常需要能整除注意力头数与 KV 头数,否则启动即报错 |
| 代价 | 每层每步都有跨卡通信,互联差时收益被吞掉 |
| 互联建议 | 优先在 NVLink 直连的卡组内切分 |
典型使用场景
- 大模型单卡装不下:TP 是扩展显存最直接的手段
- 长上下文与高并发:权重摊到多卡后,同一份显存能留给 KV 的空间更大
- 提升单实例吞吐:多卡协同可提高单位时间产出,但通常不是线性增长
- 多卡机型规划:先看拓扑再决定切分范围,避免跨 NUMA 通信
- 收益评估:按 TP=1/2/4 逐档基准测试,找通信开销开始占主导的拐点
启动与核对
启动与核对
# 4 卡张量并行启动
vllm serve <模型路径> --tensor-parallel-size 4
# 切分前先看拓扑:优先选 NVLink 直连(表中 NV# 表示 NVLink 条数)
nvidia-smi topo -m
# 效果核对:TP=1/2/4 各跑一轮同样的基准
# 对比吞吐增幅与 TPOT 变化,增幅放缓说明通信开销开始占主导收益与代价
| 维度 | 变化方向 | 说明 |
|---|---|---|
| 单卡权重占用 | 约降为 1/TP | 这是主要收益来源 |
| 跨卡通信 | 每层每步都有 | 互联差则收益被吞掉 |
| 每 token 延迟 | 通常略增 | 通信增加固定开销 |
| 总吞吐 | 通常提升 | 但一般不是线性增长 |
跨节点做张量并行时,通信要经过网络:用 ib_write_bw 之类的工具先测出可用带宽基线,再决定是否值得跨机切分。
张量并行与流水线并行不是一回事:前者把每层切开、通信频繁;后者按层分段、通信较少但会引入流水等待。选哪种取决于互联能力与显存缺口。