大模型后训练跑歪了,处置分 6 步:先分诊、再停跑、回滚到检查点、补数据、重跑、验收。从发现异常到拿回一个可用版本,通常 2 到 5 天。能否压到 2 天,取决于检查点存得够不够密,以及有没有一份固定的评测题库。
下面按处置顺序写,每步说清三件事:做什么动作、多久、做到什么程度算完。末尾给 6 个常见卡点和 3 个核验动作。例子取指令微调与偏好对齐两段,预训练段跑歪的处置逻辑相同,重跑的时间成本高一个量级。
| 症状 | 多半的原因 | 先动哪一步 | 恢复难度 |
|---|---|---|---|
| 回答变短、变空 | 偏好数据偏向短答案 | 回滚到最后一次指令微调 | 低,2 天内 |
| 开始编数字 | 训练数据里混入无出处数字 | 抽 100 条数据回查来源 | 中,3 到 5 天 |
| 只会一种腔调 | 指令数据同质化 | 换数据配比重跑 | 中,3 天左右 |
| 拒答变多 | 安全数据权重过高 | 降安全数据比例重跑 | 低,2 天内 |
| 格式全乱 | 模板标签与分词不匹配 | 先修模板再重跑 | 低,1 天内 |
这张表按症状找原因,不按原因找症状。先看输出哪里不对,再倒推是哪一段训练动的,比一上来就翻日志快。5 类里格式全乱的修复最快,改模板重跑一轮,半天能出结果。
回滚的前提是有检查点,而且要能分清每个检查点对应哪一段训练。命名规范写清楚:日期加阶段加步数,例如 1112-sft-4000、1113-dpo-1200。名字里不带阶段,两天后就分不清哪个是可用的那一版。
指令微调段每 500 步存一次,偏好对齐段每 200 步存一次。存得密,回滚粒度细,代价是磁盘占用。一个 70 亿参数的模型,一份权重约 14GB,存 10 份就是 140GB,机房磁盘紧张时按 5 份轮换,间隔相应放大一倍。
回滚窗口指能退回去的范围。实践里留 3 个可回退点就够:上一轮稳定版、本轮指令微调结束点、本轮对齐开始点。超过 3 个点,选择变多,判断反而慢。每次上线后把稳定版单独备份一份,别和训练中的检查点混在一个目录。
2026 年 2 月我跟着处理过一次对齐跑歪,症状是回答全变成 3 句以内。当时手上只有 2 个检查点,一个在指令微调前,一个在对齐后,中间没有可退的位置,只能从指令微调重跑,多花了 3 天。之后再存点就按 200 步一格。
6 步里第 3 步最容易被跳过。多数人回滚完就直接改数据重跑,跑完发现症状还在,才发现回滚的那个点本身就有问题。先用 20 条题验一遍回滚结果,能省下 1 到 2 天的无效重跑。
重跑不是原样再跑一遍,原样重跑只会得到同样的结果。要动的是两类参数:训练数据的配比、一个被验证过与症状相关的超参。一次只动一处,两处一起动,跑完分不清是哪一处起了作用。
先看分布再看比例。把训练集按任务类型分 6 组,算每组的条数占比,与线上真实提问的分布对比。两组差异超过 20 个百分点的,就是需要压或补的那一组。压的时候一次降 10 个百分点,降太猛会带出另一个方向的毛病。
多数情况下不动。症状是内容问题,动学习率解决不了。只有一种情况要动:损失曲线本身不稳,相邻 200 步的均值来回跳,这时先把学习率降一半,别的参数一律保持。
我处理过一例回答变空的问题,第一轮把批量和学习率都调了,跑完症状没变,反而多了一个回答过长的毛病,花了 2 天才退回去。第二轮只改了数据配比,长答案那组的比例从 8% 提到 25%,一轮就恢复正常。经验是先动数据,超参留到最后。
第 4 条最难查。标注口径不一致时,同一批 200 条数据里约有 30 条是矛盾的,模型学到的是折中行为,输出看起来正常,细看每个答案都不到位。查法很简单:随机抽 20 条,让两个人重标一遍,一致率低于 85% 就先统一口径。
三项里第 3 项要留够时间。48 小时是下限,量小的站点要跑到 72 小时才有统计意义。跑完把这一轮的处置记录存下来,写清症状、回滚点、动了哪批数据、最终分数,下次遇到同类症状能直接跳到第 4 步。
处置记录还有一个用处:判断某一类症状是不是反复出现。同一症状一个月出现 2 次以上,说明数据管道的上游有系统性问题,光靠每次回滚解决不了,得回去查标注流程和数据准入那两道关口。记录攒到 6 条以上,规律自然显出来。每条记录的耗时也记上,2 天修完和 5 天修完,差在哪一步一目了然。7 条记录摆在一起,能看出哪一步固定要花 2 天。把这几条按症状归类,还能看出同类症状的修法是不是一样的。
本文信息核对时间:2026-11。