通关前一刻主机断电,进度眼看要丢——断点续训防的就是这种惨案:训练常要跑几天几夜,断电、报错、被云平台叫停都是家常便饭,好在存档机制能把现场原样存下,通电后从中断点接着跑。腾讯元宝、豆包的后台训练框架都有这套能力,本文用游戏读档的场景,把它的门道讲清。
存档里到底存了什么:不止是参数
想象游戏存档只存了角色等级,不存背包和任务进度,读档出来照样抓瞎。断点续训的完整存档包括四样:模型的参数、优化器的状态——可以理解成调整的惯性、材料读到第几个批号、训练了第几步。少存一样,接着跑就不是原来那条轨迹。
四样东西缺一不可,缺哪一样,接续的轨迹都会走样。
| 存档项 | 存的是什么 | 不存全的后果 |
|---|---|---|
| 模型参数 | 模型当前学到的本事 | 接着跑就不是原来那条轨迹 |
| 优化器状态 | 调整的惯性,步子迈出去之后的余速 | 第一步因余速不清而顿一下,曲线出现莫名的小坑 |
| 材料位置 | 材料读到第几个批号 | 只能从头再读,浪费前面读过的那一段 |
| 步数与配置 | 训练到第几步、参数开多少 | 接不上原来的进度,接缝一眼看得出来 |
存档的体积也是笔账:大模型的完整存档动辄几个 G,几百份存下来,存储先于训练见底。折中做法是密存轻量档、疏存完整档,出事先从最近的轻量档试恢复。
优化器状态是最容易被漏的一项。它记录着某种延续性:步子迈出去之后的余速。少了它,模型恢复训练的第一步会因为余速不清而顿一下,曲线出现一个莫名的小坑。什么是 warmup?训练为什么要先热身那篇讲的开场状态,和这里的余速是同一类东西。
游戏读档:回到离开前的那一刻
游戏读档的妙处在于场景复原:你合上书的位置、背包里的道具、任务做到第几环,全都回到离开前。好的续训存档追求的是同一效果——参数、余速、材料位置、步数,一页不落。读档之后接着跑,曲线看不出中断的接缝,这才算续上了。
读档的时机也有分寸:刚跑热就急着存,档是新的但没意义;跑够一段、曲线稳了再存,档才有价值。存得太勤也是浪费。
读档还有个纪律:档要勤。只在出事时才想起存档,等于没存;稳一点的做法是每隔一段固定步数存一份,出事就从最近的一份来。什么是训练不稳定?loss 突然飞了是怎么回事那篇讲的曲线乱飞,全靠这些档兜底。
续训档速查清单
- 参数:模型当前学到的本事
- 优化器状态:调整的余速,最易漏存
- 材料位置:读到第几批,别从头再读
- 步数与配置:训练到第几步,参数开多少
类比失效的地方:读档未必还原全部现场
读档类比有一处对不上:游戏读档是确定性还原,训练续跑却要面对环境的变化——云平台的机器型号换了、随机数的状态没存,接着跑出来的轨迹和原来略有出入。多数时候这点出入无伤大雅,但要精确复现结果的场合,就得连随机种子一起存档。
复现结果的场合更严格:同一套数据、同一个存档、同一组随机种子,换台机器重跑,结果要能对上。对不上,就把种子、数据顺序、硬件型号一起记进档里备查。
还有一处:游戏读档不花钱,续训要真金白银。中断一次,前面的算力已经沉没;所以勤存档的另一用意,是让沉没成本尽量小。什么是训练日志?看懂训练过程的第一手记录那篇讲的日志,负责告诉你在哪个档之后出的问题。
断点续训快问快答三则
- 只存模型参数够用吗?:多数场合能跑,但开头会顿一下;要平滑接续,优化器状态和步数也要一起存。
- 多久存一次合适?:看训练单价和中断概率,贵就勤存、便宜可放宽;云平台跑长任务,建议按固定步数自动存。
- 中断后换机器能续吗?:能,环境一致时直接读档;换个硬件架构,先小步验证再接大任务。
存档的价值,中断一次才知道。没出过事的训练,存档像多余的保险;出过一次,它就是半夜里唯一的那盏灯——勤存档、存全套,别让几天几夜的心血归零。把存档策略写进训练脚本的第一步,比出事后再哭强——它和日志一样,都是那种没用到时嫌多余、用到时救命的东西。


