返回课堂

完整深入材料 · 保留原页与全部停点。回到相关主讲

长期分片保存,轮到一层再临时取齐

N47/b0 · 分开长期保存责任

GPU 0数据 A → 全部层L₁ → Lₖ → Lₙ所属 θ0长期状态:32 GBGPU 1数据 B → 全部层L₁ → Lₖ → Lₙ所属 θ1长期状态:32 GBGPU 2数据 C → 全部层L₁ → Lₖ → Lₙ所属 θ2长期状态:32 GBGPU 3数据 D → 全部层L₁ → Lₖ → Lₙ所属 θ3长期状态:32 GB实线框:长期保存责任;每卡数据仍走全部层。32 GB / 卡为持久小计,非运行峰值
分开长期保存责任

现在把原本重复的持久状态分成四片,每张卡负责一片。在全部相关状态都分片的教学设定下,刚才一百二十八GB的小计可以分到每卡三十二GB。请同时看上方的数据:数据A还是要走完整模型,所以保存责任变少,并不意味着它只需做四分之一层的计算。

进一步解释

图中一色 θ 代表本卡负责的参数片,以及与该片对应的梯度、主权重和 m/v 保存责任;32GB是这些持久状态的合计,不能只按工作权重计算。

教师备课:指图与模拟问答

指图与推进 · 不朗读先对照四种颜色的所属参数片与“长期状态32GB”,再指上方各卡仍走全部层;θ表示参数分片,不表示只负责一层。

N47/b1 · 当前层临时取齐

GPU 0数据 A → 全部层L₁ → Lₖ → Lₙ所属 θ0长期状态:32 GB当前层 Lₖ 完整视图GPU 1数据 B → 全部层L₁ → Lₖ → Lₙ所属 θ1长期状态:32 GB当前层 Lₖ 完整视图GPU 2数据 C → 全部层L₁ → Lₖ → Lₙ所属 θ2长期状态:32 GB当前层 Lₖ 完整视图GPU 3数据 D → 全部层L₁ → Lₖ → Lₙ所属 θ3长期状态:32 GB当前层 Lₖ 完整视图all-gather:从各卡取齐当前层所需参数32 GB / 卡为持久小计,非运行峰值
当前层临时取齐

我们停在当前这一层。每张卡只有其中一部分参数,于是在计算之前把缺少的部分从其他卡取来,临时形成当前层的完整参数视图。这个汇集动作叫all-gather。这里有两个不同对象:实线框中是本卡长期负责的分片,虚线框中是眼前计算临时需要的整层参数。它们不能合并成一句“每卡只占三十二GB”。完整层的临时视图用来完成眼前计算,长期分片则决定谁负责保管和更新。

教师备课:指图与模拟问答

指图与推进 · 不朗读沿all-gather连接看到各卡虚线当前层视图。

N47/b2 · 算完释放再向后走

GPU 0数据 A → 全部层L₁ → Lₖ → Lₙ所属 θ0长期状态:32 GB本卡输入 → Lₖ 输出临时视图释放层指针 → Lₖ₊₁GPU 1数据 B → 全部层L₁ → Lₖ → Lₙ所属 θ1长期状态:32 GB本卡输入 → Lₖ 输出临时视图释放层指针 → Lₖ₊₁GPU 2数据 C → 全部层L₁ → Lₖ → Lₙ所属 θ2长期状态:32 GB本卡输入 → Lₖ 输出临时视图释放层指针 → Lₖ₊₁GPU 3数据 D → 全部层L₁ → Lₖ → Lₙ所属 θ3长期状态:32 GB本卡输入 → Lₖ 输出临时视图释放层指针 → Lₖ₊₁释放整层临时视图,保留所属片;继续下一层。32 GB / 卡为持久小计,非运行峰值
算完释放再向后走

这一层计算完,可以释放示意中的临时完整视图,保留自己负责的片;轮到下一层再安排取得所需参数。这就是ZeRO全分片一类方法的重要思路,实际实现会调整预取、驻留和通信重叠。我们省掉了长期重复保存,也增加了通信安排。前向这样走得通,训练还没有结束:四张卡的梯度怎样共同更新这四片参数?

教师备课:指图与模拟问答

指图与推进 · 不朗读临时视图释放,层指针移到下一层;所属片不消失。

补充推导、边界与来源

在本课四卡混合精度账本下,ZeRO-1 仅分片优化器相关状态,每卡 $16+16+96/4=56$ GB;ZeRO-2 再分片梯度,$16+16/4+96/4=44$ GB;ZeRO-3 再分片工作权重,$128/4=32$ GB。上述均是持久状态小计。

实线框保存本卡长期负责的片;当前层计算之前,通过 all-gather 暂时取得该层完整参数视图,虚线框只代表这一层而非整个模型。本卡数据仍走全部层。当前层计算后可释放临时完整视图,再为下一层安排参数。真实 ZeRO/FSDP 实现会选择预取、驻留和通信重叠策略;临时视图、激活与缓冲使运行峰值高于32GB。

七步训练及ZeRO1/2/3完整账本;原展开页。

本页证据与条件

8B / 四卡混合精度 Adam 教学构造;ZeRO 机制,非硬件实测

进入主题正文