1. 课程导入
当你把模型参数从十亿级推向百亿、千亿级时,单张GPU的显存和算力很快会成为瓶颈。数据并行能扩展吞吐,却无法降低单卡显存占用;张量并行能切分单层计算,却带来高频通信开销。流水线并行(Pipeline Parallelism)提供了一条折中路径:按层切分模型,把不同层放到不同设备上,让多个微批次像工厂流水线一样重叠执行,从而在显存、通信与利用率之间取得平衡。DeepSpeed作为微软开源的大规模训练引擎,其流水线并行调度机制正是本课程的核心。
一、学习目标
本课程不是泛泛介绍“什么是流水线并行”,而是聚焦DeepSpeed在真实训练中的调度行为与效率优化手段。完成课程后,你应当能够:
- 理解流水线并行的基本切分方式、微批次(micro-batch)概念,以及气泡(bubble)产生的根本原因。
- 掌握DeepSpeed中
PipelineModule、partition_method、num_stages等关键配置的含义与组合效果。 - 区分1F1B、交错式1F1B、PipeDream-Flush等调度策略的差异,并能判断不同策略适用的场景。
- 能够阅读DeepSpeed流水线训练日志,定位气泡比例过高、显存不均、通信等待等典型问题。
- 掌握梯度累积、微批次数量、重计算(activation checkpointing)与流水线深度的联合调优方法。
二、DeepSpeed流水线并行概述
DeepSpeed的流水线并行建立在PyTorch模块切分之上。用户通过PipelineModule包装模型,DeepSpeed会按照指定的切分策略把层分配到不同stage,每个stage运行在一个或多个GPU上。训练时,一个全局batch被拆成若干micro-batch,依次注入流水线。前向阶段,micro-batch从stage 0流向最后一个stage;反向阶段,梯度从最后一个stage回传。理想情况下,前向与反向可以重叠,设备不空闲。
但现实并不理想。流水线启动和排空阶段,部分stage必然处于等待状态,这就是气泡。气泡比例近似为(p-1)/(m+p-1),其中p为流水线stage数,m为micro-batch数量。这个公式揭示了一个关键结论:增加micro-batch数量可以稀释气泡,但会带来显存压力;增加stage数会放大气泡,却可能降低单卡显存。调度机制的价值,正是在这些矛盾中寻找更优解。
三、整体课程框架
本课程共30章,按照“原理—机制—调优—实战”的递进结构组织。前段建立概念基础,中段深入DeepSpeed调度源码与配置,后段聚焦效率优化与故障排查。你可以把课程看作一条从“看懂流水线”到“调好流水线”的路径。
| 模块 | 章节范围 | 核心内容 |
|---|---|---|
| 基础概念 | 第1–5章 | 流水线并行原理、气泡公式、微批次、stage切分、与数据/张量并行的关系 |
| DeepSpeed机制 | 第6–12章 | PipelineModule、1F1B调度、交错式调度、梯度累积、通信原语 |
| 效率优化 | 第13–22章 | 气泡压缩、显存均衡、重计算、micro-batch调参、通信重叠、负载均衡 |
| 实战与排障 | 第23–30章 | 日志分析、常见报错、性能剖析、多机多卡配置、案例复盘 |
四、一个典型场景:为什么需要流水线并行
假设你要训练一个130亿参数的模型,使用8张A100 40GB。纯数据并行下,每张卡都要保存完整模型副本、优化器状态和梯度,显存需求远超40GB。张量并行可以把单层切到多卡,但每层都要做All-Reduce,通信频繁且对带宽敏感。流水线并行则把模型按层切成4个stage,每个stage约3.25亿参数,单卡显存压力显著下降。代价是引入气泡和stage间点对点通信。
# DeepSpeed 流水线并行典型配置片段
train_batch_size: 64
train_micro_batch_size_per_gpu: 4
gradient_accumulation_steps: 4
zero_optimization:
stage: 1
pipeline:
pipe_partition_method: "uniform"
num_stages: 4
activation_checkpointing: true
这段配置中,train_batch_size=64,每卡micro-batch为4,梯度累积4步,因此全局micro-batch数量为16。若stage数为4,气泡比例约为(4-1)/(16+4-1)=15.8%。如果显存允许,把micro-batch提高到8,气泡比例会降到约3/23=13%。这就是调参的直观影响。
五、常见误区与复盘
- 误区一:stage越多越好。增加stage会放大气泡,且stage间通信次数增加。只有在单卡显存确实无法容纳时才值得增加stage。
- 误区二:micro-batch越大越好。micro-batch增大会提高显存峰值,可能触发OOM;同时会改变梯度累积的等效batch size,影响收敛。
- 误区三:只看吞吐不看气泡。吞吐提升可能来自更大的batch,而非调度优化。必须同时观察气泡占比和单步有效计算时间。
- 误区四:忽略重计算与流水线的交互。activation checkpointing会降低显存,但增加前向计算量,可能改变流水线各stage的耗时均衡。