2. 分布式训练基础

在进入 DeepSpeed 的模型状态分片与内存复用之前,必须先建立一张清晰的“并行地图”。大模型训练之所以需要分布式,是因为单个 GPU 的显存无法同时容纳模型参数、梯度、优化器状态以及激活值。不同的并行策略,本质上是在“切分什么”和“复制什么”之间做权衡。理解数据并行、模型并行、流水线并行和混合并行的差异,是后续理解 ZeRO 分片逻辑的前提。

一、核心原理:四种并行策略的分工

数据并行(Data Parallelism, DP)是最常见的策略。每张 GPU 持有一份完整的模型副本,但只处理不同的数据批次。前向和反向计算在本地完成,随后通过 AllReduce 同步梯度,使所有副本保持一致。它的优点是实现简单、扩展性好;缺点是每张卡都要存完整模型状态,显存开销随模型增大而线性增长。

模型并行(Model Parallelism, MP)又称张量并行,把单个层内的矩阵运算切分到多张 GPU 上。例如把权重矩阵按列或按行拆分,每张卡只计算一部分,再通过 AllGather 或 ReduceScatter 拼接结果。它解决了单层放不下的问题,但通信频繁,对互联带宽要求高。

流水线并行(Pipeline Parallelism, PP)按层切分模型,不同 GPU 负责不同层段。数据被切成多个 micro-batch,在流水线中依次流动,从而让各段 GPU 交替工作。它降低了单卡显存压力,但会引入流水线气泡,需要合理设置 micro-batch 数量来掩盖空闲。

混合并行(Hybrid Parallelism)则是把上述策略组合使用,例如“数据并行 + 张量并行 + 流水线并行”,典型如 Megatron-LM 的 3D 并行。DeepSpeed 常与这些策略配合,在数据并行维度上进一步做 ZeRO 分片,从而在超大规模模型上取得显存与吞吐的平衡。

四种并行策略的切分与复制关系 数据并行 DP 完整模型副本 完整模型副本 完整模型副本 不同数据批次 + AllReduce 模型并行 MP 权重矩阵左半 权重矩阵右半 同层切分计算 AllGather / ReduceScatter 流水线并行 PP 第 1~8 层 第 9~16 层 第 17~24 层 micro-batch 流动 + 气泡 混合并行 3D DP 维度复制 TP 维度切层内 PP 维度切层间 组合通信 + ZeRO 分片 切分对象与通信模式对比 DP 切分数据,复制模型 AllReduce 梯度 显存随模型线性增长 MP 切分层内矩阵 AllGather / ReduceScatter 通信频繁,带宽敏感 PP 切分模型层段 点对点激活传递 存在流水线气泡 3D 数据 + 层内 + 层间 组合通信 需精细调参

二、方法流程:从单卡到多卡的决策路径

选择并行策略时,可以按以下顺序判断:

  1. 模型能否放入单卡?能,则优先数据并行,简单高效。
  2. 单层是否放不下?若单层参数过大,引入张量并行,把矩阵切到多卡。
  3. 层数很多但单层可放下?使用流水线并行,按层切分,降低单卡驻留。
  4. 规模继续增大?组合 DP、TP、PP 形成混合并行,并在 DP 维度上叠加 ZeRO 分片。

在 DeepSpeed 中,数据并行是默认底座,ZeRO 则是在 DP 组内对优化器状态、梯度和参数进行分片。因此,理解 DP 的“复制”语义,才能理解 ZeRO 的“分片”语义。

三、案例场景:8 卡训练一个 13B 模型

假设有 8 张 80GB GPU,训练 13B 参数模型。若采用纯数据并行,每张卡需保存完整参数、梯度和优化器状态,显存很快耗尽。此时可配置为:TP=2、PP=2、DP=2,即 2×2×2=8 卡。每张卡只持有部分层和部分矩阵,显存压力显著下降。再在 DP=2 的维度上启用 ZeRO-2,进一步分片优化器状态和梯度。

{
  "train_batch_size": 64,
  "zero_optimization": {
    "stage": 2,
    "offload_optimizer": { "device": "cpu" }
  },
  "tensor_parallel": { "tp_size": 2 },
  "pipeline_parallel": { "pp_size": 2 }
}

该配置下,通信组被划分为 TP 组、PP 组和 DP 组,各自使用不同的集合通信原语。若 TP 组跨节点,带宽不足会成为瓶颈,因此通常把 TP 放在节点内,PP 和 DP 放在节点间。

四、误区与复盘

常见误区一:并行度越高越好。实际上,TP 过大导致通信量激增,PP 过大导致气泡占比升高,DP 过大则 AllReduce 开销增加。并行度需要与模型结构、网络拓扑匹配。

复盘要点:先判断瓶颈在显存还是吞吐。显存不足优先 TP/PP/ZeRO;吞吐不足则检查通信与气泡。DeepSpeed 的 ZeRO 主要作用于 DP 维度,不能替代 TP 和 PP 对单层和层间的切分。

策略 切分对象 复制对象 主要通信 典型适用
数据并行 DP 数据批次 完整模型 AllReduce 模型可放入单卡
模型并行 MP 层内矩阵 无 AllGather / ReduceScatter 单层过大
流水线并行 PP 模型层段 无 点对点 层数多、单层可放下
混合并行 3D 数据 + 层内 + 层间 按维度组合 组合通信 超大规模模型

掌握这四种并行策略的切分与复制关系后,就能理解 DeepSpeed 为什么选择在数据并行维度上做 ZeRO 分片:它不改变模型结构,却能把冗余的模型状态从每张卡上“拆走”,从而在相同硬件上训练更大的模型。