不同层排成流水线
E06/b0 · 先走第一个微批次
| 设备/阶段 | 时刻 1 | 时刻 2 | 时刻 3 | 时刻 4 | 时刻 5 |
|---|---|---|---|---|---|
| GPU 0 · 层组 1 | μ1 | 空闲 | 空闲 | 空闲 | 空闲 |
| GPU 1 · 层组 2 | 空闲 | μ1 | 空闲 | 空闲 | 空闲 |
| GPU 2 · 层组 3 | 空闲 | 空闲 | μ1 | 空闲 | 空闲 |
| GPU 3 · 层组 4 | 空闲 | 空闲 | 空闲 | μ1 | 空闲 |
这里只展开前向时间线;完整训练还需安排反向与激活保存。
这里四张卡真的各自负责不同的层了。为了和刚才分片数据并行区分,我们把卡上的标签改成阶段一、二、三、四。先只送一小份数据进去,这种小份叫微批次。第一张卡处理它的时候,后面三张还没有输入,只能等。然后它往第二张卡移动,前面那张如果没有新工作,也会空下来。图上浅色的格子是空闲时间,也就是流水线里的空泡。空闲并不表示设备能力不足,而是依赖关系暂时没有给它工作。添加设备如果没有改变这些等待关系,就不一定能按比例缩短时间。
教师备课:指图与模拟问答
指图与推进 · 不朗读教师指向当前高亮对象,随后推进。
E06/b1 · 第二个跟上
| 设备/阶段 | 时刻 1 | 时刻 2 | 时刻 3 | 时刻 4 | 时刻 5 |
|---|---|---|---|---|---|
| GPU 0 · 层组 1 | μ1 | μ2 | 空闲 | 空闲 | 空闲 |
| GPU 1 · 层组 2 | 空闲 | μ1 | μ2 | 空闲 | 空闲 |
| GPU 2 · 层组 3 | 空闲 | 空闲 | μ1 | μ2 | 空闲 |
| GPU 3 · 层组 4 | 空闲 | 空闲 | 空闲 | μ1 | μ2 |
这里只展开前向时间线;完整训练还需安排反向与激活保存。
现在让第二个微批次跟进。第一份走到第二阶段,第二份就在第一阶段计算,设备开始同时有活可做。持续送入更多微批次,能提高利用率,但开始的填充、结束的排空,以及最慢阶段的等待仍然存在。这里为了看清因果,只画前向;真正训练还要安排反向和中间激活。Megatron 处理这类大模型并行组织,NCCL 提供设备之间的集合通信。记住它们各自负责哪一层工作,比记住缩写更有用。多卡让大任务有机会执行,下一步我们看一张卡内部:为什么同样的注意力数学计算,还能有更有效率的执行方法?
教师备课:指图与模拟问答
指图与推进 · 不朗读教师指向当前高亮对象,随后推进。
补充推导、边界与来源
流水线并行(PP)把连续层分配给不同设备。一个微批次经过第一阶段,才能进入第二阶段;在流水线刚启动时,下游设备没有可处理的输入,因此空闲。第二个微批次进入第一阶段时,第一个可以在第二阶段运行,从而形成重叠。
微批次是一个训练批次里的更小份数据。完整训练还要安排反向计算、保留或重算激活、汇总多个微批次的梯度。图中的前向时序用于辨认填充和排空,不是完整最优训练调度。GPipe、1F1B 等策略以不同方式安排前向和反向;阶段耗时不均衡也会造成等待。TP、PP 与数据并行可组合,但组合后仍须核对设备分组及每类通信。
本页证据与条件
A21;A23