核心要点

  • 数据并行:每卡持完整模型副本、各处理一份数据切片,反向后用 AllReduce 同步梯度

  • 张量并行:把单层的大矩阵按行/列切到多卡,层内计算需频繁通信,适合放在高带宽(NVLink)卡间

  • 流水线并行:按层切分到不同卡,用 micro-batch 填充流水线以减少 bubble 空泡

  • 大模型常用 3D 并行(数据+张量+流水线)组合,并叠加 ZeRO 切分优化器状态

标准回答

数据并行(Data Parallel)

每张卡保存完整模型副本,各自处理不同数据切片;反向传播后通过 AllReduce 汇总并平均梯度,保持参数一致。实现简单、扩展性好,但每卡都要装下整个模型,无法解决单模型放不下的问题。

张量并行(Tensor Parallel)

把单层内的大权重矩阵按行或列切分到多卡,各卡算一部分再拼接,属于层内并行。通信发生在每层前向/反向中,频繁且对带宽敏感,通常限制在单机多卡的 NVLink 域内。

流水线并行(Pipeline Parallel)

把模型按层划分成多个 stage 分布到不同卡,数据像流水线一样逐 stage 流动。为减少首尾的空泡(bubble),把 batch 拆成多个 micro-batch 交错执行。

组合使用

超大模型常用 3D 并行:张量并行解决单层放不下,流水线并行解决整模型放不下,数据并行提升吞吐,再配合 ZeRO(DeepSpeed)切分优化器状态、梯度与参数进一步省显存

常见误区

⚠️ 常见踩坑

混淆张量并行(切单层矩阵、层内通信)与流水线并行(切层、stage 间传激活);忽略流水线的 bubble 问题以及张量并行对卡间带宽的强依赖。

追问

追问 1ZeRO 和数据并行是什么关系?

ZeRO 是数据并行的显存优化版:标准数据并行每卡冗余存一份优化器状态、梯度、参数,ZeRO 把这三者按 Stage 1/2/3 逐步切分到各卡,消除冗余,使数据并行也能训练放不下单卡的大模型,通信换显存。

追问 2流水线并行的 bubble 怎么减小?

bubble 来自流水线填充和排空阶段的空闲。增大 micro-batch 数量可摊薄首尾空泡占比;采用 1F1B(交错的一前一后调度)等调度策略让前向与反向更紧凑地交错,进一步提升设备利用率。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。