第 10 章 LLM分布式训练数据并行

第 10 章 分布式训练原理

第 10 章 分布式训练原理

学习目标

  • 掌握四种并行策略:数据、张量、流水、专家并行的原理与适用边界;
  • 理解 AllReduce、AllGather、ReduceScatter 等集合通信原语;
  • 理解同步训练与异步训练的取舍;
  • 理解全局批大小、梯度累积与学习率缩放的关系;
  • 理解 LLM 训练中并行组合(3D/4D/5D)与通信瓶颈。

10.1 为什么必须分布式

第 4 章的账:70B 模型 BF16 权重 140GB,单卡放不下;1 万亿 token 训练总 FLOPs 约 6×10236\times10^{23},单张 H100 算到天荒地老。分布式训练解决两件事:放不下(显存)和算不完(算力)。四种并行策略是回答这两件事的基本构件。

10.2 四种并行策略

10.2.1 数据并行(Data Parallelism, DP)

每个 worker 一份完整模型副本,各自处理不同的数据切片,梯度同步后一起更新:

%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
flowchart LR
    A[数据切片 1] --> B[Worker 1
模型副本] C[数据切片 2] --> D[Worker 2
模型副本] E[数据切片 3] --> F[Worker 3
模型副本] B --> G[梯度 AllReduce 求和取平均] D --> G F --> G G -->|同步后更新| B G -->|同步后更新| D G -->|同步后更新| F
  • 优点:实现简单(DDP/FSDP 一句话开启)、线性扩展吞吐;
  • 致命伤模型必须放得下单卡。第 8 章的 ZeRO/FSDP 本质是「数据并行的显存分身」——把冗余的权重/梯度/优化器状态分片,让数据并行能扛起大模型。

数据并行的扩展效率受通信限制:每步都要同步全量梯度(通信量 = 参数量 × 字节数),因此网络带宽决定扩展曲线。第 8 章 FSDP 的「权重 all-gather +50% 通信」就是这通信账的一部分。

10.2.2 张量并行(Tensor Parallelism, TP)

单个算子的权重矩阵切到多卡,每卡算一部分,最后聚合。以 MLP 为例,权重 WW 按列切分,每卡算 WixW_i x 的片段,再 all-reduce 拼接:

  • 优点:单算子内并行,通信量小(每层切分后只同步一次输出);
  • 代价每算子都要通信(all-reduce),小 batch 下通信占比高;要求 NVLink 级高速互联——张量并行只在单机内做(跨机 all-reduce 太慢)。

适用判断:模型大到单卡放不下,且希望保留数据并行的吞吐优势时,TP 是首选维度。7B 模型单机 8 卡可 TP=8 全切;70B 通常 TP=8 + 其他维度补齐。

10.2.3 流水并行(Pipeline Parallelism, PP)

把模型切成多段,各段放不同卡,数据像流水线一样依次经过:

%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
flowchart LR
    subgraph Stage1[卡 1:层 0-15]
    A1[前向]
    end
    subgraph Stage2[卡 2:层 16-31]
    B1[前向]
    end
    subgraph Stage3[卡 3:层 32-47]
    C1[前向]
    end
    A1 --> B1 --> C1
  • 优点:显存线性下降(模型切成 N 段,每段只存 1/N);
  • 痛点气泡(Bubble)——流水线排空/填满时大量卡空闲。缓解手段:GPipe 的 micro-batch 流水、PipeDream 的 1F1B 交错调度(现代标准,气泡率降到 ~1/(4m)1/(4m)mm 为 micro-batch 数)。
  • 通信:只在段间传激活/梯度,通信量小,跨机友好——PP 是「把放不下的模型跨机摊开」的答案。

10.2.4 专家并行(Expert Parallelism, EP)

MoE 专属(第 4 章):把专家 FFN 分布到多卡,router 决定 token 去哪些专家所在卡。每次前向都发生 all-to-all 通信(token 从来源卡发往目标卡,结果再发回):

  • 优点:MoE 激活参数少,EP 让每卡只算被路由到的专家,算力利用率高;
  • 代价:all-to-all 通信量大且随机(token 去哪不固定),跨机 EP 通信是 MoE 训练/推理的头号瓶颈

10.3 集合通信原语

四种并行最终都落到几个集合通信操作。以 N 个 GPU 的全局视图:

原语 行为 通信量 典型用途
AllReduce 每卡输入向量,求和/均值后每卡都得到完整结果 O(N×向量) 梯度同步(DP)
AllGather 每卡持有分片,聚合成完整向量发回每卡 O(N×向量) ZeRO-3 权重收集
ReduceScatter 每卡输入,求和后每卡只留一份分片 O(N×向量) ZeRO-2 梯度归约
All-to-All 每卡向其他每卡发不同数据 O(N²×块) 专家路由(EP)

实现层面,这些原语由 NCCL(NVIDIA)、RCCL(AMD)、Gloo 等通信库提供,底层走 NVLink(机内)/InfiniBand 或 RoCE(机间)。集合通信是分布式训练的「总线」——一切并行策略的性能上限都由它决定。

10.4 同步训练 vs 异步训练

维度 同步训练 异步训练
更新时机 所有 worker 梯度齐了才更新 每卡算完就更新,不等别人
一致性 严格一致 有陈旧梯度(stale gradient)
收敛 稳定、可复现 震荡、难调、可能不收敛
硬件/网络 要求高(慢卡拖慢全局) 容忍异构与掉队
现状 LLM 事实标准 基本弃用(除部分在线 RL)

同步训练的真实痛点不是异步,而是掉队(Straggler):一台慢卡或慢网络拖住全局。LLM 界的答案不是异步,而是软同步 + 容错(第 11 章):周期性检查点、节点故障自动剔除重启。

10.5 全局批大小与学习率缩放

第 7 章定义过全局批大小。分布式后它变得显式:全局批 = micro-batch × 梯度累积 × 数据并行度。当全局批变大时,学习率要跟着调,否则收敛不稳:

ηlarge=ηbaseBlargeBbase(平方根缩放)ηlarge=ηbaseBlargeBbase(线性缩放)\eta_{\text{large}} = \eta_{\text{base}} \cdot \sqrt{\frac{B_{\text{large}}}{B_{\text{base}}}} \quad(\text{平方根缩放}) \quad\text{或}\quad \eta_{\text{large}} = \eta_{\text{base}} \cdot \frac{B_{\text{large}}}{B_{\text{base}}} \quad(\text{线性缩放})

经验法则:批翻 2 倍,学习率翻 2\sqrt{2} 或 2 倍(线性缩放只在小范围成立,批太大时必须降回平方根,否则 loss spike)。同时 warmup 步数也要随批大小调整。这批超参迁移工作,是「从单卡调通到千卡复现」时最容易翻车的隐性成本——同样的数据与代码,批大小不同,最优学习率就不同。

10.6 并行组合与通信瓶颈

真实 LLM 训练从不用单一种并行,而是组合拳(业界叫 3D/4D/5D 并行):

%%{init: {"themeVariables": {"primaryTextColor": "#000000", "textColor": "#000000", "labelColor": "#000000", "nodeTextColor": "#000000", "labelTextColor": "#000000", "scaleLabelColor": "#000000"}}}%%
flowchart LR
    A[数据并行 DP
吞吐] --> B[流水并行 PP
跨机放模型] B --> C[张量并行 TP
机内压显存] C --> D[专家并行 EP
MoE 专用] D --> E[序列并行 SP
长上下文] E --> F[ZeRO/FSDP
优化器状态分片]
  • DP 管吞吐、PP/TP/SP 管模型显存、EP 管 MoE、ZeRO 管优化器状态。它们正交,可以同时开。
  • 典型部署:单机 8 卡内做 TP(NVLink 快),跨机做 PP + DP(机间通信少),MoE 加 EP。

通信瓶颈的工程直觉(贯穿第 11 章):

  1. 通信占比 = 通信量 / 计算量。小 batch 时计算少,通信占比高——批太小,并行越多越慢
  2. 机内 NVLink(900GB/s 级)比机间 InfiniBand(400Gbps 级)快一个量级——把高通信的维度(TP)放机内,低通信的维度(PP/DP)放机间
  3. 一切优化(通信压缩、梯度裁剪、重叠)都围绕「让计算掩盖通信」展开。

本章要点回顾

  1. 分布式解决两件事:显存放不下、算力算不完;四种并行是基本构件。
  2. DP 管吞吐但模型要放得下单卡;TP 管单算子切分、只适合机内;PP 按层切、跨机友好但有气泡;EP 是 MoE 专属、all-to-all 通信贵。
  3. 集合通信(AllReduce/AllGather/ReduceScatter/All-to-All)是分布式的总线,性能上限由网络决定。
  4. LLM 用同步训练;异步因陈旧梯度基本弃用;掉队靠软同步与容错解决。
  5. 全局批变大要同步调学习率(平方根缩放);批大小迁移是千卡复现的头号隐性成本。
  6. 真实训练是 3D/4D 组合:TP 机内、PP/DP 机间、EP 管 MoE、ZeRO 管状态。
  7. 通信瓶颈三直觉:通信占比随批减小而升高、高通信维度放机内、优化方向是让计算掩盖通信。

习题

  1. 70B 模型,单机 8×80GB,训练时需要 PP 吗?画出 TP=8 + DP=K 的配置并算每卡显存。
  2. AllReduce 和 ReduceScatter+AllGather 的通信量差异在哪?为什么 ZeRO-2 用后者更省?
  3. 为什么张量并行不能跨机?用 NVLink 与 InfiniBand 带宽差一个数量级来分析。
  4. 全局批从 4M token 增到 16M token,学习率应该怎么调?给出依据。
  5. MoE 模型为什么必须用 EP?如果不做 EP,router 的 all-to-all 通信发生在哪里?

延伸阅读

  • Narayanan et al., Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM, 2021(3D 并行)
  • Rajbhandari et al., Zero: Memory Optimizations Toward Training Trillion Parameter Models, 2020
  • Huang et al., GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism, 2019
  • Narayanan et al., PipeDream: Generalized Pipeline Parallelism for DNN Training, 2019
  • Krizhevsky, One weird trick for parallelizing convolutional neural networks, 2014(学习率线性缩放)
  • Goyal et al., Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour, 2017(批大小-学习率缩放)

下一章预告

第 11 章从原理落到系统:PyTorch DDP/FSDP、DeepSpeed、Megatron-LM 的分工格局,NCCL 与网络拓扑,Checkpoint 与断点续训、弹性训练,以及千卡/万卡训练的 MFU、成本与扩展效率。