跳到主要内容

LLM 蒸馏

知识蒸馏(Knowledge distillation)是一种模型压缩技术,它训练一个较小的学生模型(student model)来复现较大教师模型(teacher model)的行为。其结果是得到一个在推理时更小、更快、更便宜运行的模型。更重要的是,它保留了教师模型的绝大部分能力。

一个简单的理解方式:

  • 教师模型已经擅长解决该任务
  • 学生模型通过复制教师模型的输出来学习

量化(它降低现有权重的精度)不同,蒸馏会产生一个全新的模型。这两种技术是互补的。蒸馏后的模型也可以再进行量化,以进一步提升效率。

DeepSeek-R1(671B 参数)是蒸馏能带来什么的一个很好的例子。研究人员用它把推理能力迁移到更小的模型中,包括 1.5B、7B、8B、14B、32B 和 70B 等变体。它们以教师模型的风格进行推理,而推理成本只是其一小部分。

蒸馏的原理

标准训练使用硬标签(hard labels)来教导模型: 即给定输入的正确答案。

蒸馏则让学生在教师的软标签(soft labels)上训练,也就是对下一个可能的 token 的完整概率分布。

这些软标签比单个正确答案包含更丰富的信息。例如,如果教师给"car"分配了 40% 的概率、给"vehicle"分配了 30% 的概率,学生学到的就不仅仅是答案,还有哪些替代选项是合理的,以及教师的置信度如何。这有助于学生更好地泛化。

学生模型通常使用以下目标的组合进行训练:

  • 蒸馏损失(Distillation loss): 衡量学生输出分布与教师输出分布的接近程度。
  • 交叉熵损失(Cross-entropy loss): 在带标签数据上进行标准的下一个 token 预测。

这些目标被组合起来,以平衡知识迁移与任务性能。

蒸馏的类型

响应蒸馏(Response distillation)

训练学生匹配教师的输出 token 概率。这是最常见的形式,因为它只需要访问教师的输出。它扩展性好,并被广泛用于生产更小的通用模型。

特征蒸馏(Feature distillation)

训练学生模仿中间表示: 隐藏状态、注意力模式或层激活。这需要访问教师的内部结构,实现成本更高,但对于结构相似的模型可以产生更好的知识迁移。

思维链蒸馏(Chain-of-thought distillation)

教师生成完整的推理轨迹,即问题的逐步解决方案,然后学生在这些轨迹上进行微调。DeepSeek-R1 的蒸馏变体就是这样创建的。它显著提升了较小模型的推理能力,尤其是在数学、编程和逻辑问题求解等任务上。

何时使用蒸馏

以下情况下,蒸馏是一个不错的选择:

  • 你需要一个更小、更快的模型,用于对延迟敏感或资源受限的部署。
  • 大型模型的量化版本仍然超出你的显存或延迟预算。
  • 你有可用的强大教师模型,并且能承担训练成本。
  • 你想把特定能力(如推理或编程)迁移到更小的模型中。

以下情况下,蒸馏可能不是正确的选择:

  • 学生与教师之间的能力差距过大,学生架构无法吸收。
  • 你没有足够的算力在训练期间对教师模型进行推理。
  • 现有模型的量化或微调版本已经满足你的需求。
  • 你需要尽可能高的精度。
备注

并非所有模型都能被蒸馏。有些许可证禁止使用模型输出来训练其他模型。

蒸馏如何影响推理

蒸馏发生在训练期间,但收益在推理时体现。

通过创建更小的模型,它直接提升了服务效率:

  • 更低的延迟: 更快的 token 生成
  • 更低的内存占用: 需要更少的 GPU 内存
  • 更高的吞吐量: 相同硬件上可以并行运行更多请求
  • 更低的成本: 每个请求所需的计算更少

换句话说,蒸馏在应用任何运行时优化之前,就先降低了推理的基准成本。

你可以这样理解:

你可以在你的推理系统中组合这些技术: 大型模型 → 蒸馏 → 更小的模型 → 量化(如果需要)→ 优化服务 → 部署

常见问题

蒸馏的主要挑战是什么?

蒸馏可能很有效,但它有以下权衡:

  • 需要额外的训练计算
  • 取决于教师模型的质量
  • 在复杂任务上可能会损失性能
  • 需要仔细的数据生成和过滤

因此,许多团队从量化开始,只在需要时才使用蒸馏。

蒸馏和量化有什么区别?

下面是一个并排对比:

蒸馏量化
改变什么训练一个新的、更小的模型降低现有模型的精度
输出一个不同的模型(学生模型)同一个模型,权重精度更低
发生时间训练期间训练之后
所需计算高,需要训练低,可以快速应用
对体积的影响减少参数数量减少每个参数的内存占用
易用性更复杂更容易应用
典型用例构建更小的生产模型优化现有模型以便部署

其他资源