核心要点

  • 数据并行:每卡持完整模型副本、各处理一份数据切片,反向后用 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(交错的一前一后调度)等调度策略让前向与反向更紧凑地交错,进一步提升设备利用率。

🔗 相似问题

同一考点的不同问法,换着练更稳

延伸学习

按主题分类的相关资源,便于系统复习