上一篇 下一篇 分享链接 返回 返回顶部

大模型训练检查点怎么备份?LLaMA-3/GPT级模型如何制定频率与恢复演练方案

发布人:Minchunlin 发布时间:2026-09-30 20:27 阅读量:5
大模型训练检查点怎么备份?LLaMA-3/GPT级模型如何制定频率与恢复演练方案

大模型训练中,检查点“文件还在”不等于“训练可以恢复”。如果只保存模型权重,通常只能恢复推理或重新开始部分训练,不能保证优化器状态、学习率进度、随机数状态和数据读取位置连续。对 LLaMA-3、GPT 级别的预训练或全参数微调任务,检查点方案应同时回答五个问题:备份哪些状态、多久保存一次、如何保证分布式一致、保留多久,以及恢复后怎样验收。

检查点频率也不是由 GPU 数量直接决定的。大模型训练需要多少 GPU、LLaMA-3/GPT 级模型采用怎样的算力配置,主要取决于显存是否能容纳模型与并行策略、目标训练速度和通信条件;备份频率则取决于可接受的训练回退量、保存耗时和存储预算。两者需要联动测试,但不能用“GPU 越多就越应该频繁备份”代替实际验收。

先定义恢复目标:允许丢多少训练进度

制定策略前,先确定两个指标:

  • RPO(恢复点目标):故障发生后,最多允许丢失多少训练进度,可以按训练步数或训练时间表示。
  • RTO(恢复时间目标):从选择检查点到恢复训练并通过验证,最长允许花费多长时间。

例如,团队可以规定:训练中断后最多回退一个检查点周期,恢复后必须从一致的全局步数继续,并在规定时间内完成启动、校验和试运行。这里的具体时间不应直接照搬其他项目,而应根据单步训练耗时、故障影响和存储吞吐量实测。

检查点间隔可以先用下面的关系估算:

检查点间隔 ≤ 可接受的最大训练回退时间

如果故障发生时间近似随机,平均回退时间大约是检查点间隔的一半;但验收时仍应按最坏情况,也就是“刚完成一次检查点后立刻发生故障”来判断。与此同时,还要监控保存开销:

检查点开销比 = 单次保存耗时 ÷ 检查点间隔

如果一次保存需要较长时间,导致训练暂停、GPU 空转或数据管线堆积,即使 RPO 达标,整体方案也可能不可接受。

明确检查点范围:权重只是其中一部分

全量训练检查点应保存什么

对预训练和全参数微调,建议把检查点分成“继续训练必需状态”和“审计与复现辅助状态”。

状态类别典型内容是否影响继续训练验收重点
模型参数各层权重、分片文件、参数精度信息是分片是否完整、参数键是否匹配
优化器状态一阶、二阶动量、主权重或混合精度状态通常是优化器步数、状态分片是否齐全
学习率状态当前学习率、调度器位置、预热进度是恢复后学习率曲线是否连续
梯度缩放状态混合精度训练使用的缩放因子等视训练方式而定是否出现异常溢出或训练震荡
随机数状态CPU、GPU、分布式进程的随机数状态影响可复现性固定条件下结果是否符合预期
数据读取状态数据集版本、分片、样本位置、数据游标是是否重复过多数据或跳过数据
并行元数据全局步数、进程数、并行拓扑、分片映射是所有进程是否指向同一训练步
配置与代码模型配置、分词器、训练参数、代码版本通常是配置哈希和代码版本是否匹配
评估与日志loss、学习率、吞吐、异常记录否,但很重要用于恢复前后对比

如果只备份模型权重,适合“保存一个可推理版本”或“从权重重新开始优化器”的场景;如果目标是故障后接续预训练,则必须将优化器、调度器、数据读取和并行元数据纳入备份范围。

不同训练阶段的备份范围

预训练、全参数微调和参数高效微调的状态规模不同,但验收原则相同:

  • 预训练:优先保证模型分片、优化器状态、学习率调度、数据游标和分布式元数据完整。
  • 全参数微调:除模型权重外,优化器和调度器状态仍然是连续训练的关键。
  • 参数高效微调:需要明确保存基础模型引用、适配器参数、训练器状态以及适配器配置。不能只保存一个适配器文件,却没有记录它对应的基础模型版本。

每份检查点都应有一个不可变的元数据清单,至少包含:

global_step
epoch 或数据游标
训练开始时间与保存完成时间
模型配置版本
分词器版本
数据集版本或数据快照标识
代码版本标识
并行规模与分片方式
权重、优化器、调度器文件列表
每个文件的大小和校验值
检查点状态:writing / complete / failed

这里的 complete 不能仅由训练进程写入。更稳妥的做法是:所有分片写入临时目录,校验值和元数据清单生成完毕后,再以原子方式发布完成标记。恢复程序只读取带有完成标记的目录,不读取仍处于 writing 状态的目录。

按指标制定检查点频率

三个必须测量的指标

不要直接从“每多少步保存一次”开始,而应先测量以下数据:

  1. 单次检查点总大小

统计所有权重、优化器、调度器和元数据文件的总量。分布式分片时,应统计所有分片之和,而不是只看某一台机器上的目录大小。

  1. 保存完成时间

从训练进程进入保存阶段,到远端存储确认完整可读的耗时。只统计本地写入时间,不能代表真正的备份完成时间。

  1. 恢复验证时间

从选定检查点开始,到完成文件校验、状态加载、进程启动和短步数试运行的总耗时。

可以把检查点策略看成三个成本之间的平衡:

  • 保存太少:故障后回退的训练计算更多;
  • 保存太多:写入压力、训练暂停和存储占用增加;
  • 保存不完整:即使文件数量很多,也无法恢复。

频率的实际制定方法

建议使用“时间间隔 + 训练步数 + 事件触发”三种条件中的任意一种触发保存。

时间间隔适合训练吞吐稳定的任务。先根据允许的回退时间设定一个待测周期,再通过实际保存耗时和恢复演练调整。

训练步数适合单步时间稳定、训练指标按步数管理的任务。步数间隔应换算为时间间隔验证,防止因为序列长度、数据批次或 GPU 利用率变化而使实际 RPO 偏离目标。

事件触发用于降低关键变更带来的回退风险,典型场景包括:

  • 更换数据集版本或数据混合比例前;
  • 修改模型配置、并行策略或优化器前;
  • 调整学习率、批次大小或梯度累积策略前;
  • 重要评估节点前后;
  • 即将进行长时间无人值守训练前;
  • 完成一个可交付模型版本时。

频率不应只设置一个“最新检查点”。实际运行中至少要区分以下几类:

类型作用典型保存策略
工作检查点应对近期故障高频滚动保留,旧版本按容量淘汰
周期检查点支持回退和对比按较长周期保留多个版本
里程碑检查点支持版本交付和重大变更回滚变更前后单独保留,不参与普通滚动淘汰
验收检查点用于恢复演练在隔离环境中保留到验收完成

这里的“高频”和“较长周期”不能脱离容量预算确定。单份检查点大小为 V,计划保留 N 份,存储副本数为 R 时,基础存储量可先按下面方式估算:

存储量 ≈ V × N × R + 元数据、日志和临时空间

如果检查点采用增量方式,不能简单套用这个公式,还要把基线检查点、增量链长度和链断裂后的重建空间计算进去。对恢复稳定性要求较高的训练任务,保留完整检查点通常比过长的增量链更容易验收。

GPU 数量对备份方案的影响

GPU 数量不是检查点频率的唯一变量,但会影响以下环节:

  • 写入并发度:多个训练进程可能同时写入大量分片,远端存储和共享文件系统会出现突发压力。
  • 文件数量:按进程或分片保存时,GPU 数量增加可能带来更多文件和元数据操作。
  • 通信同步:某个进程保存失败、其他进程继续运行,可能造成混合步数或部分检查点。
  • 恢复拓扑:原训练使用的 GPU 数量、张量并行、流水线并行或数据并行配置变化后,原分片未必能直接加载。

因此,回答“大模型训练需要多少GPU?LLaMA-3/GPT级模型算力配置”时,至少应分别验收“训练是否能跑”和“检查点是否能写、能读、能恢复”。GPU 数量应由显存、并行策略和目标吞吐决定;备份频率应由 RPO、保存开销和存储预算决定。二者有关联,但不能相互替代。

保证分布式检查点的一致性

一致性至少包含四层

第一层是全局步数一致。 所有训练进程必须在同一个全局训练步进入保存点。不能由某个进程先写出自己的分片,其他进程仍在更新参数时就把整个目录标记为完成。

第二层是状态之间一致。 模型参数、优化器状态、学习率调度器和梯度缩放器必须属于同一个训练步。最常见的错误是权重来自第 N 步,优化器状态来自第 N-1 步,文件本身都能打开,但恢复后训练行为已经改变。

第三层是分片集合一致。 检查点清单必须记录预期分片数量、实际分片数量和每个分片的校验值。不能只验证目录存在,必须确认没有缺片、重片或同名覆盖。

第四层是配置一致。 恢复时要比对模型配置、分词器、数据版本、并行方式和代码版本。配置不一致时,即使框架能够加载文件,也不能直接判定恢复成功。

推荐的发布流程

在不确定训练框架具体实现时,可以按以下逻辑设计外围备份流程:

  1. 训练进程在目标全局步执行同步,确认所有进程抵达保存点。
  2. 将状态写入带有唯一标识的临时目录,例如 step-10000.writing。
  3. 写完所有分片后生成文件清单、大小记录和校验值。
  4. 由协调进程检查分片数量、全局步数和关键元数据。
  5. 将状态标记从 writing 更新为 complete,或在同一文件系统内发布完成目录。
  6. 训练程序和恢复程序只选择 complete 状态的检查点。
  7. 远端复制完成后再次检查对象数量、大小和校验值,不能把“复制任务已提交”当作“备份已完成”。

Linux 环境可以使用 sha256sum 验证已生成的文件清单。下面的命令应在检查点已经停止写入的临时目录中执行,适用于 GNU/Linux 常见发行版:

cd /path/to/checkpoint.step-10000.writing

find . -type f ! -name 'manifest.sha256' -print0 \
  | sort -z \
  | xargs -0 sha256sum > manifest.sha256

sha256sum -c manifest.sha256

校验通过只说明文件内容与清单一致,不能证明训练状态语义正确。例如,权重和优化器状态可能都没有损坏,但它们来自不同训练步。因此还需要在清单中记录统一的 global_step,并由恢复程序加载后检查。

确认所有文件和清单完成后,再发布完成状态。下面的示例只适用于源目录和目标目录位于同一文件系统、目标名称不存在且没有并发写入的情况:

mv /path/to/checkpoint.step-10000.writing \
   /path/to/checkpoint.step-10000.complete

该操作不会修复缺失分片,也不会验证远端副本。若目标名称已经存在,不应直接覆盖,应先停止发布流程并检查是否发生重复任务或名称冲突。

恢复演练:从“能加载”到“能继续训练”

准备条件

恢复演练不要直接覆盖生产训练目录,应准备隔离的恢复目录,并记录以下条件:

  • 检查点路径和版本;
  • 使用的代码版本;
  • 模型、分词器和数据版本;
  • 原训练的 GPU 数量与并行配置;
  • 计划使用的恢复 GPU 数量;
  • 目标 RTO 和允许的步数回退;
  • 恢复前后的配置差异;
  • 演练开始和完成时间。

如果恢复时 GPU 数量或并行拓扑改变,应先确认训练框架是否支持重新分片或重新映射。不能因为加载接口没有立即报错,就认定改变拓扑后的训练等价于原训练。对于不支持直接变更拓扑的情况,应先在原拓扑恢复,再通过明确的转换流程生成新拓扑可用的检查点。

恢复验收步骤

第一步:检查完成状态和完整性。

验证目录状态、文件数量、文件大小和校验值。校验失败时不要继续启动训练,先重新复制缺失文件或选择上一份完整检查点。

第二步:检查关键元数据。

至少比对:

  • global_step;
  • 优化器步数;
  • 学习率调度器位置;
  • 模型配置;
  • 分词器版本;
  • 数据版本和数据游标;
  • 并行规模与分片信息。

第三步:只读加载测试。

先在不更新参数的模式下加载模型、优化器和调度器,观察是否出现缺失键、额外键、形状不匹配或状态数量不一致。只读加载通过,说明文件结构基本可用,但还不能证明可以继续训练。

第四步:短程继续训练。

恢复后执行一小段受控训练,记录:

  • 首个恢复步的 loss;
  • 学习率;
  • 梯度范数或梯度溢出情况;
  • GPU 显存和利用率;
  • 数据游标;
  • 检查点再次写入结果。

如果使用固定输入和固定随机数状态,应对比恢复前后相同条件下的输出。分布式训练、混合精度和非确定性算子可能带来微小差异,因此应预先定义允许范围,而不是简单要求每个浮点数完全相同。

第五步:验证恢复后的新检查点。

恢复成功后必须再保存一份新检查点,并重复完整性校验。这样才能证明系统不仅能读旧检查点,也能在恢复后的训练进程中继续生成可用备份。

三类故障场景

演练场景需要模拟的问题通过标准
训练进程或单个工作进程中断是否能从最近完整检查点恢复进程重新启动后无混合步数,训练可继续
保存过程中发生中断是否会留下可被误选的半成品半成品被识别为未完成,不参与恢复
远端文件缺失或校验失败是否能发现损坏并切换版本校验失败可定位到文件,自动或人工选择上一份完整版本
GPU 数量或并行方式变化分片是否能够重新映射有明确兼容性判断,不把错误加载当作成功
代码或配置变更是否能阻止不兼容恢复版本不符时告警或拒绝启动
数据版本变化是否会重复或跳过数据数据游标和数据版本有记录,行为符合预定策略

验收项目、正常与异常分界

验收不能只看“训练进程重新启动”。建议形成一份可追溯的检查表:

验收项目正常表现异常分界应保留的证据
检查点状态目录或对象明确标记为 complete只有目录存在,状态不明或仍为 writing状态文件、发布时间、任务日志
文件完整性所有清单文件校验通过缺片、校验失败、大小不一致sha256sum -c 输出、文件清单
步数一致性权重、优化器、调度器属于同一 global_step任一状态步数不同元数据清单、恢复日志
参数加载无缺失键、额外键和形状错误加载报错或被静默跳过加载日志、参数统计
优化器恢复状态数量和步数符合预期只加载权重,优化器被重新初始化优化器日志、配置记录
数据恢复数据版本和游标符合策略未知游标、重复或跳过范围不可解释数据版本、游标记录
训练连续性恢复后 loss、学习率和梯度行为处于预设范围loss 突然异常、学习率跳变或持续溢出恢复前后指标曲线
新检查点生成恢复后能生成新的完整检查点只能读取旧检查点,无法写出新版本新检查点清单和校验结果
恢复耗时在 RTO 内完成超过 RTO 或需要人工临时修复时间戳、启动日志、故障记录

需要特别区分以下几种情况:

  • 文件损坏:校验值失败,属于备份完整性问题;
  • 状态不一致:文件都能读取,但步数或配置不匹配,属于一致性问题;
  • 恢复过慢:状态正确但加载和复制耗时过长,属于 RTO 或存储吞吐问题;
  • 恢复后指标异常:文件可以加载,但训练语义可能改变,需要检查优化器、调度器、数据游标和随机数状态;
  • 无法改变 GPU 数量继续训练:不一定是备份失败,可能是分片拓扑不兼容,应按“原拓扑恢复或重新分片”的路径处理。

保留周期:按回退窗口而不是按文件数量决定

保留周期至少要覆盖三类需求:

  1. 故障恢复窗口:最近一段时间内可以快速回到可用状态;
  2. 实验回退窗口:发现数据、配置或训练策略问题后,可以回退到变更前;
  3. 版本交付窗口:已验收模型不会因为滚动清理被删除。

可以采用分层保留:

  • 最近检查点:用于快速恢复,滚动保留;
  • 周期检查点:用于跨时间点比较和回退;
  • 变更前检查点:在数据、代码、并行策略或优化器发生变化前单独保留;
  • 里程碑检查点:通过评估并准备交付的版本,按版本生命周期保留。

如果某训练任务需要覆盖七天,检查点间隔为两小时,那么周期检查点数量的估算就是七天内的时间点数量,再叠加变更前和里程碑版本。这个计算只是容量规划示例,不代表所有任务都应采用相同间隔。真正的保留数量还要根据单份检查点大小、副本数量、远端存储空间和恢复演练结果调整。

清理策略必须避开以下风险:

  • 删除仍在上传或校验的检查点;
  • 删除唯一一份通过恢复演练的版本;
  • 只保留最新权重,却清理掉对应的优化器状态;
  • 清理了模型文件,却保留无用的临时分片,造成容量判断失真;
  • 按文件修改时间清理,误删里程碑版本。

任何自动清理任务都应先读取完成状态和保留标签,再执行删除;清理前应保留清单和操作日志,必要时先做一次目录级快照或远端版本保护。未经确认,不要使用通配符直接删除检查点目录。

用复测结果决定频率和算力配置

一套可执行的初始方案,应在小规模环境先完成以下闭环:

  1. 生成一份包含完整训练状态的检查点;
  2. 验证所有分片和校验值;
  3. 在隔离环境加载并记录恢复耗时;
  4. 用相同拓扑进行短程继续训练;
  5. 模拟保存中断、文件缺失和进程中断;
  6. 验证异常是否被识别,旧版本是否可用;
  7. 测量保存开销、存储增长和恢复耗时;
  8. 再决定正式训练的检查点间隔和保留数量。

如果保存耗时超过预设开销比,优先检查写入并发、分片数量、临时空间和远端存储吞吐,而不是盲目降低备份频率。如果恢复后训练步数、学习率或优化器状态不一致,增加检查点数量也不能解决问题,应先修复一致性。若恢复正确但超过 RTO,则需要优化恢复路径、提前准备环境或调整存储层级。

最终的决策边界可以归纳为:

  • RPO 不达标:缩短检查点间隔,或增加关键事件触发;
  • 保存开销过高:优化写入和分片策略,确认异步保存不会读取变化中的状态;
  • RTO 不达标:提高恢复读取吞吐,减少人工步骤,并提前演练兼容拓扑;
  • 恢复后指标异常:检查优化器、调度器、随机数和数据游标;
  • 存储预算超限:调整保留层级和副本数量,但不能删除唯一可恢复版本;
  • GPU 数量变化导致无法加载:先确认框架的重分片能力,不能把改变并行规模直接视为普通重启。

当一份检查点能够被完整校验、在预定拓扑或明确兼容的拓扑中加载、按同一训练步恢复关键状态、完成短程训练并再次生成新检查点时,才可以称为“可恢复检查点”。频率、保留周期和 GPU 算力配置,都应以这套验收结果为依据,而不是只看备份目录中有多少文件。

目录结构
全文