
一、问题的引入部署 70B 以上大模型时单卡显存往往捉襟见肘。张量并行TP把单层权重沿隐藏维度切分到多张 GPU每张卡只存一部分。不少团队上线 TP 后遇到诡异现象吞吐提升首 Token 时间TTFT却从 200ms 涨到 800ms 以上。更反直觉的是NVLink 节点内部同样出现。通信成了真凶。⚡二、根因拆解2.1 TP 的通信模式Transformer 的 Attention 和 MLP 在 TP 下被纵向切分。每层前向传播后各卡持有部分激活值必须通过 All-Reduce 归约得到完整结果。 单次前向通信量与层数LLL、隐藏维度HHH、并行度NNN正相关Vcomm≈2×L×H×batch×seq×(N−1)/NV_{comm} \approx 2 \times L \times H \times \text{batch} \times \text{seq} \times (N - 1) / NVcomm≈2×L×H×batch×seq×(N−1)/N2.2 为什么首 Token 最敏感TTFT 对应 Prefill 阶段需一次性处理完整输入序列。此时计算量虽大但 TP 引入的 All-Reduce 是同步阻塞的Kernel 发起后所有卡必须等待归约完成才能进入下一层。 当 batch size 较小时单层计算只有几十微秒All-Reduce 启动加传输却占上百微秒通信占比被极度放大。Decode 阶段同样有通信但每步只生成一个 Token计算本身很轻通信延迟反而不那么刺眼。核心在于Prefill 阶段的计算-通信比过低。2.3 常见误区普遍错误认知是NVLink 带宽 900GB/s通信不会是瓶颈。实际上All-Reduce 延迟由三部分构成组件典型耗时是否可优化Kernel 启动开销5-20 μs✅ 合并 Launch同步等待10-50 μs✅ 异步化数据传输与带宽相关⚠️ 受硬件上限约束在小 batch 场景下前两项固定开销才是大头带宽反而没吃满。三、实战验证3.1 基线测试模型Llama-3-70B-InstructGPU8 × A100 80GBNVLink 全互联框架vLLM v0.5.0输入1024 tokensbatch size 1/4/16测试结果TP 大小Batch1 TTFTBatch4 TTFTBatch16 TTFT1单卡 OOM———2420ms310ms245ms4680ms410ms280ms8920ms520ms310ms batch size 1 时 TP8 的 TTFT 是 TP2 的 2.2 倍batch size 增大后差距缩小。验证了计算-通信比决定 TP 效率。3.2 通信 Profiling用nsys抓取 TP4 的 timeline每层 Transformer 后都有明显的 All-Reduce 间隙# 启动 Nsight Systems 采集nsys profile-otp_profile\python-mvllm.entrypoints.openai.api_server\--modelmeta-llama/Llama-3-70B-Instruct\--tensor-parallel-size4分析发现All-Reduce 占 Prefill 总耗时的38%batch1batch16 时降至12%。瓶颈不在带宽而在 kernel 同步等待。3.3 优化方案方案一通信与计算重叠将 Attention 的 Q/K/V 投影与后续计算流水线化。在 vLLM 中开启重叠# vLLM 启动参数python-m vllm.entrypoints.openai.api_server \--model meta-llama/Llama-3-70B-Instruct \--tensor-parallel-size4\--enable-chunked-prefillChunked Prefill 将长序列拆成多个 chunk在 chunk 间隙重叠通信降低同步阻塞影响。方案二自定义 All-Reduce Kernel️vLLM 0.4.0 引入 custom all-reduce绕过 PyTorch 默认 NCCL将中小 payload 的 All-Reduce 延迟降低约30%。# 环境变量启用自定义 all-reduceexport VLLM_USE_CUSTOM_ALL_REDUCE1方案三TP 与 PP 联合调优⚙️节点内卡数较多时纯粹增加 TP 收益递减。经验法则是TP 大小不超过节点内 NVLink 直连 GPU 数超出部分用流水线并行PP承接。8 卡节点上TP4 PP2 往往比 TP8 的 TTFT 更优同时保持相近吞吐。配置TP8TP4 PP2TTFT (batch1)920ms510ms吞吐 (token/s)14201380TP4 PP2 的 TTFT 降低45%吞吐仅损失3%是更均衡选择。四、深度思考TP 不是银弹。batch size 小、序列长度中等512-2048的交互式场景下TP 的通信开销容易吃掉并行收益。 笔者总结三条判断准则batch size 4 时谨慎使用 TP 4。此时计算-通信比过低TTFT 恶化明显。优先保证节点内 TP跨节点用 PP。NVLink 的带宽和延迟远优于网络互联节点内 TP 才是效率最高的用法。All-Reduce 的优化空间大于带宽升级。自定义 kernel、通信计算重叠、减少同步点这些软件层面的改进比等待下一代硬件更现实。另一个常被忽略的细节TP 还会放大显存碎片。每张卡需预留通信缓冲区且 KV Cache 按头维度切分后单卡分配粒度变粗容易出现总显存够但分配失败。五、趋势判断当前工程演进来看TP 通信优化正从可选调优项变成推理框架的默认配置。通信计算重叠将成为下一代推理引擎的标配设计Chunked Prefill 只是起点层间细粒度流水线才是终点。自定义 All-Reduce会从社区补丁演进为框架原生能力未来可能直接集成到 CUDA Graph 中消除启动开销。硬件层面NVLink 5 和更高速的节点间互联会缓解带宽焦虑但同步开销的本质问题仍需软件协同解决。对从业者现阶段最关键的能力不是怎么开 TP而是什么时候不该开 TP以及开完后怎么证明通信没拖后腿。六、总结张量并行让大模型推理突破单卡显存天花板却也把 All-Reduce 通信塞进首 Token 的关键路径。 通过 profiling 定位通信占比、用 Chunked Prefill 重叠计算与通信、用 custom all-reduce 降低同步延迟、用 TPPP 替代纯 TP 扩容可在保持吞吐的同时把 TTFT 拉回可接受范围。你部署大模型推理服务时有没有遇到过 TP 开启后延迟反而上升的情况更倾向用纯 TP、TPPP还是 PD 分离架构来规避欢迎分享经验。 如果这篇文章对你有帮助别忘了点赞收藏。后续会持续更新更多大模型推理优化的深度解析与实战干货。关注我带你玩转 AI 工程。