完整文档索引见 llms.txt。 在任意 URL 后追加 `.md` 即可查看该页面的 Markdown 版本。
LLM 蒸馏
Knowledge distillation is a model 压缩技术,它通过训练一个更小的 student model 来复现更大 teacher model 的 行为。最终得到的模型更小、更快、推理成本更低。更重要的是,它通常还能保留 teacher 的大部分能力。
可以把它简单理解为:
- teacher 已经很擅长解决这项任务
- student 通过模仿 teacher 的输出学习
和量化不同,量化是降低现有权重的精度, 而蒸馏会产出一个全新的模型。这两种技术是互补的;蒸馏后的模型还可以进一步 量化,以获得更高效率。
DeepSeek-R1(671B 参数)就是一个很好的例子。研究人员利用它把推理能力迁移 到更小的模型中,包括 1.5B、7B、8B、14B、32B 和 70B 等变体。这些小模型能以 类似于 teacher 的风格进行推理,但推理成本只占其中一小部分。
蒸馏如何工作
标准训练使用的是 hard label,也就是给定输入对应的正确答案。
蒸馏则让 student 学习 teacher 的 soft label,也就是对所有可能 next token 给出的完整概率分布。
这些 soft label 比单一正确答案包含更丰富的信息。比如,如果 teacher 给 "car" 40% 概率、给 "vehicle" 30% 概率,student 学到的不只是答案本身, 还会知道哪些替代项同样合理,以及 teacher 对答案有多大把握。这会帮助 student 获得更好的泛化能力。
通常会结合以下目标来训练 student:
- Distillation loss:衡量 student 对 teacher 输出分布的拟合程度。
- Cross-entropy loss:在标注数据上做标准的 next-token prediction。
把这些目标结合起来,是为了在知识迁移与任务表现之间取得平衡。
蒸馏的类型
响应蒸馏(Response distillation)
student 被训练去匹配 teacher 输出的 token 概率。这是最常见的一种形式, 因为它只需要访问 teacher 的输出即可。它扩展性好,也被广泛用于生产更小的 通用模型。
特征蒸馏(Feature distillation)
student 被训练去模仿中间表示,例如 hidden states、attention pattern 或层 激活值。这要求能够访问 teacher 的内部状态,实现成本更高,但对于架构相似的 模型来说,往往能带来更好的知识迁移效果。
思维链蒸馏(Chain-of-thought distillation)
teacher 会生成完整的推理轨迹,也就是问题的逐步解答过程,而 student 会在 这些轨迹上做 fine-tuning。DeepSeek-R1 的蒸馏变体就是这样构建出来的。这种 方法显著提升了小模型的推理能力,尤其是在数学、编程和逻辑求解等任务上。
什么时候适合使用蒸馏
如果满足以下情况,蒸馏通常是个不错的选择:
- 你需要一个更小、更快的模型,用于延迟敏感或资源受限的部署场景
- 某个大模型即便量化后,仍然超出了你的 VRAM 或延迟预算
- 你能够使用一个足够强的 teacher model,并承担训练成本
- 你想把某项特定能力(如推理或编程)迁移到一个更小的模型上
在以下情况下,蒸馏可能并不合适:
- student 和 teacher 之间的能力差距太大,student 的架构无法承接
- 训练期间你没有足够算力在推理模式下运行 teacher model
- 现有模型的量化版或 fine-tuned 版本已经满足需求
- 你追求的是尽可能高的最终精度
蒸馏如何影响推理
蒸馏发生在训练阶段,但收益会体现在推理阶段。
通过生成更小的模型,它会直接提升服务效率:
- 更低延迟:token 生成更快
- 更低内存占用:需要的 GPU 内存更少
- 更高吞吐量:同样硬件上可以并行跑更多请求
- 更低成本:每个请求所需算力更少
换句话说,在任何运行时优化开始之前,蒸馏就已经先把推理的基线成本压低了。
可以这样理解:
- 蒸馏让模型变小
- 量化让模型变轻
- 推理优化(例如 prefix caching)让服务更高效
在推理系统里,这些技术可以组合使用:大模型 → 蒸馏 → 更小的模型 → 量化(如果需要)→ 优化服务 → 部署
常见问题
蒸馏的主要挑战是什么?
蒸馏确实有效,但它也有以下权衡:
- 需要额外的训练算力
- 高度依赖 teacher model 的质量
- 在复杂任务上可能出现性能损失
- 需要仔细做数据生成与筛选
因此,很多团队会先尝试量化,只有在确实需要时才进一步做蒸馏。
蒸馏和量化有什么区别?
下面是一个并列对比:
| 蒸馏 | 量化 | |
|---|---|---|
| 改变的对象 | 训练一个新的、更小的模型 | 降低现有模型的精度 |
| 产出 | 不同的新模型(student) | 同一个模型,但权重精度更低 |
| 发生阶段 | 训练期间 | 训练之后 |
| 所需算力 | 高,需要重新训练 | 低,通常可快速应用 |
| 对体积的影响 | 减少参数数量 | 降低每个参数所需内存 |
| 使用难度 | 更复杂 | 更容易上手 |
| 典型用途 | 构建更小的生产模型 | 为部署优化现有模型 |