将模型按层划分到不同设备形成流水线的分布式训练技术
阶段1 (GPU0): [Layer 1-6] → 阶段2 (GPU1): [Layer 7-12] → 阶段3 (GPU2): [Layer 13-18] → 阶段4 (GPU3): [Layer 19-24]
前向传播所有微批次 → 反向传播所有微批次 优点:实现简单 缺点:激活值内存占用大,气泡较多
每完成一个前向立即执行对应的反向 优点:内存效率高,可及时释放激活值 缺点:仍有初始填充和最终排空的气泡
# 虚拟流水线阶段 virtual_stages = 2 # 每个GPU持有2个非连续阶段 # GPU0: [Layer 1-3, Layer 13-15] # GPU1: [Layer 4-6, Layer 16-18] # 减少气泡大小,提高GPU利用率
• 双向调度:PP/2-1 (&+-3) • 减少空闲时间,平衡内存使用 • 兼容PyTorch 2.0+
• 注意力并行分区 • 两重FILO微批次调度 • 支持超长序列训练
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)
# 启用虚拟流水线阶段 model = MegatronModel( pipeline_model_parallel_size=4, num_layers_per_virtual_pipeline_stage=3, # 总层数需要能被虚拟阶段大小整除 )
气泡率 = 气泡时间 / 总运行时间 优化目标:气泡率 < 5% 影响因素: - 微批次数量(越多越好) - 流水线深度(越浅越好) - 阶段负载均衡