真实面经题目 · 原创解析

大模型训练中的 3D 并行和 DeepSpeed 分别解决什么问题,如何组合使用?

这题考的是大模型训练系统的分解能力:3D 并行解决模型和计算如何切到多卡上,DeepSpeed 提供 ZeRO、混合精度、checkpoint、offload 和并行编排等工程能力,两者可以组合但不是同一个概念。

出现于:京东 · 算法

60 秒回答模板

3D 并行指把大模型训练从三个维度拆到多 GPU:数据并行、张量并行和流水线并行。数据并行是每组卡持有一份模型副本,切分 batch,反向后同步梯度,主要提升吞吐,但单卡仍要放得下模型和 optimizer state。张量并行是在层内部切分大矩阵、attention head 或 FFN hidden 维度,让单层参数和计算分摊到多卡,适合单层太大或单卡算不动的情况,代价是层内 all-reduce/all-gather 通信重。流水线并行是按层把模型切成多个 stage,不同 micro-batch 在不同 stage 上流水执行,解决层数多导致单卡放不下的问题,但会有 pipeline bubble 和调度复杂度。DeepSpeed 则是训练优化框架,最核心常被问的是 ZeRO:ZeRO-1 切 optimizer state,ZeRO-2 进一步切 gradients,ZeRO-3 连 parameters 也切分,从而显著降低数据并行组内每张卡的显存;它还支持混合精度、activation checkpointing、CPU/NVMe offload、梯度累积、通信优化和流水线训练等。组合使用时,一般按硬件拓扑和瓶颈选择:节点内高速互联适合 tensor parallel,跨节点可以做 pipeline 或 data parallel;再在 data parallel 组内用 ZeRO 分片 optimizer/grad/param,配合 activation checkpointing 和混合精度控制显存。关键是先判断瓶颈是参数、activation、optimizer state、单层计算、通信还是 pipeline bubble,不是盲目把所有并行都打开。

考点 3D 是三种切分
难度 真实面经题
回答目标 让候选人能清楚区分 3D 并行的三个切分维度和 DeepSpeed/ZeRO 的系统优化作用,并能根据模型规模、显存、通信拓扑和吞吐瓶颈设计组合方案。

深入解析

01

3D 并行解决切分维度

大模型训练的瓶颈来自参数、激活、优化器状态、计算量和通信。3D 并行把训练拆成数据并行、张量并行和流水线并行三个维度,分别处理 batch 维、层内矩阵维和层间深度维的扩展问题。

02

数据并行提升吞吐

数据并行让多张卡各自处理不同 micro-batch 或 batch shard,反向后同步梯度。它实现简单、扩展 batch 吞吐有效,但每张卡通常仍要持有完整模型参数和优化器状态,所以单卡显存可能成为限制。

03

张量并行切单层计算

张量并行把单层中的大矩阵乘、attention head 或 FFN 中间维度拆到多卡,让每张卡只承担部分参数和计算。它适合隐藏维度很大、单层放不下或单卡算力不足的模型,但前后向需要频繁跨卡通信,最好放在 NVLink/NVSwitch 等高速互联范围内。

04

流水线并行切模型层

流水线并行按层把模型分成多个 stage,每个 stage 放在不同设备或设备组上,用 micro-batch 填充流水。它能处理层数多、整体模型放不下一张卡的问题,但会引入 pipeline bubble、激活传输、调度复杂度和 stage 负载均衡问题。

05

DeepSpeed 主要提供系统优化

DeepSpeed 不是 3D 并行的第四个维度,而是一个训练系统框架。它提供 ZeRO、混合精度、activation checkpointing、梯度累积、通信优化、offload 和 pipeline engine 等能力,帮助在有限显存和多卡环境下训练大模型。

06

ZeRO 解决数据并行冗余

普通数据并行会在每张卡复制 optimizer state、gradients 和 parameters。ZeRO 通过在数据并行 rank 间分片这些状态降低显存:ZeRO-1 分 optimizer state,ZeRO-2 加上 gradients,ZeRO-3 进一步分 parameters。显存更省,但通信和参数 gather 复杂度更高。

07

组合要贴合硬件拓扑

常见组合是节点内做 tensor parallel,因为层内通信频繁且需要高速互联;跨节点做 data parallel 或 pipeline parallel;在 data parallel 组内用 ZeRO 分片状态。pipeline stage 和 tensor parallel group 的划分要让每个 stage 计算时间接近,避免某一段成为瓶颈。

08

调参要围绕全局 batch 和瓶颈

组合并行后,全局 batch 通常等于 micro-batch size 乘 gradient accumulation steps 再乘 data parallel size。需要同时调 micro-batch、流水线 chunks、checkpointing、ZeRO stage、通信 bucket 和学习率缩放,并用 profiler 看显存、算力利用率、通信占比和 pipeline bubble。

易错点

  • 把 DeepSpeed 当成和数据/张量/流水线并行并列的第四种并行维度。
  • 只会背 3D 名字,说不清数据并行、张量并行、流水线并行分别切什么。
  • 认为数据并行能解决所有显存问题,忽略每卡仍可能复制完整参数和优化器状态。
  • 认为 ZeRO-3 可以无条件替代张量并行和流水线并行,忽略单层计算、激活和通信瓶颈。
  • 在跨节点慢网络上盲目扩大 tensor parallel,导致通信占比过高。
  • 使用 pipeline parallel 却不考虑 micro-batch、bubble 和 stage 负载均衡。
  • 没有计算 global batch、梯度累积和学习率关系,导致训练行为和单卡 baseline 不可比。
  • 只追求能跑起来,不用 profiler 查看显存峰值、GPU 利用率、通信时间和吞吐瓶颈。

面试官追问

ZeRO 和张量并行有什么区别?

ZeRO 主要在数据并行组内分片优化器状态、梯度和参数,减少冗余显存;张量并行是在模型层内部切矩阵和计算,让单层参数和算力分散到多卡。ZeRO 不一定解决单层矩阵太大或层内计算太重的问题。

什么时候需要流水线并行?

当模型层数多、整体参数和激活无法放在一个设备组内,或者只做张量并行仍不够时,可以按层切成 stage。需要注意 stage 负载均衡、micro-batch 数和 pipeline bubble。

为什么张量并行通常放在节点内?

因为张量并行在每层前后向都可能发生 all-reduce、all-gather 或 reduce-scatter,通信频率高。节点内 NVLink/NVSwitch 带宽和延迟更适合这种模式,跨节点网络容易成为瓶颈。

ZeRO-3 是否可以替代 3D 并行?

不一定。ZeRO-3 能显著降低参数和状态冗余,但如果单层计算太大、激活太大、吞吐不足或通信不平衡,仍可能需要 tensor parallel、pipeline parallel、activation checkpointing 等组合。

组合并行时最容易配错什么?

常见错误是 global batch 计算错、gradient accumulation 与学习率缩放不匹配、pipeline stage 不均衡、TP group 跨慢网络、ZeRO stage 过高导致通信压垮吞吐,或 checkpointing 开太多让重算成本过高。