首页优化地图方法索引基础概念
返回技术汇总表 ↗

M040 · 独立详解

流水线调度:GPipe、1F1B、交错与计算通信重叠

用两阶段、四个microbatch的时间表解释气泡与激活驻留,再定位交错、Zero Bubble和DualPipe各自优化的地方。

调度与并行通信与互联详解已编写
视频讲解待制作

这篇文章的小视频尚未制作;可以先阅读下方文字详解。

本页目录

01 · 分好了层,仍可能有很多空闲

假定模型分为两个流水阶段:阶段0产生激活,阶段1继续前向;反向则从阶段1把边界梯度传回阶段0。单个microbatch依次走完这些步骤,等待下游或上游结果时,其他设备可能闲着。这些空闲区间称为流水线气泡。

多microbatch给调度器提供可交错的工作,但要遵守依赖:本地反向需要本地前向保存的内容,上游反向还需要下游传来的梯度。一张漂亮时间表首先必须是可执行且训练语义正确的时间表。

02 · GPipe:先全部前向,再安排反向

以下为两阶段、四个microbatch A/B/C/D。每次阶段前向F或反向B都占1个时间单位;忽略通信、启动和参数更新。采用一个先前向、再按D到A反向的教学排程。

阶段 / 时槽0123456789
阶段0F-AF-BF-CF-D空空B-DB-CB-BB-A
阶段1空F-AF-BF-CF-DB-DB-CB-BB-A空

每阶段完成8份工作,整个窗口10单位,平均忙碌比例80%。阶段0在反向开始前保留了四份前向激活。实际保存量取决于模型与重计算策略,不是每份简单一样大;这个计数只看“前向完了、反向还没释放”的microbatch。

依据:GPipe · 原始论文 ↗

03 · 1F1B:交替前后向,主要改变激活驻留

常见同步式1F1B先预热,再在稳态交替做一份前向和一份已有microbatch的反向,最后排空剩余反向。1F和1B通常属于不同microbatch;不是要求刚前向的那份立刻反向。

阶段 / 时槽0123456789
阶段0F-AF-B空B-AF-CB-BF-DB-C空B-D
阶段1空F-AB-AF-BB-BF-CB-CF-DB-D空

这张表同样10单位完成,但阶段0最多保留两份已完成前向的激活,A反向后就能释放其所需内容。它展示了1F1B的重要收益:降低在途激活。通信时间、负载和实现不同,真实吞吐需另测,不能从名字断言1F1B一定更快或没有气泡。

本文讨论同一更新窗口内保持参数版本的同步式排程。PipeDream系列还有权重版本、更新方式不同的研究设计;不能把所有名为1F1B的实现都当作同一参数更新语义。

依据:PyTorch 2.14 · Pipeline Parallelism 与调度接口 ↗ · PipeDream · 原始论文(更新语义需与同步式排程区分) ↗

04 · 调整阶段数与microbatch,看等待和驻留

同一依赖模型:GPipe与1F1B的时间表

F=前向,B=反向,编号表示microbatch;每份计算占1单位,空白为等待。统计已完成前向且反向尚未释放的激活份数,不含算子内工作区;无通信、优化器或重计算成本。表格可横向滚动。

交互例子为等成本、零通信、单阶段不能同时执行两份计算的依赖模型。GPipe先全F再倒序B;1F1B使用随阶段位置变化的预热长度,再交替执行。它展示执行顺序与已保存激活的份数,不模拟CUDA、HCCL、真实激活字节或算子内重叠。

理想排程模型 · 不适用于任意不均衡阶段、交错或DualPipe配方
在等成本教学模型中:
p 个阶段,m 个 microbatch,每次 F/B 时间 τ
窗口总时间 = 2(m+p-1)τ
每阶段有效计算 = 2mτ
平均忙碌比例 = m/(m+p-1)
平均气泡比例 = (p-1)/(m+p-1)

固定每个microbatch大小、增加m,会提高这里的忙碌比例,但也增大一次更新的有效批量。若固定全局批量而把每批切得更小,τ与设备效率可能改变,不能直接拿这个公式预测收益。

05 · 阶段不均衡与通信,怎样改变时间线

若一个阶段每份工作要4 ms,另一个只要1 ms,快阶段仍会等待慢阶段。按相同层数切分也未必平衡:Embedding、输出投影、Attention长度与MoE路由都可能带来差异。应按实际计算、激活、参数容量和通信一起分配。

  • 前向边界传隐藏激活,反向边界传对应激活梯度;这不是DP参数梯度归约。
  • 只有后续操作不依赖该传输且资源允许,通信才有机会被计算隐藏。
  • 传输未完成前不能覆盖发送缓冲;接收端不能使用尚未完整到达的数据。
  • 训练完成窗口还要满足梯度归约、裁剪和优化器的边界,不能仅看最后一个B结束。

因此通信值得沿时间线单独阅读,但仍是系统执行线内的环节。计算通信重叠篇与MC²篇分别进一步解释运行时重叠和算子内融合。

06 · 交错流水:一张设备可以负责多个虚拟阶段

例如4个模型层段按顺序0→1→2→3,物理设备A负责0和2,B负责1和3。不同microbatch可在不同虚拟阶段间交错,给调度增加更多就绪机会。这不是模型层顺序改变,也不是复制四份完整模型。

代价是更细的排程、更多阶段边界与数据传递,以及更复杂的激活生命周期。相同设备上的两个阶段竞争计算资源,不能在时间表里假设它们总能同时执行。

框架可能对microbatch数量、虚拟阶段数和模型结构有整除或支持约束。交错是否减少实际气泡,要与不交错但相同工作量的基线比较。

依据:PyTorch 2.14 · Pipeline Parallelism 与调度接口 ↗ · Megatron Core · Parallelism Guide ↗

07 · Zero Bubble与DualPipe,额外利用了什么机会

方法族核心机会不能忽略的条件
Zero Bubble把反向中的输入梯度计算和权重梯度计算拆开,把可延后的工作填入等待区完整参数梯度最终仍要就绪;显存约束、各类工作成本与更新同步均影响结果。
DualPipe双向流水与适配的前后向计算通信重叠阶段布局、额外权重/激活、算子资源和通信配方需匹配。
交错1F1B同设备多个虚拟阶段增加排程粒度更多边界通信、缓存与调度约束。

对 Linear 的反向而言,输入梯度 dX 需要传给上游,权重梯度 dW 则用于本层最终更新。上游不一定立即需要 dW,所以可以探索先算 dX、后补 dW。但 dW 没有消失,依赖它的归约、裁剪、优化器仍需按正确顺序执行。

依据:Zero Bubble Pipeline Parallelism · 原始论文 ↗

DualPipe 原作者仓库描述双向排程和重叠,并要求实际应用提供适配模型的 overlapped_forward_backward。其比较表也列出了内存与参数布局代价。本文给出方法定位,具体双向时间线和部署实现应继续按原作者方案展开,不能把教学1F1B模拟器当作DualPipe实现。

依据:DeepSeek · DualPipe 原作者实现与排程说明 ↗

08 · 先验证排程依赖,再接训练框架

下方CPU脚本建立任务依赖:每个任务同时等待本设备前一个任务和上下游需要的结果,得到可执行的GPipe/1F1B时间表,并检查无重叠、每份反向都有前向、输出梯度沿阶段回传。它统计已保存激活的份数,不执行真实神经网络。

教学伪代码 / 示意 · 不代表真实通信接口
partition_model_into_stages()
choose_microbatch_count_and_loss_normalization()
for scheduled_task in valid_schedule:
    wait_for_required_activation_or_gradient()
    execute_local_forward_or_backward()
    send_ready_boundary_tensor()
    release_saved_activation_when_backward_finishes()
finish_required_gradient_sync_and_optimizer_step()

PyTorch的流水线模块列有GPipe、1F1B和交错等排程入口。NVIDIA环境可进一步检查Megatron的流水实现;昇腾可从MindSpeed特性清单进入对应方案。调度算法与后端的通信、图执行和模型支持都要匹配。

依据:PyTorch 2.14 · Pipeline Parallelism 与调度接口 ↗ · MindSpeed Core · 特性清单 ↗

09 · 验证与适用范围

  • 先固定数据、参数版本、Loss归一化与更新窗口,对比未流水化的梯度和更新结果。
  • 测真实激活峰值、重计算开销与阶段负载,不能只报告在途份数。
  • 查看每阶段时间线,包括通信、归约和优化器;区分预热、稳态与排空。
  • 同全局token预算比较每秒有效token和步骤时间;若改变了批量,另外评估收敛。
  • 明确示例面向训练。推理PP可流水多个独立请求,但没有这里的反向与参数更新。

已有模型需要跨卡承载、且有足够可排程工作时,流水调度更有价值。microbatch少、阶段不均衡或网络成本大时,可能出现大量等待。“零气泡”是特定算法与条件下的目标,不是所有设备和服务负载的普遍保证。

10 · 五个问题读懂一张时间表

  • 1F和1B是否必须属于同一个microbatch?
  • 两种教学排程总时间相同,为什么1F1B仍有价值?
  • 增加microbatch数时,比较是否还保持相同全局批量?
  • 为什么上游需要dX,却不一定立刻需要本层dW?
  • 某条通信在时间表中与计算重叠,怎样确认它不会读取被覆盖的缓冲?

流程位置与关联方法

这个方法可能出现在多个位置;计算线包含模型计算与算子实现,执行线包含运行时、内存和通信。

资料与核查范围

原理依据以原始论文和官方文档为主;算例与时间线是教学推导。文档核查日期:2026-10-10。引用 main / latest 文档时,实际接口以安装版本为准。

代码为接入片段或教学伪代码;本页没有声称完成 NVIDIA / 昇腾硬件实测。

← 返回总表中的 M040继续阅读:融合优化器与状态精度优化 →
AI Infra 知识库 · 总览 → 独立讲解网站更新 2026-10-08
搜索知识库

搜索方法与基础概念 · Esc 关闭