Documentation Index
Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt
Use this file to discover all available pages before exploring further.
概念定义
流水线并行是一种模型并行技术,将深度学习模型的不同层分配到不同的计算设备上,形成计算流水线,通过微批次(micro-batch)机制实现并行处理。
详细解释
流水线并行的核心思想是将模型垂直切分成多个阶段(stage),每个阶段包含若干连续的层,分配到不同的GPU上。训练时,将一个批次数据进一步切分成多个微批次,这些微批次像流水线一样依次通过各个阶段进行处理。
与张量并行需要频繁通信不同,流水线并行只在阶段边界传递激活值,通信开销相对较小。但流水线并行面临的主要挑战是”气泡”(bubble)问题——当某些设备在等待前置阶段的输出时会处于空闲状态。2025年的技术发展通过优化调度策略大幅降低了气泡开销。
工作原理
基本流水线模型
阶段1 (GPU0): [Layer 1-6] →
阶段2 (GPU1): [Layer 7-12] →
阶段3 (GPU2): [Layer 13-18] →
阶段4 (GPU3): [Layer 19-24]
主要调度策略
1. GPipe调度
前向传播所有微批次 → 反向传播所有微批次
优点:实现简单
缺点:激活值内存占用大,气泡较多
2. 1F1B调度(PipeDream)
每完成一个前向立即执行对应的反向
优点:内存效率高,可及时释放激活值
缺点:仍有初始填充和最终排空的气泡
3. 交错调度(Interleaved 1F1B)
# 虚拟流水线阶段
virtual_stages = 2 # 每个GPU持有2个非连续阶段
# GPU0: [Layer 1-3, Layer 13-15]
# GPU1: [Layer 4-6, Layer 16-18]
# 减少气泡大小,提高GPU利用率
2025年最新进展
DualPipe(双向流水线)
• 双向调度:PP/2-1 (&+-3)
• 减少空闲时间,平衡内存使用
• 兼容PyTorch 2.0+
HelixPipe(螺旋流水线)
• 注意力并行分区
• 两重FILO微批次调度
• 支持超长序列训练
实际应用
PyTorch原生实现
from torch.distributed.pipelining import pipeline
# 自动划分模型
pipe = pipeline(
module=model,
balance=[4, 4, 4, 4], # 每个阶段的层数
devices=[0, 1, 2, 3],
chunks=8, # 微批次数量
)
# 使用1F1B调度训练
pipe.train()
output = pipe(input_data)
Megatron-LM虚拟流水线
# 启用虚拟流水线阶段
model = MegatronModel(
pipeline_model_parallel_size=4,
num_layers_per_virtual_pipeline_stage=3,
# 总层数需要能被虚拟阶段大小整除
)
气泡率计算
气泡率 = 气泡时间 / 总运行时间
优化目标:气泡率 < 5%
影响因素:
- 微批次数量(越多越好)
- 流水线深度(越浅越好)
- 阶段负载均衡
内存优化技术
- 激活重计算:选择性重算部分激活值
- 激活卸载:将暂时不用的激活值移到CPU
- 混合精度:使用FP16/BF16减少内存占用
- 分块MLP:将大型MLP层分块处理
相关概念
延伸阅读