跳到主要内容

数据并行(Data Parallelism)

数据并行(DP)是分布式训练中最基础的并行策略。每个 DP worker 持有完整的模型副本,处理不同的数据批次,在反向传播结束后通过梯度同步保持模型一致性。DP 在推理场景中不需要梯度同步,各副本独立处理不同请求。


基本原理

DP 将 global batch 切分为 $N$ 份,每个 worker 处理其中一份:

Worker 0: [data_0] → forward → backward → ∇W_0
Worker 1: [data_1] → forward → backward → ∇W_1
...
Worker N-1: [data_{N-1}] → forward → backward → ∇W_{N-1}

AllReduce 同步梯度
∇W = (1/N) Σ ∇W_i

每个 worker 用相同 ∇W 更新参数

每个 worker 的模型权重在更新后保持完全一致,因此无需在前向/反向传播中通信——通信集中在每个 training step 结束时的一次梯度 AllReduce。


通信时机

经典 DP:每个 training step 的反向传播结束后,对全部梯度执行一次 AllReduce:

$\nabla W = \frac{1}{N} \sum_{i=0}^{N-1} \nabla W_i$

ZeRO 优化(见下文):将 AllReduce 拆分为 ReduceScatter + AllGather,分散到反向传播过程中执行。


通信量分析

梯度大小等于模型参数量乘以梯度数据类型的字节数:

$M_{\text{DP}} = |\theta| \times \text{grad\_dtype\_size}$

其中 $|\theta|$ 为模型参数总量(个数),$\text{grad\_dtype\_size}$ 为梯度数据类型字节数(通常 BF16 = 2 或 FP32 = 4)。

典型模型的梯度通信量

模型参数量BF16 梯度总量FP32 梯度总量
LLaMA-70B70B140 GB280 GB
Qwen-72B72B144 GB288 GB
DeepSeek-V3671B1.34 TB2.68 TB

这是超大消息,远超其他任何通信原语。

DP 通信特征汇总

特征
通信原语AllReduce(经典 DP)/ ReduceScatter + AllGather(ZeRO)
消息大小100 GB ~ TB 级别
通信组大小数十 ~ 数千(跨 rack/pod)
频率每 training step 一次
延迟敏感性较低(可与反向计算 overlap)
推荐算法Ring AllReduce + 分层 + Overlap

ZeRO 优化

ZeRO(Zero Redundancy Optimizer,Rajbhandari et al., SC 2020)通过切分优化器状态、梯度、参数消除 DP 的显存冗余。

ZeRO Stage 3(梯度通信角度)

将每个 training step 的 AllReduce 拆分为:

  1. ReduceScatter:每个 worker 只保留 $1/N$ 的梯度分片,通信量与 AllReduce 相同
  2. AllGather:在需要参数时从各 worker 收集完整参数,按需触发
经典 DP: AllReduce(∇W) — 通信量 M_DP,每步一次
ZeRO-3: ReduceScatter(∇W) + AllGather(W) — 每个层的梯度更新后立刻 scatter

ZeRO 的通信量与经典 DP 相同(总字节数不变),但将大块通信分散成多个小块,便于与反向传播 overlap。


梯度累积与计算-通信重叠

梯度累积

累积 $k$ 个 micro-batch 的梯度后再做一次 AllReduce,将通信频率从每 micro-batch 一次降为每 $k$ 个 micro-batch 一次:

$\nabla W_{\text{accum}} = \sum_{j=0}^{k-1} \nabla W_j, \quad \text{再 AllReduce } \nabla W_{\text{accum}}$

反向传播 Overlap

反向传播从最后一层开始逐层计算梯度,先完成的层的梯度可以立即开始 AllReduce,与后续层的梯度计算并行:

$T_{\text{eff}} = \max(T_{\text{backward}}, T_{\text{allreduce}})$

而非串行的 $T_{\text{backward}} + T_{\text{allreduce}}$

$T_{\text{backward}} \gg T_{\text{allreduce}}$ 时,通信几乎完全被隐藏。大模型(参数量大,反向计算量大)和大 batch 场景(计算量进一步增大)有更好的 overlap 效率。


推理中的 DP

推理场景下 DP 不需要梯度同步——各副本独立处理不同用户的请求,无集合通信。DP 在推理中的作用是负载均衡,而非模型同步,不涉及通信原语开销。


参考文献