知识蒸馏模型压缩

Knowledge Distillation (KD)

Knowledge Distillation 知识蒸馏是经典模型压缩技术:先训练一个大而准的教师模型,再让一个小得多的学生模型去拟合教师输出的 Softmax 软概率而非硬标签,在参数量降至 1/10 时保留教师 90% 以上的能力,是高吞吐场景的标配。

详细解释

知识蒸馏(Knowledge Distillation,缩写 KD,也叫 Teacher-Student 师生学习) 由 Hinton 2015 年论文《Distilling the Knowledge in a Neural Network》系统提出,至今仍是”大模型变小模型、贵模型变便宜模型”的首选手段,没有之一。

直觉理解:你要教小学生做”狗和狼分类”——

  • 普通训练(学硬标签 Hard Label):只告诉他”这张图 = 狗,那张图 = 狼”。他就学了个皮毛,遇到长得像狼的狗大概率错。
  • 知识蒸馏(学软标签 Soft Label / 教师概率分布):教师模型(一个大的 ResNet/ViT)说”这张 0.9 狗、0.08 狼、0.01 狐狸、0.01 其他”。小学生不仅学到了”这是狗”,还顺便学到了”狗和狼长得像、和狐狸也有点像”这种类别间相似性——这 0.08 里藏的暗知识(Dark Knowledge)才是 KD 的精华

LLM 时代,KD 演变成 3 个层次:

蒸馏位置名字让学生学老师的什么典型代表
输出层 Logits传统 Logit KD学 Softmax 之前的 Logits 分布Hinton 原版,最常用
中间层Attention / Hidden State KD学教师每层 Attention 权重矩阵、每层 hidden statesMiniLLM、GKD、MT-Bench 上常用
轨迹级(新)轨迹蒸馏 / Chain-of-Thought KD学教师对复杂问题的”完整推理路径(CoT)+ 答案”用 GPT-4o 生成 10 万条 CoT 让 7B 学生学

对 AI API 用户最关心的现实意义:一个公司用 GPT-4o 跑了 1 年线上业务,积累了 10 万条”用户问题 → GPT-4o 回答”的对话。直接用这些数据对一个开源 Llama 3 8B / Qwen2.5 7B 做 SFT(本质就是 KD 的输出层变种,学软概率的近似),做出来的”小 GPT-4o”能达到 GPT-4o 85 至 95% 的效果,推理成本从 每百万 tokens 几十块降到几毛钱——这就是”蒸馏 + 自部署”的 ROI。

典型场景 ROI 对照表(真实工业界数字)

原部署方案蒸馏后方案模型参数量比效果保留率成本下降比例延迟下降比例
GPT-4o(API)5 万日活客服问答自部署 Qwen2.5 14B Q5_K_M GGUF约 1:3092%95%(¥5k/天 → ¥250/天)80%(首字 800ms → 160ms)
Claude 3.5 Sonnet 法律合同抽取自部署 DeepSeek-V2-Lite 16B + LoRA + KD约 1:4089%93%65%
自部署 Llama 3 70B(多卡集群)自部署 Qwen2.5 7B(单卡) + Hidden State KD1:1090%90%(30 卡 → 3 卡)70%
文生图 SDXL(每张 6 秒)蒸馏版 SDXL-Turbo / LCM-LoRA(1 至 4 步)相当95% + 风格接近85%(推理步数 50 → 1)95%(6s → 0.3s)

做一次 KD 的标准 5 步流程(LLM 场景)

  1. 收集 / 合成教师数据:从你的真实业务日志导出”用户 Prompt → Teacher 输出结果”的正样本,一般需要 1 万到 100 万对。数据质量 >> 数据量,脏数据蒸馏出来的学生就是个差的 GPT-4o。
  2. 选学生模型:选一个参数量为 Teacher 1/5 至 1/20 的开源模型。要中文选 Qwen / Yi / DeepSeek;要英文选 Llama 3 / Mistral;要代码选 CodeLlama / DeepSeek-Coder。
  3. SFT 预训练 + KD Loss:标准做法用 加权 Loss = α · CE(学生,Teacher 输出文本) + (1-α) · KL(学生 Logits,Teacher Logits),α 一般取 0.7(以学真实文本为主,KL 学暗知识为辅)。开源实现框架 TRL / axolotl / unsloth 全内置,一行开关就开。
  4. 评测对齐:跑 MT-Bench / 你自己的业务 Eval 集,看学生和 Teacher 的胜率(Win Rate)——一般 85% 以上就可以上线了。
  5. 上线 + 回环:学生模型上线后,把”用户反馈不满意的 case”攒到人工审核池,定期用 Teacher 补答案,再蒸馏一版新学生——形成”越用越便宜越好用”的闭环。

唯元智创 的企业服务套餐里提供 “GPT-4o → 开源模型” 蒸馏一站式:抽你业务日志 → 数据清洗 → 蒸馏训练 → 量化自部署 + A/B 评测全流程做,不满意不收费(效果保 85% 胜率)。

常见问题

只用 SFT 学 Teacher 的输出文本,和加 KL 蒸馏 Loss 差别大吗?
在 10 万条数据量级,差别 2–4 个点;在 100 万条数据量级差别缩小到 1% 以内。原因很直觉:当样本足够多时,学 Hard Label(教师输出文本的 one-hot)的分布极限就是教师的 Soft Label 分布,KL 项的作用会被 CE 覆盖。所以如果你能拿到几十万条以上的高质量教师数据,直接做 SFT(本质是对教师输出的蒸馏)就够用了,不用折腾 Logits KD——后者需要同时在一张卡上加载两个模型,显存 + 时间成本翻倍。只有数据量小(几千~几万)的场景,KL 项能显著提升效果。
用 GPT-4o 当教师蒸馏自己的小模型商用,合规吗?
RLAIF 里那个灰色地带一样,严格看 OpenAI ToS 有风险(“禁止输出用于构建竞品模型”那条),社区已经有用户被封号的传闻。最安全的 3 条路:(1)用唯元智创 多模型接入里明确允许做训练数据来源的开源 / 半开源模型(Llama 3、Qwen2.5、DeepSeek、Mistral 官方明确允许输出被用作蒸馏数据)当教师;(2)把 GPT-4o 当教师 → 让人工审一遍所有输出再 SFT(合同里这是你自己的人类标注数据,不是 GPT 的);(3)最彻底:用你家业务真实的人类客服/专家回答做 Teacher(真实 SFT),效果反而往往比 GPT-4o 还贴合你的业务。
蒸馏和 QLoRA 微调该选哪个?我想让开源模型在我的业务上效果变好。
一句话判别:你有”一个更强的教师模型在你业务上的理想输出(答案)“吗?→ 有就蒸馏(或等价的 SFT on Teacher Output),效果上限更高;没有,只有你自己的业务历史偏好对 → 走 QLoRA + DPO(学偏好方向)。两者也完全可以叠加:阶段 1:SFT on Teacher Output(蒸馏学”正确的答案长相”);阶段 2:QLoRA + DPO on 你的偏好对(学”我更喜欢哪种回答风格”);阶段 3:量化 + AWQ 压成 GGUF / AWQ 自部署。三阶段走完你就得到了一个”90% GPT-4o 效果、1/40 成本、在你业务上表现更贴合你偏好”的私有模型,这是 2025 年大多数中等体量 AI 公司的最终形态。