首页 / 资讯中心 / 文章详情

完整答案蒸馏实战:Qwen3.8-Whittle-MoE-27B-A17.8B 的 teacher32 数据集如何教会大模型“何时该停笔“

完整答案蒸馏实战:Qwen3.8-Whittle-MoE-27B-A17.8B 的 teacher32 数据集如何教会大模型“何时该停笔“ ★ FEATURED ARTICLE
完整答案蒸馏实战Qwen3.8-Whittle-MoE-27B-A17.8B 的 teacher32 数据集如何教会大模型何时该停笔Qwen3.8-Whittle-MoE-27B-A17.8B 是一个把 27B 稠密模型改造成混合专家MoE架构的开源模型压缩之后它会陷入一种怪病列表说到一半就开始车轱辘话反复复读同一个模板。这篇文章拆解它的完整答案蒸馏实战——用一份名为 teacher32 的数据集245 条写完了就停笔的完整答案把何时该停这个缺失的信号通过 top-32 概率蒸馏灌回模型最终把循环率从 69% 打到 8%而且没有让模型变哑。一、先认识怪病MoE 压缩后为什么会说个不停Whittle 的架构是一次切割而不是重建父模型 Qwen3.8-27B 每一层宽 17408 的稠密 FFN被切成 64 个宽 192 的 routed 专家薄片加 1 个宽 5120 的常驻 shared 专家。算式是精确的——64×192 5120 17408一个神经元都不新造。每个 token 只激活 64 选 16 的专家于是 27B 总参数里只有 17.8B 真正在跑量化后 24GB 显存就能推理。代价是模型学会了重复。评测基线里144 条生成有 93 条退化成列表尾部复读循环率高达 65%后固定为 69%。而且它不是复读整句而是复读模板比如Helping with financial planningHelping with health and wellnessHelping with travel and tourism……一直换尾巴词前两个词永远一样早期的 rep-4gram 指标对这种换尾巴的重复完全失明直接打 0.000这正是它反复骗过每一版模型的元凶仪器根本没看见缺陷。诊断细节见 WHITTLE_FINDINGS.md。二、诊断如何看懂重复与停止是同一个旋钮团队连跑了 5 轮训练得到一个反直觉、但近乎同义反复的结论重复就是不会停。看这张对照表同一评测台、同一批种子轮次on-policy 数据EOS 是否保留单轮循环率baseline无保留69%B8×保留~0%但 6/16 被截断C2×全部屏蔽90%E接 B 长文档保留2%但答案被压到 7 个词问题不在要不要停而在何时停。B 轮证明教师模型在学生开始复读的那个位置意见几乎都是停这个梯度最猛、最能治循环——可它同时把模型教成了哪儿都早停。反过来把 EOS 全局屏蔽C 轮模型又彻底不会停直接弹回 90%。更关键的证据在推理端直接给 EOS logit 加偏置剂量-反应曲线显示从全循环一路滑到全沉默中间根本不存在一个健康工作点。这说明答案何时算写完这个信息压根不在权重里——缺的不是压力是数据。完整推导见 WHITTLE_FINDINGS.md。三、teacher32 数据集245 条完整答案如何埋下停止信号于是下一轮蒸馏的目标被钉死了恰好蒸馏因为写完而停止这件事。这就是 teacher32 数据集logic65/whittle-teacher32-complete-answers的由来。它由父模型teacher对同一批枚举提示词写出完整、正确的答案并在每个 token 位置记录 top-32 概率共 245 条覆盖短到 7 个 token 的事实性答案一句话就收中长度解释长到 4000 token 的结构化文档带代码块的回答多轮对话——因为实测的失败点就在第 5 轮之后 设计上有个关键讲究长度多样性不是装饰而是解药。如果数据集里全是长答案模型学到的会是大概 300 词时停这种长度先验而不是内容写完时停。所以 teacher32 故意在每一个尺度上都埋了停止信号。另有一个 r2-structured 子集放 34 条最长 4.9k 的结构化范例专门补 SQL / HTML / 表格这类重灾区。数据集还刻意与评测 gate 完全不相交。早期版本里 12 条 gate 提示有 11 条混进了训练集等于把考试卷塞进了教材。规则很朴素在生成数据之前先审计 train/test 重叠。设计全过程见 WHITTLE_FINDINGS.md。四、蒸馏实战把 top-32 概率灌回模型的 3 个工程坑拿到数据后真正的坑在怎么算损失上。坑一显存爆炸。248320 的词表8k 序列的一次全宽 fp32 logits 就是多 GB 的张量教师模型直接 OOM。解法是windowed pass分块 prefill、把past_key_values带下去边算边取 top-64。它之所以在这台混合 GDN 架构上成立是因为线性注意力层只维持一个固定大小的循环状态完整上下文能用一个窗口的激活代价保留。落地前先用单次完整前向对齐验证——top-1 一致率 1.0000、最大 log-prob 差 0.0000才敢花一小时 A100。坑二损失函数不能是朴素的 KL。top-k 截断的 logit 需要一个解耦目标拆成三项对top-32 集合内总概率质量 vs 集合外做 binary KL对集合内部形状做 conditional KL再用真实下一个 token 做 CE 锚定三项若合并成一个 KL会悄悄把模型教成形状对了、但概率量放错了地方。坑三别在循环位置保留 EOS 目标。on-policy 行的停是病灶的症状不是要学的东西可对干净长文档EOS 又是唯一告诉段落到此结束的信号。所以掩码必须逐行选择只在 on-policy 行屏蔽在干净文档上保留。一刀切全局屏蔽代价是一整轮训练才发现自己把停止能力全删了。三处细节见 WHITTLE_FINDINGS.md。蒸馏完成后学生侧的训练适配器落在 v2-adapter/完整权重索引见 v2/model.safetensors.index.json。五、蒸馏成果循环率从 69% 降到 8%且不变哑固定同一台评测台、同一批提示和种子历代版本对比如下完整历史见 README.md指标上一版v2v2.1单轮循环率12 提示×3 种子69%11%8%多轮循环率64%7%7%后期轮次第 5 轮起56%17%8%结构化输出循环率~75%39%22%中位答案长度268 词386 词388 词静默 / 截断答案未测00知识测试28/3927/3928/39三个数字值得圈出来中位长度没掉反升到 388 词——说明模型学会了该长就长而不是靠早停来假装不循环静默 / 截断为 0——这是上一轮反复踩的坑现在被守住了知识 28/39 打平基线——修复停止没有伤害既有知识诚实地说它没变完美结构化输出SQL / HTML / 表格仍有约 1/5 会退化45 项的长列表精确计数仍是架构层面的深度短板。这些限制在 README.md 里都白纸黑字写明了。六、可复现的评测门槛别只测你要修的那个缺陷每个版本的发布都要过 loop_test.py——它就是模型卡上所有循环率的生成器任何人可复现或质疑。一条生成被判 FAILED只要触发以下任一4-gram 重复 0.15重复整行 0.20重复行首 0.40或答案低于字数底线最后那条字数底线是全篇最容易漏的一课只测重复率的 gate会被一个只回好的。的模型轻松通过——所有重复指标对一句空话都打 0.000。所以每个 gate 至少要有一个过度修复反而会变差的指标这里就是长度底线否则优化器无论人或机器总会找到退化解。12 条单轮、6 条结构化、2 段共 14 轮对话的完整判定逻辑见 loop_test.py。七、复刻指南6 条把何时停笔教给大模型的经验清单数据先于算力先用小窗口对齐验证教师采集是否正确top-1 一致率、log-prob 差再烧 A100。生成数据前先审计 train/test 重叠gate 冻结训练集与之完全不相交。数据集要覆盖每个尺度都有停止信号避免只教出长度先验。每个 gate 配一个防过度修复的指标长度底线并手工抽查别信单一汇总数。EOS 掩码要逐行条件化不是一刀切删除。完整的方法、失败日志与脚本都公开在 WHITTLE_FINDINGS.md 与 ROADMAP.md训练计划见 ROADMAP.md。结语teacher32 做的事情可以浓缩成一句话用 245 条写完了就停笔的完整答案把何时该停这个缺失的信号从教师模型的 top-32 概率里蒸馏回学生。它证明了对压缩后的 MoE缺失的往往不是知识、也不是算力而是答案何时算完整这最后一点信息。相关权重与配置方便你按图索骥根目录当前发布权重model.safetensors.index.jsonv2.2 停止门64 个shared_expert_gate张量v2.2/shared_expert_gate.safetensors架构定义64 专家 / 每 token 激活 16 / 中间维 17408config.json创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站