张量并行常被视为解决大模型单卡显存不足、计算量过大的直接方案:把同一层的权重切分到多张 GPU 上,各卡并行完成局部矩阵运算,再通过集合通信合并结果。但在推理阶段,增加 GPU 并不意味着吞吐量和响应速度会等比例提升。随着计算被进一步拆分,跨卡通信逐渐从辅助环节变成关键瓶颈,最终决定张量并行的扩展效率。
张量并行为何频繁产生跨卡通信
Transformer 中的注意力层和前馈网络包含大量矩阵乘法。张量并行通常沿隐藏维度、注意力头或中间维度切分权重,使每张 GPU 只计算部分结果。由于下一步计算往往需要完整或一致的激活值,各卡必须执行 AllReduce、AllGather 或 ReduceScatter 等集合通信。NCCL 对这些通信操作提供统一接口,并根据 NVLink、NVSwitch、PCIe 或 InfiniBand 等硬件拓扑选择传输路径,相关机制可参考 来源链接 集合通信文档。
这意味着每生成一个 token,模型都可能在多个层中触发通信。预填充阶段一次处理较长的提示词,矩阵规模较大,GPU 计算时间相对充足,通信成本有机会被部分掩盖;解码阶段通常逐 token 执行,单次计算规模较小且串行依赖明显,固定通信延迟更容易暴露。因此,首 token 延迟和后续 token 延迟可能呈现不同的扩展规律。
通信开销如何削弱扩展效率
假设单卡完成某段计算需要时间 T,将其切分到 N 张卡后,理想计算时间接近 T/N。但实际耗时还要加入通信、同步、内核启动和调度成本。随着并行度提高,每张卡承担的计算量持续下降,通信却不会按相同比例减少。当通信时间接近甚至超过计算时间时,继续加卡只能获得很小的收益,严重时还会让单请求延迟上升。
通信影响主要来自三个方面。第一是链路带宽,它决定大尺寸激活数据的传输速度;第二是固定延迟,它会显著影响解码阶段的小消息通信;第三是同步等待,集合通信必须协调多个参与者,任何一张卡出现调度抖动、负载不均或链路拥塞,其他 GPU 都可能被迫等待。
通信算法同样重要。传统 Ring AllReduce 能较充分地利用链路带宽,但参与 GPU 越多,通信步骤和同步点也会增加。NVIDIA 对 TensorRT-LLM MultiShot 的介绍指出,利用 NVSwitch 的能力减少通信步骤,可以降低扩展到多卡时的同步延迟,参见 技术说明。这也说明,张量并行效率不仅取决于 GPU 数量,还取决于集合通信实现与硬件拓扑是否匹配。citeturn1search1
卡间拓扑决定并行边界
同一台服务器内,GPU 可能通过 NVLink、NVSwitch 或 PCIe 相连;跨服务器时,则通常还要经过网卡和交换网络。即使所有设备型号相同,不同 GPU 组合之间的实际路径也可能不同。若张量并行组跨越低带宽或高延迟链路,每一层的集合通信都可能经过该瓶颈,扩展效率会明显下降。
因此,张量并行通常更适合放在高速互联域内,例如限制在单个 NVLink 或 NVSwitch 节点中。必须跨节点扩展时,可以考虑将张量并行与流水线并行、数据并行或专家并行组合,把频繁集合通信尽量留在节点内部,把跨节点通信转换为频率较低、消息更大的传输。并行策略的目标不是让单个维度无限扩大,而是让通信模式适应实际拓扑。
如何判断通信是否已成为瓶颈
- 分别测试单卡、双卡、四卡和更多 GPU 的单请求延迟、吞吐量与每 token 延迟,不只观察显存是否下降。
- 使用 NCCL Tests 测量目标拓扑上的 AllReduce、AllGather 和 ReduceScatter,重点关注与实际推理消息大小接近的区间。
- 通过时间线分析计算内核与通信内核的占比,检查 GPU 是否频繁等待集合通信完成。
- 分别压测预填充和解码阶段,避免平均指标掩盖小消息延迟问题。
- 检查并行组的 GPU 亲和性、NUMA 位置、网卡绑定以及跨交换域情况,防止调度系统生成低效拓扑。
提升扩展效率的实践方向
首先,应选择满足显存和时延目标的最小张量并行度,而不是默认用满所有 GPU。其次,可采用算子融合、通信与计算重叠、CUDA Graph、定制 AllReduce 等方式减少启动和同步成本。再次,在批量较大时通过连续批处理提高每轮计算量,使通信成本被更多请求分摊;对低并发、低延迟业务则应优先优化小消息通信和并行组规模。
量化也能间接改善扩展效率。较低精度权重可以减少显存占用,让模型使用更小的张量并行度,或者在相同 GPU 数量上扩大批量。需要注意的是,量化本身并不必然减少所有激活通信,最终效果仍应以目标模型、推理框架和真实请求分布的测试结果为准。
总结
张量并行的收益来自计算分摊,代价则是频繁的跨卡通信。并行度较小时,计算加速通常占主导;并行度继续提高后,链路带宽、固定延迟、同步步骤和硬件拓扑会逐渐限制扩展。高效部署的关键不是简单增加 GPU,而是在模型结构、请求负载、集合通信算法和互联拓扑之间寻找平衡点,并通过分阶段、分消息尺寸的基准测试确定最合适的并行配置。