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

M042 · 独立详解

异步检查点与故障恢复:训练继续跑,快照仍要一致

把状态冻结、搬运、写入和提交拆开理解;用一份缓冲的时间线看重叠、排队与真正可恢复的时刻。

内存与数据搬运调度与并行详解已编写
视频讲解待制作

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

本页目录

01 · 保存更快,要以可恢复训练为目标

训练检查点是某个明确边界的状态快照,用于故障后继续训练。同步保存让训练等待全部写入;异步保存把部分工作移到后台,与后续训练重叠。它不减少训练本身的数学计算,主要影响长期完成工作的有效时间。

这里的检查点保存不同于M037激活checkpoint:后者在同一步里重算激活省显存,本篇把可恢复状态写到存储。

依据:PyTorch · 异步分布式检查点教程 ↗ · PyTorch · Distributed Checkpoint接口与兼容范围 ↗

02 · 只保存模型权重,为什么不能完整续训

对象恢复时的作用
模型参数与buffer恢复当前模型,而非初始化版本。
优化器moment、step及分片信息继续原更新历史,重置moment通常会改变训练。
scheduler、AMP scaler等延续学习率与精度配方。
随机状态、数据/采样位置、训练进度尽量续接同一数据与随机过程,具体按数据流水合同保存。
配置、版本与检查点元数据解释权重布局、精度、分片和兼容范围。

完成一次optimizer更新并处理配套状态后,通常容易定义一致边界。若在梯度累积中间保存,还需包含未完成梯度、microbatch进度等;不能加载模型后从整批起点重跑,却声称与原过程完全一致。

精确逐位恢复还取决于确定性算子、硬件、拓扑和数据加载过程。保存更多状态是必要准备,不能保证跨环境位级相同。

依据:PyTorch · Distributed Checkpoint接口与兼容范围 ↗ · PyTorch · DDP 执行机制(main) ↗

03 · state_dict返回,不代表已经得到独立快照

某些状态字典中的Tensor仍引用训练正在更新的底层存储。后台线程如果直接持有这些引用,可能写出t步参数与t+1步moment的混合状态。快照一致性必须由安全边界、独立副本或相应staging机制保证。

教学示意 · 不代表硬件实测
明确训练边界t
取得这一边界的模型/优化器/数据等状态
复制到独立快照缓冲,保证复制期间源不被改坏
确认staging已得到稳定快照
训练才允许执行会冲突的后续更新
后台把快照写入存储,完成后再释放缓冲

异步staging可以有更精细的事件与依赖,但不能把“函数已返回”当成所有源数据都可覆盖。PyTorch DCP有不同stager及完成信号,具体返回对象、默认行为和实验接口需要按版本核对。

依据:PyTorch · 异步分布式检查点教程 ↗ · PyTorch · Distributed Checkpoint接口与兼容范围 ↗

04 · 搬到缓冲与写存储,是两个完成时刻

自设4个训练step,每步10 ms,每2步保存一次;稳定快照复制2 ms,后台写入12 ms,一份缓冲。同步总时间为40+2×(2+12)=68 ms。异步第一份复制在20–22,写入22–34;训练第3/4步在22–42,第二份复制42–44、写入44–56。

训练计算在44 ms结束,但最后一份检查点直到56 ms才写完。若此时退出或回收缓冲,不能声称它已经可恢复。最终全部完成56 ms;异步没有把最后一次写入成本凭空消掉。

训练结束时,最后一份快照写完了吗?

4步训练,每步10 ms;快照复制2 ms,一份独立缓冲。下一次复制先等上次写完;写入结束代表本教学模型的完成合同,不模拟真实存储持久性、多rank提交或竞争。

本演示一份缓冲只允许一个待写快照,下一次staging前先等上次写完。真实实现可增加缓冲、跳过中间保存或限流,但要明确容量和恢复点取舍。

05 · 后台变慢,会积压还是反过来阻塞训练

若后台每次40 ms,上例第一份写到62 ms;训练第4步42 ms已结束,却要等缓冲空闲到62,再复制到64、写到104。训练完成时刻变为64 ms,后台最终完成104 ms。异步仍可覆盖一些写入,但不能持续制造无限快照。

原始状态快照每rank若为8 GiB,两份独立快照就约16 GiB缓冲,再加序列化与训练进程已有CPU状态。pinned内存可能改善设备搬运,但驻留缓冲、共享主机带宽和存储竞争也有代价。

  • 限流:限制待保存数量,必要时等待或按明确策略跳过。
  • 缓冲:源复制完成前不能更新冲突区域,写入结束前不能覆盖快照槽。
  • 多rank:同一步边界、布局元数据和通信顺序配套。
  • 失败:后台异常要被检查,不能只留下一个“任务已提交”的日志。

依据:PyTorch · 异步分布式检查点教程 ↗

06 · 写完几个分片,还不是可恢复的完整版本

分布式保存常由多个rank分别写分片。只有必要分片、元数据和提交步骤都成功,才能把这个版本作为有效恢复点。不能仅根据目录存在或某一个rank的future完成,判断整个检查点已提交。

教学示意 · 不代表硬件实测
以新版本/临时目标写快照
校验必要分片、元数据与完成状态
按存储/框架合同提交可恢复版本
恢复时选择已提交且兼容的版本
加载参数与optimizer等完整状态
核对step、布局、数据进度后继续

本地rename、对象存储和框架的完成协议不同,不承诺一个通用rename就保证所有存储上的原子性与持久性。DCP支持某些分片布局变化的加载,具体模型状态、优化器映射和版本仍需验证;改变卡数也不保证相同随机数据顺序。

依据:PyTorch · Distributed Checkpoint接口与兼容范围 ↗

07 · 保存频率:阻塞更少,故障可能要重做更多

过于频繁增加快照、写入与缓冲压力;间隔太大则故障后回退更多训练。应按实际保存成本、故障情况、重启时间与质量里程碑选择,异步不意味着可以无限频繁保存。

一个教学近似:每隔τ分钟有效训练保存一次,暴露保存成本为C分钟,故障平均间隔F分钟,并假设故障在保存间隔内均匀出现且开销较小。保存损失比例约C/τ,故障重做约τ/(2F);再加重启成本。它忽略后台提交滞后和竞争,只解释取舍,不能直接给生产最优频率。

异步检查点的最新快照未提交时,实际可恢复点可能比最近staging更旧。测重做量应以有效已提交版本为准,而不是按提交后台任务的时刻。

08 · 小脚本验证快照与恢复,不只模拟时间

下载脚本训练一个随机驱动的标量momentum模型,保存独立参数/状态/随机与数据进度,恢复后对照连续运行;同时展示浅引用污染快照和漏掉优化器状态的反例。教学提交模型拒绝不完整分片,时间线检查缓冲不得提前复用。不执行真实磁盘写入或DCP。

教学示意 · 不代表硬件实测
先做小作业的保存→恢复→继续结果对照
注入未完成写入、后台失败与缺失分片
验证恢复只选择有效已提交版本
再测staging阻塞、后台吞吐、峰值CPU与训练step
长跑记录有效训练时间、失败回退和恢复耗时
# 最后退出前等待所有必要提交并处理异常。

依据:PyTorch · 异步分布式检查点教程 ↗ · PyTorch · Distributed Checkpoint接口与兼容范围 ↗

09 · 从完整恢复路径验收

  • 一致性:同一边界参数/状态,恢复后Loss轨迹和数据进度。
  • 时间:staging、实际写入、提交、暴露阻塞和恢复总耗时。
  • 资源:CPU/pinned缓冲、设备复制、网络与存储竞争。
  • 可靠性:后台错误、半成品、退出、旧版本和拓扑变化。

GPU/NPU设备快照和CPU写入都需要各自的完成依赖。框架、分片形式和存储后端决定实现,不能把单进程CPU复制示例当成已验证的多机方案。

依据:vLLM Ascend · 支持功能矩阵(main) ↗

  • state_dict中的Tensor仍共享存储时,为什么后台保存会混入下一步?
  • 训练计算结束与最后快照可恢复,为何不是同一个时刻?
  • 异步写入很慢时,增加缓冲解决了什么,又带来什么?

流程位置与关联方法

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

资料与核查范围

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

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

← 返回总表中的 M042继续阅读:数据与训练策略:面向目标质量 →
AI Infra 知识库 · 总览 → 独立讲解网站更新 2026-10-08
搜索知识库

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