Qwen3.8-27B 行为后训练:SFT、SimPO 与混合精度量化
这不是一篇“下载某个魔改模型就能变强”的宣传文,而是一份后训练实验的整理与核验。核心问题不是让模型一律少想,而是让它在需要时继续推理,已经可靠时及时提交,不会时停止无效搜索。
先看结论
- 原模型的主要病灶是错误题上的超长、反复搜索和答后重开,不是所有题都思考过久。
- 小剂量 SFT 没有明显改变行为;大剂量 SFT 确实把思考压短,却同时损失了能力。
- 第三周把数据按“原生正确、同题失败修复、独立教师正确轨迹”分工,1,905 条 SFT 数据将模型拉回到可用区间。
- 最后的 SimPO 只用 110 对同题偏好样本、每对曝光一次、5 个 optimizer steps,主要收尾 32K 截断、空 final、不可解析和答后重开。
- 结果是 GPQA、平均 reasoning 和行为异常同时向好,但 MMLU 有小幅下降。因此“完全不掉能力”不严谨,更准确的表述是:没有出现第二周那种明显的整体能力塌陷。
- 量化结果说明混合精度保护敏感层有效;Q3 的单项 GPQA 高于 Q6 不能证明低比特更强,作者仍把 Q6_K 视为综合平衡档。
来源、范围与核验说明
本文主要依据 Lynn 发布的完整实验记录《干货!大模型后训练的“剂量”学,什么剂量才能让 Qwen3.8-27B 想得少、不掉能力,还能用 XH 档?》(发布于 2026-09-05)。原文同时包含训练日志、评测表和量化记录;本文对其进行了重排、纠错和边界标注。
- 原始实验记录(青稞社区)
- 原文给出的最终模型地址:ModelScope
- “Qwen3.8-27B”在本文中按原作者命名使用;这是一份个人/社区实验记录,不等同于官方模型卡或独立复现实验。
- 评测均是作者自己的 harness、数据划分和运行配置下的结果,不能直接当作任意硬件、任意采样参数下的普适分数。
原文中一个不能忽略的口径差异
文章在第二周比较中把母模写成 166/198,而三阶段正式总表把原版写成 164/198。这很可能对应不同批次、不同运行节点或不同 harness 口径;原文没有给出足够信息让读者证明二者完全相同。本文不把 164 和 166 强行合并:
- 第二周只说明“更激进的 SFT 让同一轮比较从 166 降到 148”;
- 三阶段表使用 164、168、171 的正式对照链;
- 不能用这两个母模数字拼出一个新的百分比,也不能把它们当成同一次评测。
1. 原模型究竟出了什么问题
作者在 198 道 GPQA 上观察到一种很有辨识度的长尾:
- 做对的题,reasoning 中位数约 3,627 tokens;
- 做错的题,中位数顶到 32,768 tokens;
- 26 个撞到 32K 上限的样本中,22 个最后仍然答错;
- 有些题已经形成答案,模型却再次怀疑、重新开启推理,最终没有正常提交 final。
可以把行为简化为:
会做 → 较快完成 → 正常提交
不会或不确定 → 继续搜索 → 怀疑原答案 → reopen
→ 撞到 32K → 截断 / 空 final / 无法解析
这和“所有问题都应该少输出”是两个完全不同的训练目标。若把所有长答案都当作负例,模型会连真正需要的复杂推理也一起删掉。
2. 三周训练:欠治疗、过治疗,再到精准治疗
第一周:小剂量 SFT 没打中病灶
第一周使用了约 32–130 条规模的小型 SFT,并推进了少量 RL 题组。模型没有明显被破坏,但也没有任何节点同时实现“能力不掉、思考下降、提交改善”的稳定 Pareto 改善。
后来的解释不是“小剂量永远没用”,而是数据只让模型看到了一些短答案,却没有明确区分:
- 哪些长推理是正确且必要的;
- 哪些长推理是错误搜索、重开或撞上限;
- 正确答案已经可靠时应该在哪里停下并提交。
第二周:思考短了,能力也被削掉
更大剂量的 SFT 让 reasoning 平均值从 10,301 降到 4,123,中位数从 6,330 降到 1,576;但在该轮比较中 GPQA 从 166/198 降到 148/198,少做对 18 题。
这说明单独优化“少用 token”会把有用推理一并砍掉。随后 RLVR 曾把 GPQA 从 148 拉回 158,无 final 从 15 降到 11,但 reasoning P95 又从 16,626 上升到 20,912,仍没有形成可接受的最终节点。
第三周:按数据角色做精准 SFT
作者先让 27B 自己跑题,再把轨迹逐条分工,最终冻结 1,905 条:
| 数据角色 | 条数 | 占比 | 作用 |
|---|---|---|---|
| 27B 原生正确轨迹 | 894 | 46.9% | 保护原模型的能力、表达和必要的长推理 |
| 同题病灶修复轨迹 | 176 | 9.2% | 修复截断、空 final、无提交、答后重开等行为 |
| 独立教师优秀轨迹 | 835 | 43.8% | 展示可验证、能正常结束的正确路线 |
教师轨迹来自 K3、Grok 4.6 XH、Opus 5、GPT-5.6 Sol 等,并由作者复核。按任务类型,代码 921 条、科学 567 条、通识 206 条,其余 agentic、preservation 和其他任务 211 条。
长度分布也没有把模型强行变成短答器:
| Reasoning 长度 | 条数 | 样本占比 | reasoning token 占比 |
|---|---|---|---|
| <2K | 798 | 41.9% | 8.0% |
| 2–8K | 837 | 43.9% | 44.8% |
| 8–16K | 197 | 10.3% | 27.6% |
| 16–28K | 71 | 3.7% | 18.9% |
| 28–32K | 2 | 0.1% | 0.8% |
8K 以上的轨迹只有 14.2%,却贡献 47.2% 的 reasoning tokens。这些复杂但正确的样本是能力保护的重要部分。
第三周 SFT 的正式 GPQA 为 168/198(84.85%),全程请求超时为 0、严格 LOOP 为 0;但仍有 27 个 32K 截断、27 个空 final、23 个不可解析和 42 个答后重开。也就是说主体能力已经恢复,剩下的是一小撮行为长尾。
3. RLVR 没有留下模型,却留下了诊断资产
P50、P75、P100 三个 RLVR 节点都没有通过能力验收,因此没有作为最终模型保留。它们的价值在于帮助作者分清:
- 哪些是真正需要修复的失败轨迹;
- 哪些长推理虽然很长但不能误伤;
- 哪些同题轨迹适合组成 chosen/rejected 偏好对。
原文还记录了一套独立审计过的 RLVR 数据:640 条唯一轨迹、896 次训练曝光、28 个 optimizer steps;其中正确且规范提交 479 条、普通错误 60 条、行为病灶 101 条。另有 100 个诊断 pair 作为审计与后备资产。它们与最终使用的 110 对 SimPO 数据不是同一个统计口径,不能相加。
4. 最终 SimPO:只修行为长尾,不再扩大剂量
SimPO 从第三周 SFT 的 BF16 合并模型重新开始,没有接着失败的 RLVR checkpoint 训练。最终只选了 110 对 preference pairs,覆盖 73 道题:
- 病灶修复 57 对:32K 截断、空 final、不可解析、无提交和答后重开;
- 能力保护 53 对:保留复杂题中确实必要的完整推导;
- 代码 60 对、科学 40 对、通识 10 对;
- 对 14,365 条 HOLDOUT/测试题做污染审计,命中为 0;
- 36 条 rejected 轨迹超过 32,768 tokens,没有提前剪短,以保留“模型在哪里失控”的证据。
chosen 必须满足“逻辑和答案正确,并且正常提交”;rejected 是模型真实暴露的失败轨迹,而不是人为把所有长文本标成坏答案。
训练设置
- LoRA:
r=16、alpha=32、dropout=0,覆盖 12 个目标模块; - SimPO:
beta=1、gamma=0.2; - AdamW:
beta1=0.9、beta2=0.95、eps=1e-8、weight_decay=0; - 梯度裁剪:0.5;
- 110 对只训练一遍,共 5 个 optimizer steps,每步 22 对;
- 两侧合计约 3.806M sequence tokens,最长 pair 33,243 tokens,训练上限 33,280;
- 学习率从
2.5e-7短 warm-up 到5.0e-7,再平滑降到7.3223e-8; - 无 OOM、无 NaN、无 non-finite skip,总耗时约 3,851 秒。
五步并不等于信号很少:每个 token 都在比较同题 chosen 和 rejected。继续增加 epoch 或学习率,反而可能让同一小批病灶被过度强调,重新损伤能力。
中途与最终结果
在只完成 162 道题的中途同题比较中,SimPO 相比 SFT 的正确率从 142/162(87.65%)升到 146/162(90.12%),平均 reasoning 减少约 944 tokens,P90 减少近 6K;这说明变化主要发生在长尾,而不是把所有正常推理一律砍短。
正式完成 198/198 后:
| 指标 | 第三周 SFT | 最终 SimPO | 变化 |
|---|---|---|---|
| GPQA | 168/198(84.85%) | 171/198(86.36%) | +3 题 |
| 平均 reasoning | 10,264 | 9,556 | 下降 708 |
| 32K 截断 | 27 | 21 | -6 |
| 空 final / 无正式提交 | 27 | 21 | -6 |
| 不可解析 | 23 | 18 | -5 |
| 答后重开 | 42 | 38 | -4 |
| 超时 / 请求错误 | 0/0 | 0/0 | 持平 |
| 严格 LOOP | 0 | 0 | 持平 |
中位数为 4,788.5,P90 仍是 32,765.3;>8K 有 73 题,>16K 有 44 题。模型并没有变成“任何难题都只写几行”,极难题的长尾仍然存在。
5. “不掉能力”必须改成更严谨的说法
原文三阶段正式表如下:
| 模型 | GPQA(198) | MMLU(500) | LCB(100) |
|---|---|---|---|
| 原版 Qwen3.8-27B | 164(82.83%) | 451(90.20%) | 69(69.00%) |
| 第三周 SFT | 168(84.85%) | 445(89.00%) | 73(73.00%) |
| 最终 SimPO | 171(86.36%) | 442(88.40%) | 74(74.00%) |
相对原版,SimPO 的 GPQA 多 7 题、LCB 多 5 题,但 MMLU 少 9 题(-1.80 个百分点)。因此更准确的结论是:科学推理和代码方向改善,通识能力轻微回落,但没有复现第二周 GPQA 一次掉 18 题的整体塌陷。不能把三列结果概括成“全维度无损”。
异常指标也不能简单相加:同一题可以同时被计为 32K、空 final、不可解析和 reopen。empty final 不一定等同于计分错误,因为 harness 可能从 reasoning 回退抽取答案;reopen 也不一定意味着最终完全没有答案。
6. 量化:保护敏感层,而不是平均压低每一层
训练完成后,作者把量化视为另一场独立实验。关键原则是:
output/lm_head、首尾层、full-attention、SSM output 等敏感位置保留更高精度;- 普通 tensor 承担主要压缩;
- FP8(safetensors/服务端路线)和 GGUF(llama.cpp 路线)不能混成一套规则;
- 终版是 64 层、无 MTP 的纯文本 trunk,不能把多模态 wrapper 或包含视觉/MTP 的排除表直接套上去。
三档 GGUF 都从同一份最终 SimPO 文本 F16 直接量化,禁止从更高比特 GGUF 二次量化。token_embd 与 output/lm_head 保持 Q8_0,规则冲突时取更高精度。
| 档位 | 主要策略 | 作者正式成绩(GPQA / MMLU / LCB) | 定位 |
|---|---|---|---|
| Q5-LynnStyle | 首尾与 Critical 升 Q8,High 和敏感 tensor 升 Q6 | 164 / 438 / 75 | 高保真 |
| Q4-LynnStyle | 首尾 Q8,Critical/High 与 full-attention 分层保护 | 166 / 443 / 74 | 容量与能力平衡 |
| Q3-LynnStyle | 更密集保护边缘层、输出头、full-attention、SSM/FFN 关键族 | 172 / 435 / 78 | 极限容量 |
Q3 成品约 17.03 GB、5.06 BPW;clean 复测包含 llama.cpp 双卡加载、64K slot、正确生成、视觉与 DFlash2 smoke。Q3 的 GPQA 比 Q6 高一题不代表三比特在一般情况下优于六比特:198 题的小差异可能来自量化后临界 token 排序变化,而且 Q3 的 MMLU 最低。若只选一档综合部署,作者推荐 Q6_K;需要更小体积时再考虑 Q4,Q3 是容量极限档。
7. 对本地 Agent 的可迁移方法
这篇实验最值得迁移的不是某个分数,而是数据构造方法。若目标是修复本地模型的工具调用、代码或文件操作,应按同一问题收集成对轨迹:
rejected:模型真实出现“知道要调用工具,但没有产生 tool_call”,
或调用后陷入重试、空答、格式错误、无效长思考
chosen: 同一 prompt 下,正确生成 tool_call,完成工具返回后的闭环,
并在结果可靠时正常结束
保护集: 原模型已经正确调用工具、能完成任务的原生轨迹
推荐流程:
- 先记录真实失败,不要凭想象制造负例;
- 用原模型正确轨迹保护既有能力;
- 对同一 prompt 做可验证的失败修复;
- 先用小而精准的 SFT 改主体行为;
- 再用少量同题 preference pair 做 SimPO 收尾;
- 用独立 holdout 同时检查任务成功率、格式遵循、工具调用和长尾异常;
- 进入收益为正的 Pareto 区域后及时停手。
目前这份实验没有充分证明 strict JSON、多轮 tool calling、工具报错恢复、长任务文件修改、shell 调用或 schema adherence。不能因为 GPQA 达到 171/198,就直接断言它一定比其他 Agent 模型更适合作为主力。
硬件上,若本地是常见的 8 GB RTX 3070 Ti,17 GB 左右的 Q3 不能纯显存装下,只能考虑 CPU+GPU offload;这更适合验证质量上限,不一定适合作为日常高速 Agent 主力。
8. 最终可复用的判断框架
先诊断失败模式
↓
保留模型原生正确轨迹
↓
收集同题真实失败轨迹
↓
用教师或人工给出可验证的正确闭环
↓
小剂量 SFT 修复主体行为
↓
用少量 chosen / rejected 做 SimPO 收尾
↓
同时看能力、长度、提交和异常指标
↓
收益仍为正就停,不为追求单项满分继续加码
一句话记忆:不要训练“少想”,要训练“正确地想、正确地停、正确地提交”。