大模型多 GPU 推理中,张量、流水线和数据并行应该如何组合?
先用自己的话答,再看参考说法
60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。
别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。
参考内容当前已显示;开始口述后会暂时隐藏。
面试时怎么答
并行策略按“模型是否放得下”和硬件拓扑选择:能放单卡先用数据并行扩副本;单卡放不下时,在高速互联域内用张量并行;更大模型再考虑流水线切层。必须说清 TP 每层有 Collective,PP 有气泡,DP 不解决单副本容量。若要求组合方案,先询问模型大小、GPU 数和链路带宽。
可以这样答:
模型能放进单卡时,优先用数据并行增加独立副本,扩吞吐最简单;单卡放不下时,通常在 NVLink 等高速互联域内用张量并行切分每层计算;模型更大或节点更多时,再用流水线并行切层。TP 的代价是每层 Collective,PP 的代价是阶段通信和气泡,DP 则不减少单个副本的显存需求,组合方式必须服从拓扑。
核心回答
先用单卡或单节点能容纳模型的最小并行度满足显存,再扩副本提高吞吐。张量并行把一层内的矩阵切到多张 GPU,可降低单设备权重和计算量,但几乎每层都有集合通信,适合节点内高速互联;流水线并行按层分段,跨阶段传激活,通信频率较低,但会产生流水线气泡和最慢阶段瓶颈;数据并行复制完整服务副本,适合相互独立请求,主要提升总吞吐而不是让单个请求跨副本加速。
典型选择是节点内做张量并行,模型跨节点仍放不下时再叠加流水线并行,最后用多个相同并行组做数据并行。并行度越大不一定越快,通信、负载不均和可用副本数都会改变结果。
展开说明
评估方案时要同时看内存、延迟和故障域:
- 张量并行需要高带宽、低延迟互联;跨慢网络 All-Reduce 可能让逐 token 解码尤其受损。
- 流水线并行可以跨节点放置层,但在线小 Batch 下不容易填满流水线,应平衡各阶段的层数和计算量。
- 数据并行让每个副本独立调度,隔离较好;代价是每个副本都保存完整并行组的权重。
- Expert Parallel适用于 MoE,把专家分散到设备,但 token 路由会产生 All-to-All 和热点专家问题。
- Context Parallel沿序列维度切分输入和各层激活,Attention 需要跨卡交换 K/V,主要服务超长上下文。
- Sequence Parallel的含义依实现而异;在 Megatron 中,它主要沿序列维度切分 LayerNorm、Dropout 等激活并与 Tensor Parallel 配合,不能与 Context Parallel 视为同义词。
训练时采用的切分方式也不必原样用于推理;推理没有优化器状态,最佳并行度可能更小。
工程实践
先测每种模型、精度和长度组合的单组拓扑,再扫描 TP/PP 大小,记录 TTFT、TPOT、吞吐、显存、通信时间和故障恢复。调度器应感知 NVLink/PCIe/机架拓扑,把同一张量并行组放在高速故障域内;部署升级时一次替换完整并行组,健康检查必须确认所有 rank 就绪后才接流量。
常见追问
- 为什么张量并行跨节点后常出现明显性能下降? TP 几乎每层都需要 all-reduce 或 all-gather,跨节点带宽低、延迟高,通信更难与小粒度计算重叠。
- 流水线并行的气泡从哪里来,在线推理为何更难填满? 不同 stage 在批次进入和排空时会空闲;在线请求长度不齐、batch 小且 decode 逐步进行,使稳定流水更难形成。
- 模型已经能放进一张 GPU 时,为什么通常先扩副本而不是继续切模型? 数据并行副本没有层内通信,调度简单且吞吐近线性;继续切分往往只增加通信和尾延迟。
一句话复习
用最小模型并行度解决“放得下”,再用数据并行解决“扛得住”,并用实测权衡通信与延迟。
参考资料
评论与补充
评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。
正在连接站内评论服务…
正在加载评论…
还没有评论,你可以先写下自己的理解或追问。