目的:提升EP A2A的本身效率,把forward和backward的部分层拆到不同stream上去。DeepSeek用Dualpipe来创造overlap机会,然后megatron core内是用1F1B之间的调度来做batch之间forward和backward之间的EP A2A通信与计算overlap。
0 理论
3 代码
3.1 combined_forward_backward_step
会把相邻的两个micro-batch的前向和另一个反向对齐在同一时间窗口执行,然后用combined schedule plan把MoE的A2A放到通信stream上去(而不是之前的default stream)。
def combined_forward_backward_step(
...
forward()
backward()
forward post process()
backward post process()
):主要是backward内的run会走到TransformerModelChunkSchedulePlan.run(...),在层级维度交错执行。
type(f_schedule_plan or b_schedule_plan).run(
f_schedule_plan,
b_schedule_plan,
b_grad=b_grad,
pre_forward=pre_forward,
pre_backward=pre_backward,
post_forward=post_forward,
post_backward=post_backward,
)