真实面经题目 · 原创解析
大模型训练中的 3D 并行和 DeepSpeed 分别解决什么问题,如何组合使用?
这题考的是大模型训练系统的分解能力:3D 并行解决模型和计算如何切到多卡上,DeepSpeed 提供 ZeRO、混合精度、checkpoint、offload 和并行编排等工程能力,两者可以组合但不是同一个概念。
真实面经题目 · 原创解析
这题考的是大模型训练系统的分解能力:3D 并行解决模型和计算如何切到多卡上,DeepSpeed 提供 ZeRO、混合精度、checkpoint、offload 和并行编排等工程能力,两者可以组合但不是同一个概念。
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 并行把训练拆成数据并行、张量并行和流水线并行三个维度,分别处理 batch 维、层内矩阵维和层间深度维的扩展问题。
数据并行让多张卡各自处理不同 micro-batch 或 batch shard,反向后同步梯度。它实现简单、扩展 batch 吞吐有效,但每张卡通常仍要持有完整模型参数和优化器状态,所以单卡显存可能成为限制。
张量并行把单层中的大矩阵乘、attention head 或 FFN 中间维度拆到多卡,让每张卡只承担部分参数和计算。它适合隐藏维度很大、单层放不下或单卡算力不足的模型,但前后向需要频繁跨卡通信,最好放在 NVLink/NVSwitch 等高速互联范围内。
流水线并行按层把模型分成多个 stage,每个 stage 放在不同设备或设备组上,用 micro-batch 填充流水。它能处理层数多、整体模型放不下一张卡的问题,但会引入 pipeline bubble、激活传输、调度复杂度和 stage 负载均衡问题。
DeepSpeed 不是 3D 并行的第四个维度,而是一个训练系统框架。它提供 ZeRO、混合精度、activation checkpointing、梯度累积、通信优化、offload 和 pipeline engine 等能力,帮助在有限显存和多卡环境下训练大模型。
普通数据并行会在每张卡复制 optimizer state、gradients 和 parameters。ZeRO 通过在数据并行 rank 间分片这些状态降低显存:ZeRO-1 分 optimizer state,ZeRO-2 加上 gradients,ZeRO-3 进一步分 parameters。显存更省,但通信和参数 gather 复杂度更高。
常见组合是节点内做 tensor parallel,因为层内通信频繁且需要高速互联;跨节点做 data parallel 或 pipeline parallel;在 data parallel 组内用 ZeRO 分片状态。pipeline stage 和 tensor parallel group 的划分要让每个 stage 计算时间接近,避免某一段成为瓶颈。
组合并行后,全局 batch 通常等于 micro-batch size 乘 gradient accumulation steps 再乘 data parallel size。需要同时调 micro-batch、流水线 chunks、checkpointing、ZeRO stage、通信 bucket 和学习率缩放,并用 profiler 看显存、算力利用率、通信占比和 pipeline bubble。
ZeRO 主要在数据并行组内分片优化器状态、梯度和参数,减少冗余显存;张量并行是在模型层内部切矩阵和计算,让单层参数和算力分散到多卡。ZeRO 不一定解决单层矩阵太大或层内计算太重的问题。
当模型层数多、整体参数和激活无法放在一个设备组内,或者只做张量并行仍不够时,可以按层切成 stage。需要注意 stage 负载均衡、micro-batch 数和 pipeline bubble。
因为张量并行在每层前后向都可能发生 all-reduce、all-gather 或 reduce-scatter,通信频率高。节点内 NVLink/NVSwitch 带宽和延迟更适合这种模式,跨节点网络容易成为瓶颈。
不一定。ZeRO-3 能显著降低参数和状态冗余,但如果单层计算太大、激活太大、吞吐不足或通信不平衡,仍可能需要 tensor parallel、pipeline parallel、activation checkpointing 等组合。
常见错误是 global batch 计算错、gradient accumulation 与学习率缩放不匹配、pipeline stage 不均衡、TP group 跨慢网络、ZeRO stage 过高导致通信压垮吞吐,或 checkpointing 开太多让重算成本过高。