模型蒸馏2026:用真实工具从大模型训练小模型
70B的教师模型能带出7B的学生模型,还保留大部分质量——这就是蒸馏,也是各家推出廉价模型的常见做法。开源工具怎么落地,数据、超参、失败模式各是什么,这篇讲完整流程。
模型蒸馏2026:用真实工具从大模型训练小模型
70B的教师模型能带出7B的学生模型,还保留大部分质量——这就是蒸馏,也是各家推出廉价模型的常见做法。开源工具怎么落地,这篇按"原理→数据→训练→评测"走一遍。
一、蒸馏到底在学什么
三种层次,效果和成本递增:
| 类型 | 学生学到什么 | 数据形态 | 成本 |
|---|---|---|---|
| 响应蒸馏 | 教师的最终答案 | 提示+答案 | 低,最常见 |
| 推理链蒸馏 | 教师的中间推理步骤 | 提示+推理过程+答案 | 中 |
| 分布蒸馏 | 教师的token概率分布 | 需要logits | 高,需能导出logits的教师 |
多数团队只需要前两种。第三种要拿教师的完整概率分布,闭源API做不到,本地部署教师才行。
一句实话:蒸馏不是把大模型"压缩",是让学生模仿教师在你这类任务上的行为。教师不会的东西,学生也学不会。
二、离线还是在线
| 方式 | 做法 | 优点 | 缺点 |
|---|---|---|---|
| 离线 | 教师先跑完整数据集,把输出存成文件,学生离线训练 | 便宜、可复现、可反复过滤 | 学生看不到教师对新样本的反应 |
| 在线 | 训练过程中教师实时打分 | 对齐更细 | 教师推理成本随训练步数线性上涨 |
先离线跑通,觉得效果不够再考虑在线。绝大多数场景离线足够。
三、六步走完一次蒸馏
第1步:收提示。 从真实业务日志里抽1000-10000条,覆盖你的任务类型。别用公开数据集凑数,分布不对等于白训。
第2步:教师生成。 用最强模型批量跑,要求输出推理过程("先分析再给结论"),存成 jsonl:
{"messages":[{"role":"user","content":"提示词"},{"role":"assistant","content":"推理过程 + 最终答案"}]}
第3步:过滤。 这是收益最高的一步。规则过滤(长度异常、格式不合、拒答、重复)+ 模型打分过滤(用另一个模型给答案打1-5分,只留4分以上)。留一半数据、质量翻倍,通常比多训三个epoch有用。
第4步:SFT训练。 用 LoRA 起步,别一上来全量微调:
from datasets import load_dataset
from trl import SFTTrainer, SFTConfig
ds = load_dataset("json", data_files="distill.jsonl", split="train")
trainer = SFTTrainer(
model="Qwen/Qwen2.5-7B-Instruct",
train_dataset=ds,
args=SFTConfig(
output_dir="student",
num_train_epochs=2,
learning_rate=2e-4,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
max_length=4096,
),
)
trainer.train()
接口在各版本间会变,以 TRL 当前文档为准。显存不够就用 Unsloth 或 4bit 量化加载。
第5步:评测。 留出200-500条教师没见过、你也没调过参的样本,同时跑教师、学生、原版基座三方对比。看三件事:任务准确率、格式合规率、平均输出长度(学生常常学会废话)。
第6步:迭代。 大部分问题不是训练不够,是数据不对:某类任务学生总错,就针对这类补200条教师样本重训。
四、关键超参怎么定
| 参数 | 建议起点 | 说明 |
|---|---|---|
| 数据量 | 1000-10000条 | 质量优先于数量,先小后大 |
| epoch | 1-3 | 过拟合在SFT里很常见 |
| 学习率 | 1e-4 ~ 2e-4(LoRA) | 全量微调要低一个数量级 |
| LoRA rank | 16-64 | 任务越偏离基座,rank越大 |
| max_length | 覆盖95%样本的长度 | 截断会悄悄丢掉答案 |
| batch | 显存能塞多少塞多少 | 配合梯度累积凑有效批量 |
五、四个常见失败模式
- 不过滤就训练:学生把教师的幻觉、格式错误、废话一起学走。过滤是最高杠杆的一步。
- 容量错配:任务需要多步推理,却选了1.5B学生,怎么训都差一截。先确认任务复杂度与学生规模匹配。
- 只学答案不学过程:教师答案对,但学生学不到推理路径,换个问法就崩。要求教师输出推理过程。
- 评测集泄漏:评测样本混进了训练数据,指标虚高,上线即翻车。划分要按来源而不是随机切。
六、什么时候不值得蒸馏
| 场景 | 更合适的做法 | 原因 |
|---|---|---|
| 调用量小、任务稳定 | 直接调API | 蒸馏要数据工程和训练成本,回不了本 |
| 知识每天变 | RAG | 蒸馏固化的是行为,不是知识,更新要重训 |
| 必须给出来源引用 | RAG | 学生模型无法凭空保持可追溯的引用 |
| 数据不能出内网 | 蒸馏 | 这是蒸馏最强的场景,教师也可以在本地 |
| 高并发 + 固定任务 | 蒸馏 | 单次成本能降一到两个数量级 |
一句话:蒸馏买的是"固定任务上的成本下降",不是"能力提升"。任务还在变的时候做蒸馏,等于给流沙浇水泥。
七、常见问题
Q:蒸馏和微调什么关系? A:蒸馏是"数据从哪来"的问题,微调是"怎么训"的问题。蒸馏通常用SFT实现。
Q:学生能超过教师吗? A:在窄任务上可能,因为学生只专注一个分布。通用能力上不会。
Q:需要多少显存? A:7B模型 LoRA + 4bit,单张消费级大显存卡可跑;全量微调要专业卡。先从LoRA开始。
Q:能蒸馏闭源模型吗? A:技术上可以拿它的输出做数据,但要先看服务条款是否允许用输出去训练竞争模型,这块各家规定不同。
注:框架接口与显存需求随版本变化,具体以 TRL、Unsloth、PEFT 官方文档为准。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。