2. 分布式训练基础
当模型参数量从百万级增长到千亿级,单张 GPU 的显存和算力都无法承载完整训练任务。分布式训练的本质,是把「模型计算」和「训练数据」这两类负载拆分到多张加速卡上,再通过通信把结果重新拼合。理解数据并行、模型并行、流水线并行的区别与联系,是掌握 DeepSpeed 流水线调度机制的前提。
一、三种并行范式的核心原理
数据并行(Data Parallelism,DP)的思路最直观:每张卡持有一份完整的模型副本,但各自读取不同的数据分片。前向和反向计算完全在本地完成,只有在反向传播结束后,才通过 AllReduce 把各卡的梯度求平均,使所有副本保持一致。它的优点是实现简单、扩展性好;缺点是每张卡都要存一份完整模型、优化器状态和激活值,显存开销随模型规模线性增长。
模型并行(Model Parallelism,MP)则把模型本身切开。以张量并行(Tensor Parallelism,TP)为代表,它把单个权重矩阵按行或按列切分到不同设备上,每层计算都需要卡间通信来汇总部分结果。模型并行能突破单卡显存上限,但通信频繁、粒度细,对互联带宽要求极高,通常只在单机 NVLink 域内使用。
流水线并行(Pipeline Parallelism,PP)按层切分模型:第 1 段层放在 GPU0,第 2 段层放在 GPU1,依此类推。数据像流水线一样依次流过各段。为了不让后面的卡空等,会把一个 mini-batch 切成多个 micro-batch,让不同卡同时处理不同 micro-batch 的不同阶段。它通信量小(只在段边界传激活值),但会引入「气泡」(bubble)——流水线填充和排空阶段部分卡处于空闲。
二、方法流程:三种并行如何协同工作
真实的大模型训练很少只用一种并行方式,而是采用「3D 并行」组合:
- 先做流水线切分:把 Transformer 的 N 层按 stage 划分到不同机器组,跨机通信量最小。
- 再做张量切分:在每个 stage 内部,把注意力头和 FFN 权重按 TP 切到同机多卡,利用 NVLink 高带宽。
- 最后做数据并行:在流水线各 stage 之间复制多份,形成 DP 组,用 ZeRO 分片优化器状态降低显存。
DeepSpeed 的配置正是这种组合的体现:
{
"train_batch_size": 1024,
"train_micro_batch_size_per_gpu": 8,
"gradient_accumulation_steps": 4,
"zero_optimization": {
"stage": 2,
"offload_optimizer": { "device": "cpu" }
},
"pipeline": {
"pipe_parallel_size": 4,
"model_parallel_size": 2
}
}
其中 pipe_parallel_size=4 表示流水线切 4 段,model_parallel_size=2 表示每段内张量切 2 份,剩余维度由数据并行补足。总卡数 = PP × TP × DP。
三、案例场景:一个 175B 模型的切分决策
假设有 64 张 A100(80GB),要训练 175B 参数模型。单卡放不下完整模型,必须组合切分:
| 并行维度 | 切分大小 | 作用 | 通信开销 |
|---|---|---|---|
| 流水线 PP | 8 段 | 跨机分摊层显存 | 低,段边界传激活 |
| 张量 TP | 4 路 | 机内切权重矩阵 | 高,每层 AllReduce |
| 数据 DP | 2 组 | 提升吞吐、梯度平均 | 中,每步 AllReduce |
8 × 4 × 2 = 64,正好用满所有卡。这种配置下,TP 限制在单机 4 卡内以利用 NVLink,PP 跨机走 InfiniBand,DP 组间同步梯度。DeepSpeed 的流水线调度器会进一步安排 micro-batch 的注入顺序,减少气泡占比。
四、误区与复盘
误区一:并行度越高越好。TP 超过单机卡数会退化为跨机通信,带宽骤降;PP 段数过多会让气泡占比上升,因为填充和排空时间随段数线性增长。
复盘要点:选择并行策略时,先看模型能否单卡放下——能则优先 DP;放不下但单机能放下则用 TP;跨机则引入 PP。三者不是互斥,而是按「通信代价从低到高」逐层叠加。
- DP 解决「数据吞吐」,不解决「模型太大」。
- TP 解决「单层太大」,代价是高频通信。
- PP 解决「层数太多」,代价是流水线气泡。
- DeepSpeed 的价值在于把三者统一调度,并用 ZeRO 进一步压缩 DP 侧的显存冗余。
理解了这三种并行的切分对象、通信模式和显存收益,才能看懂后续流水线调度中 micro-batch、气泡和 1F1B 策略的设计动机。