第 10 章 分布式训练原理
第 10 章 分布式训练原理
学习目标
- 掌握四种并行策略:数据、张量、流水、专家并行的原理与适用边界;
- 理解 AllReduce、AllGather、ReduceScatter 等集合通信原语;
- 理解同步训练与异步训练的取舍;
- 理解全局批大小、梯度累积与学习率缩放的关系;
- 理解 LLM 训练中并行组合(3D/4D/5D)与通信瓶颈。
10.1 为什么必须分布式
第 4 章的账:70B 模型 BF16 权重 140GB,单卡放不下;1 万亿 token 训练总 FLOPs 约 ,单张 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 为例,权重 按列切分,每卡算 的片段,再 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 交错调度(现代标准,气泡率降到 ~, 为 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 × 梯度累积 × 数据并行度。当全局批变大时,学习率要跟着调,否则收敛不稳:
经验法则:批翻 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 章):
- 通信占比 = 通信量 / 计算量。小 batch 时计算少,通信占比高——批太小,并行越多越慢;
- 机内 NVLink(900GB/s 级)比机间 InfiniBand(400Gbps 级)快一个量级——把高通信的维度(TP)放机内,低通信的维度(PP/DP)放机间;
- 一切优化(通信压缩、梯度裁剪、重叠)都围绕「让计算掩盖通信」展开。
本章要点回顾
- 分布式解决两件事:显存放不下、算力算不完;四种并行是基本构件。
- DP 管吞吐但模型要放得下单卡;TP 管单算子切分、只适合机内;PP 按层切、跨机友好但有气泡;EP 是 MoE 专属、all-to-all 通信贵。
- 集合通信(AllReduce/AllGather/ReduceScatter/All-to-All)是分布式的总线,性能上限由网络决定。
- LLM 用同步训练;异步因陈旧梯度基本弃用;掉队靠软同步与容错解决。
- 全局批变大要同步调学习率(平方根缩放);批大小迁移是千卡复现的头号隐性成本。
- 真实训练是 3D/4D 组合:TP 机内、PP/DP 机间、EP 管 MoE、ZeRO 管状态。
- 通信瓶颈三直觉:通信占比随批减小而升高、高通信维度放机内、优化方向是让计算掩盖通信。
习题
- 70B 模型,单机 8×80GB,训练时需要 PP 吗?画出 TP=8 + DP=K 的配置并算每卡显存。
- AllReduce 和 ReduceScatter+AllGather 的通信量差异在哪?为什么 ZeRO-2 用后者更省?
- 为什么张量并行不能跨机?用 NVLink 与 InfiniBand 带宽差一个数量级来分析。
- 全局批从 4M token 增到 16M token,学习率应该怎么调?给出依据。
- 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、成本与扩展效率。