检查点 = 训练状态的完整快照,让千卡训练在故障(节点宕机 / OOM / 断电)后从最近一步续跑,而不是从头重来。必须保存: ① 模型权重;② 优化器状态——Adam 的
mt、
vt 一阶二阶动量与 FP32 主权重副本(只存权重无法无损续训,动量与学习率进度丢失会导致恢复后 loss 波动);③ 进度——epoch/step 计数与学习率调度器步数;④ 随机性——每 rank 的 RNG 状态(权重初始化之外还有 data shuffle);⑤ 数据游标——DataLoader 的分片边界。碎片保存(Sharded checkpoint): 大模型单文件慢写易坏(70B FP16 单文件 140 GB,分钟级落盘),HF safetensors 把权重切多分片 + index.json 索引,支持并行写、mmap 零拷贝读,且不用 pickle、无反序列化任意代码执行风险;ZeRO-3/FSDP 训练中参数本就分片,每 rank 只保存自己的分片
16Ψ/Nd,恢复时逐 rank 读回(或先 All-Gather 拼全量导出单文件)。异步保存: 同步保存会 stop-the-world(训练暂停等落盘),异步保存先把一致快照从 GPU 拷贝到 CPU 内存(需 copy-on-write / 版本戳防与后续更新互相踩),再交给后台线程/独立进程写盘,训练不中断。断点续训: 恢复 = 重建优化器状态 + 重置 epoch/step 与 RNG + 恢复 shuffle 顺序与数据切分,ZeRO-3 要求每个 rank 读回自己的分片。训练稳定性: 与保存联动——loss/梯度尖刺(gradient spike)时回滚到上一个“好检查点”(last-good)、降 LR 或跳过异常 batch;保存频率权衡: 太密则 IO 开销吃掉吞吐,太疏则一次故障损失大,常用时间/步数阈值 + 每 epoch 保存候选检查点。