模型蒸馏不只是压缩:从教师模型到后训练技术栈
很多人把“蒸馏”理解成“拿大模型生成答案,再训练一个小模型模仿”。这句话没错,但太薄了。
在今天的 LLM 工程里,蒸馏更像一套知识迁移系统:教师模型不只是给最终答案,还可以给 logits、偏好排序、推理轨迹、工具调用过程、拒答边界、领域写法和错误示例。学生模型也不一定只是“小模型”,它可能是一个同尺寸模型、一个领域模型、一个多模态分支、一个 draft model,甚至是一个量化后模型上的 adapter。
如果只把蒸馏当数据生成,很容易做出一个“会背老师口吻、但不会继承老师能力边界”的模型。真正有价值的蒸馏,要回答四个问题:
- 老师的什么能力值得迁移;
- 学生的架构和容量能不能装下这些能力;
- 训练信号是答案、分布、步骤,还是偏好;
- 上线后如何证明它更便宜,但没有把关键能力蒸丢。
一、经典蒸馏:从 hard label 到 soft target
Hinton、Vinyals、Dean 在知识蒸馏里强调的核心不是“把答案抄给小模型”,而是让学生学习教师输出分布里的暗知识。
普通监督学习只看 hard label:
input: 这张图是什么?
label: cat
但教师模型的输出分布可能是:
cat 0.72
fox 0.12
dog 0.09
tiger 0.04
car 0.00
这里的 fox/dog/tiger 概率不是噪声,而是教师对类别相似性的表达。学生学习这个分布,比只学习 cat=1 得到的信息更多。
典型蒸馏 loss 可以写成:
L = alpha * CE(y, p_s)
+ (1 - alpha) * T^2 * KL(softmax(z_t / T), softmax(z_s / T))
其中:
| 符号 | 含义 |
|---|---|
z_t | teacher logits |
z_s | student logits |
T | temperature,越高分布越平滑 |
CE | 对真实标签的交叉熵 |
KL | 学生分布对教师分布的拟合 |
alpha | hard label 与 soft target 的权重 |
LLM 场景里,logits 蒸馏经常不如分类模型直接,因为商业教师通常不给完整 logits,token 级分布也很贵。但这个公式仍然重要:它提醒我们,蒸馏最好迁移的是分布结构,不是只迁移最终文本。
二、LLM 蒸馏的四种主流形态
LLM 时代的蒸馏可以分成四层。
1. Response distillation:学习最终答案
这是最常见的做法:
prompt -> teacher answer -> student SFT
它适合:
- 客服、销售、运营文案这类风格稳定任务;
- 结构化抽取;
- 代码模板生成;
- 小模型做企业内部窄域任务。
它的问题也很明显:学生只看到结果,看不到老师为什么这么答。对于数学、规划、代码调试、复杂工具调用,单纯 response distillation 很容易变成“短路学习”:看起来格式对,遇到分布外问题就掉。
2. Rationale distillation:学习中间推理或解释
Distilling step-by-step 这类工作把教师生成的 rationale 作为额外监督,让学生同时学习答案和解释。它的价值在于给学生更多训练信号,特别是在标注数据有限时。
工程上要注意两点:
- rationale 不等于真实因果路径,它可能只是教师事后解释;
- 如果上线不希望暴露 chain-of-thought,需要把训练用的中间过程和推理时输出策略分开。
更稳的做法是把中间监督拆成可审计字段,而不是直接保存长篇思维链:
{
"answer": "...",
"short_rationale": "...",
"tool_plan": ["search", "compare", "summarize"],
"evidence_ids": ["doc-17", "doc-23"],
"error_type": null
}
这样既能帮助学生学习过程,又便于做数据质量检查。
3. Preference distillation:学习老师的偏好边界
很多能力不是“一个标准答案”,而是偏好排序:
A: 简短但遗漏约束
B: 更完整,有引用,有拒答边界
preference: B > A
DPO 把这类偏好学习变成一个相对稳定的分类式优化问题,不需要像 PPO-RLHF 那样先训练 reward model 再在线采样更新策略。对企业微调来说,DPO 的吸引力是流程简单、训练稳定、容易离线复现。
这类技术和蒸馏的关系是:教师模型或人类评审可以产生偏好对,学生通过偏好优化学习“什么回答更好”。它迁移的不是事实,而是选择标准。
4. Capability distillation:迁移某类能力
DeepSeek-R1 把推理能力蒸馏到多个更小的 dense 模型,是一个很典型的能力蒸馏例子。这里的关键不是“老师生成了很多答案”,而是老师的数据集中含有高密度的数学、代码和逻辑推理行为,学生通过 SFT 学到了新的解题模式。
这类蒸馏要特别小心数据配比。推理数据过多,小模型可能变得啰嗦;工具调用数据过多,模型可能在不需要工具时也想调用工具;安全拒答数据过多,模型可能变得保守。能力蒸馏不是越多越好,而是要和目标使用场景的 token 分布对齐。
三、一个可落地的蒸馏流水线
生产里不建议直接“生成 100 万条数据然后 SFT”。更稳的流水线是:
任务定义
-> 种子数据与真实日志抽样
-> teacher 生成候选
-> 规则过滤 + 模型裁判 + 人工抽检
-> 去重、分桶、难度标注
-> SFT / DPO / LoRA 训练
-> 评测集回归
-> 小流量灰度
-> 线上日志反哺
关键不是生成量,而是分桶:
| 分桶 | 作用 |
|---|---|
| easy | 保住基础格式和常见问题 |
| hard | 训练复杂推理、长上下文、边界条件 |
| refusal | 学会拒答和安全边界 |
| tool | 学会何时调用工具、如何读工具结果 |
| negative | 学会识别坏答案和幻觉 |
| domain | 学会行业术语、口吻和业务 schema |
训练时也不要只看总 loss。更有用的是按桶看回归:
overall pass rate
hard reasoning pass rate
tool-call exact match
refusal false positive / false negative
hallucination rate
latency and tokens per answer
小模型蒸馏成功的标志不是“平均分提高”,而是单位成本下可用能力提高。如果准确率只掉 2%,但延迟降 60%、显存降 70%、吞吐提升 3 倍,这就是很好的工程结果。反过来,如果成本降了但拒答边界、事实性、工具调用全都不稳,那只是把风险搬到了线上。
四、除了蒸馏,还有哪些模型训练技术
蒸馏只是后训练技术栈的一块。实际训练模型时,至少要把下面几类技术分清楚。
1. SFT:把模型拉到任务分布上
SFT 是最基础的指令微调。它解决的是“模型知道怎么按你的格式完成任务”。SFT 适合让模型学习:
- 输入输出 schema;
- 企业术语;
- 工具调用格式;
- 写作风格;
- 领域问答模板。
SFT 不擅长解决“两个答案哪个更好”的偏好问题,也不擅长强行注入模型容量装不下的新能力。SFT 数据质量通常比数据量更重要。
2. LoRA / PEFT:不改全模型,只训练低秩增量
LoRA 冻结原模型权重,只在部分线性层注入低秩矩阵:
W' = W + BA
其中 A 和 B 的 rank 远小于原矩阵维度,所以训练参数量和优化器状态都大幅下降。它适合多租户、多业务线、快速迭代的场景:基础模型保持一份,不同业务挂不同 adapter。
它的边界也要清楚:LoRA 更适合“适配”,不是无限扩容。如果基础模型本来不会复杂数学推理,靠一个很小 rank 的 adapter 不一定能补回来。
3. QLoRA:低比特基础模型 + adapter 训练
QLoRA 把基础模型权重量化到 4-bit,再通过 LoRA 反向传播更新 adapter。它的工程价值非常直接:把原本需要多卡的大模型微调,压到单卡或更少显存上。
但 QLoRA 不是“低成本无损魔法”。它更依赖:
- 量化格式是否适合权重分布;
- 哪些层加 adapter;
- rank 和 learning rate;
- 数据是否足够干净;
- 评测是否覆盖长尾任务。
如果你的目标是低成本领域微调,QLoRA 通常比全参微调更现实;如果目标是训练基础能力,全参训练或更大的后训练预算仍然不可替代。
4. RLHF、RLAIF、DPO:学习偏好,而不是学习答案
RLHF 的经典流程是:
SFT model -> collect comparisons -> reward model -> RL optimize policy
它解决的是“用户更喜欢什么行为”。InstructGPT 的重要发现之一是,较小但经过人类反馈训练的模型,可以在用户偏好上超过更大的原始预训练模型。
RLAIF 把人类比较的一部分替换成 AI feedback,例如 Constitutional AI 里用原则列表让模型自我批评和修订,再用 AI 偏好训练模型。它可以降低人工标注压力,但风险是 AI 裁判会把自己的偏见放大。
DPO 则把偏好优化做得更简单:不显式训练 reward model,不跑复杂在线 RL,而是直接用 chosen/rejected 对优化策略。很多团队会选择:
SFT 解决格式和任务
DPO 解决偏好和边界
蒸馏解决成本和能力迁移
5. 自训练与合成数据:让模型参与制造训练集
自训练不是新概念,但 LLM 让它变得更有用。常见流程:
base model -> generate candidates -> filter -> train stronger model -> repeat
它和蒸馏的区别是:蒸馏强调 teacher-student;自训练强调模型和数据循环。真实系统里两者经常混在一起:强教师生成合成数据,学生训练后再作为下一轮数据生成器或过滤器。
这里最容易踩坑的是数据污染。模型会生成看起来合理、实际上同质化很强的数据。要用去重、难度采样、反例生成、人工抽检、线上日志回放来打破自我强化。
6. MoE:训练时扩大参数,推理时只激活一部分
Mixture-of-Experts 不是蒸馏,也不是微调技巧,而是架构层的稀疏计算路线。它通过 router 让不同 token 激活不同 expert。好处是总参数量很大,但每个 token 只走部分专家。
MoE 的训练难点在于:
- expert 负载均衡;
- router 稳定性;
- expert collapse;
- 分布式通信开销;
- 推理服务里的 batch 和路由抖动。
MoE 适合从训练架构层追求更好的参数效率;蒸馏适合把已有能力迁移到更便宜的学生模型。两个不是替代关系。
7. 量化感知训练、剪枝和稀疏化:让模型更便宜
这些技术更靠近压缩和部署:
| 技术 | 主要目标 | 常见风险 |
|---|---|---|
| PTQ | 训练后量化,快速降显存 | 精度掉,长尾任务劣化 |
| QAT | 训练时模拟量化误差 | 训练成本更高 |
| pruning | 删除低贡献权重/通道/头 | 结构破坏,恢复训练复杂 |
| sparsity | 让计算变稀疏 | 硬件和 kernel 不一定支持 |
它们可以和蒸馏结合:先剪枝或量化,再用教师模型做恢复训练,让学生重新贴近教师行为。
8. Speculative decoding:不是训练学生,但会用“小模型”
Speculative decoding 常被误放进训练技术里。它主要是推理优化:小 draft model 先猜多个 token,大 target model 一次性验证,从而降低自回归解码延迟。它不一定改变模型权重。
但它和蒸馏有关:draft model 可以通过蒸馏训练得更像 target model。draft 越准,接受率越高,推理加速越明显。所以蒸馏在这里服务的是推理系统吞吐,而不是单独追求学生模型上线。
五、怎么选:不是所有问题都该蒸馏
可以用一张表做决策:
| 目标 | 首选技术 | 不建议优先用什么 |
|---|---|---|
| 降推理成本 | 蒸馏、量化、speculative decoding | 直接全参训练 |
| 学企业格式 | SFT、LoRA | RLHF |
| 学用户偏好 | DPO、RLHF、RLAIF | 只做 SFT |
| 多业务快速适配 | LoRA/adapter | 每个业务一份全模型 |
| 单卡低成本微调 | QLoRA | 全参微调 |
| 基础能力扩展 | 更强 base、继续预训练、RL | 小数据 LoRA |
| 超大规模参数效率 | MoE | 单纯蒸馏 |
| 部署端显存压缩 | PTQ/QAT、剪枝、蒸馏恢复 | 只缩 batch |
一个现实的企业路线通常是:
选一个强 base model
-> 用 SFT 学业务格式
-> 用 DPO 学偏好和边界
-> 用蒸馏做小模型或 draft model
-> 用 QLoRA 降训练门槛
-> 用量化和 serving 优化降推理成本
-> 用评测闭环控制回归
六、评测:蒸馏项目成败主要死在这里
蒸馏后的学生模型通常会在平均指标上看起来不错,但在这些地方掉坑:
- 拒答边界变差:该拒不拒,不该拒乱拒;
- 长上下文能力退化;
- 工具调用参数格式不稳定;
- 领域术语幻觉增加;
- 数学/代码题会模仿老师的解题口吻,但关键步骤错;
- 多轮对话里忘记前置约束;
- 安全数据过量导致回答过于保守;
- 合成数据过量导致表达同质化。
所以蒸馏评测至少要有四组:
| 评测集 | 目的 |
|---|---|
| capability set | 看核心能力是否保住 |
| regression set | 看旧能力有没有被蒸坏 |
| adversarial set | 看边界条件、拒答、安全 |
| production replay | 用真实日志回放看线上分布 |
更重要的是做成本指标:
cost_per_1k_requests
p50/p95 latency
tokens_per_second
GPU memory per replica
batch efficiency
failure retry rate
如果只看 benchmark,不看成本账本,蒸馏就会变成论文式优化;如果只看成本,不看回归,蒸馏就会变成线上事故的前奏。
七、一个比较稳的落地方案
假设目标是把一个 70B 级教师模型的企业问答能力迁移到 7B/14B 学生模型,可以这样做:
- 从线上日志、FAQ、工单、人工标注集中抽 5-10 万条种子任务;
- 用教师模型生成 answer、short rationale、evidence、refusal reason;
- 用规则过滤 schema、引用、长度、敏感词;
- 用第二个模型做 judge,打 factuality、helpfulness、format 分;
- 人工抽检每个 bucket,而不是只抽总体样本;
- 先做 LoRA/QLoRA SFT,确定数据有效;
- 再引入 DPO,优化“好答案 vs 坏答案”的边界;
- 对量化版本做蒸馏恢复;
- 用 production replay 验证延迟、成本、错误分布;
- 灰度上线,日志反哺下一轮数据。
不要一开始就追求“蒸一个通用大模型”。更好的起点是蒸一个稳定的业务能力包:例如客服摘要、SQL 生成、代码审查、文档问答、智能路由、工单分类。范围越清楚,评测越能闭环,蒸馏越容易变成可靠工程,而不是一次性实验。
结论
蒸馏的本质是把昂贵模型里的可迁移行为,变成便宜模型可学习的数据和 loss。它能降成本、降延迟、提高部署弹性,也能把推理模型的某些能力迁移给更小模型。
但蒸馏不是万能压缩按钮。它要和 SFT、LoRA/QLoRA、DPO/RLHF/RLAIF、量化、剪枝、MoE、自训练、speculative decoding、评测回归一起看。越成熟的训练体系,越不会问“要不要蒸馏”,而是问:
这个能力应该通过什么信号迁移?
学生模型容量够不够?
训练后便宜了多少?
哪些能力不能掉?
线上如何发现蒸坏了?
能回答这些问题,蒸馏才真正从技巧变成基础设施。
参考资料
- Geoffrey Hinton, Oriol Vinyals, Jeff Dean: Distilling the Knowledge in a Neural Network
- Cheng-Yu Hsieh et al.: Distilling Step-by-Step! Outperforming Larger Language Models with Less Training Data and Smaller Model Sizes
- Edward J. Hu et al.: LoRA: Low-Rank Adaptation of Large Language Models
- Tim Dettmers et al.: QLoRA: Efficient Finetuning of Quantized LLMs
- Long Ouyang et al.: Training language models to follow instructions with human feedback
- Rafael Rafailov et al.: Direct Preference Optimization: Your Language Model is Secretly a Reward Model
- Yuntao Bai et al.: Constitutional AI: Harmlessness from AI Feedback
- DeepSeek-AI: DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
- Yaniv Leviathan, Matan Kalman, Yossi Matias: Fast Inference from Transformers via Speculative Decoding