推理与部署推理优化分布式速答 · 约 6 分钟更新 2026-09-19

张量并行、流水线并行、数据并行有什么区别?多卡怎么拆

一句话结论

数据并行复制整个模型、分摊请求,解决请求多;张量并行把每层的矩阵切开、多卡合算一层,解决单层算不动;流水线并行把层分段接力,解决模型太深装不下。

先这样答

三种并行回答的是三个不同的问题。数据并行面对请求太多:每张卡放一份完整模型,请求分发到各个副本上独立处理,显存一点没省,但吞吐随卡数增长。张量并行面对单层算不动或放不下:把一层里的矩阵乘法切开,几张卡各算一块,中间结果通过通信拼回完整输出,等价于多张卡合算同一层。流水线并行面对模型太深:按层把模型切成前后几段,每段放一张卡,算完一段把中间结果传给下一段,卡与卡接力完成一次前向。

代价各不相同。张量并行每层都要通信,一次前向要做多次同步,对卡间带宽极其敏感,适合放在同一台机内用高速互联;跨机用它,等通信的时间会吃掉并行省下的计算。流水线并行只在段与段的边界传一次数据,跨机也扛得住,但衔接处会空转(一段在算、另一段在等),要靠把请求切成小份连续喂入把流水线填满。数据并行没有卡间通信负担,问题只是每张卡都要装得下完整模型。

实际部署按这个顺序选:单卡装得下就不拆;模型装不下单卡,先用张量并行在机内把模型摊开;模型大到一组卡都紧张,再叠流水线并行跨机分段;请求量大了,在前面任一方案外层再套数据并行扩吞吐。回答时先讲三种并行各自的目标,再给选型顺序,逻辑就完整了。

面试官会怎么追问

  • 「张量并行为什么对带宽敏感?」 它切开的是层内计算,每层前向都要多次通信同步,通信次数和层数成正比。带宽不够,卡就在等数据,并行收益被通信开销吃掉,所以它一般限制在 NVLink 这类高速互联的范围内用。
  • 「流水线并行的气泡指什么?」 指流水线里部分卡没活干的时间段:第一批数据还没流到后面的段,或者最后一批已经流过去了。工程上用微批把流水线填满来压缩空转,但只要切了段,气泡只能减小,不能消除。
  • 「ZeRO 算哪种并行?」 它是数据并行的改进:把优化器状态、梯度、参数分片存到不同卡上,用到时再聚合,消除每份副本都存全套状态的浪费。推理侧的参数分摊思路和它同源,目标是同一件事:别让每张卡都背完整一份。

回答的坑

  • 三种并行的目标混为一谈。数据并行扩吞吐、张量并行解决单层算力、流水线并行解决深度放不下,先分清要解决的问题,再谈怎么拆。
  • 张量并行随手跨机用。跨机带宽撑不住每层通信,延迟会被通信拖垮,这是多卡选型里最常见的错,主动点出来很加分。
—— 本题完 ——