7.7 检查点管理与容错
大规模训练任务往往持续数周甚至数月,硬件故障几乎不可避免。稳健的检查点管理和容错机制是确保训练能够成功完成的工程基石。到这里,前面几节已经留下了一串必须落盘的东西:7.2 分片后的优化器状态、7.6.2 那份 FP32 主权重副本,以及 7.3 与 7.4 决定的它们究竟散落在哪几张卡上。容错的难处正在于把这些原样拼回来——哪怕重启之后的 GPU 数量已经和崩溃前不一样了。
7.7.1 检查点的内容与策略
一个完整的训练检查点应保存所有恢复训练所需的状态:模型参数、优化器状态(一阶/二阶矩)、学习率调度器状态、当前步数、随机数生成器状态,以及数据加载器的位置(确保断点续训时不重复使用已见数据)。
检查点保存频率是一个权衡:太频繁会导致大量 I/O 开销(保存一个 70B 模型的完整检查点涉及数百 GB 的写入),太稀少则意味着故障后损失更多的训练进度。常见做法是每 500~2000 步保存一次。
现代大规模训练中常用的优化策略包括:
分片检查点(Sharded Checkpoints):在分布式训练中,不是让某个 GPU 保存整个模型,而是让每张 GPU 保存自己负责的参数切片,大幅减少单 GPU 的 I/O 负载。恢复时各 GPU 并行读取自己的分片,加速重启。
异步保存(Asynchronous Checkpointing):检查点写入由后台线程或另一个进程完成,不阻塞训练循环。这允许 GPU 在 I/O 进行时继续计算,显著降低检查点保存的性能开销。
7.7.2 检查点平均
检查点平均(Checkpoint Averaging)是一种有时能提升最终模型性能的技巧。在训练后期,取若干相邻检查点的参数权重求平均,可能获得比任何单个检查点更平滑的解;但收益强依赖任务、指标、训练阶段和检查点间距,不能把某个 benchmark 上的数值直接外推为通用 LLM 收益。
其原理与模型集成类似:不同检查点对应损失曲面上略有不同的位置,取平均后的模型更接近损失盆地的中心,泛化性能更好。
7.7.3 容错机制
大规模集群上的故障类型包括 GPU 硬件错误、网络中断、节点宕机等。常见的容错策略包括:
自动重启:检测到节点失败后自动从最近的检查点恢复训练
弹性重启:支持节点失败或成员变化时由调度器重启 worker,并从最近检查点恢复
拓扑可迁移检查点:当 GPU 数量、ZeRO/FSDP 分片或 TP/PP/DP 拓扑变化时,需要能重分片模型、优化器、随机数和数据加载器状态;这比普通弹性重启更复杂
冗余存储:检查点保存到分布式文件系统或对象存储,避免单点故障
框架如 DeepSpeed、Megatron-LM 和 Ray Train 都提供了不同程度的容错支持。
最后更新于
