大模型蒸馏

大模型蒸馏

模型蒸馏不是复制别人的模型参数,而是让一个小模型学习大模型的输出行为

误区:蒸馏不是把大模型压缩一下,就变成小模型

真实的蒸馏过程:

  • 准备一批数据
  • 让强模型回答这些问题
  • 把强模型的答案整理成训练数据
  • 用这些数据训练一个小模型
  • 看小模型有没有学到强模型的能力

所以蒸馏学的不是参数,而是行为

为什么要蒸馏?

大模型太贵、太慢、太重

做大模型应用的时候,会有三个现实问题

  • 调一次模型,成本不低
  • 输出长一点,延迟就上来了
  • 想私有化部署,机器成本顶不住

但是很多业务场景,其实不需要一个全能大模型

只要在某个小任务上稳定、便宜、速度快,这就是蒸馏的价值

把强模型在某个任务上的能力,迁移到一个更便宜、更快、更好部署的小模型

硬蒸馏

只学习最终答案,学生模型只看到这个最终答案,然后学习怎么输出类似答案

通常是:

复制代码
问题 -> 老师最终回答

这种方式简单、便宜、常见

特别是黑盒api场景,你只能拿到模型输出文本,拿不到模型内部概率分布,所以现实中很多蒸馏都是硬蒸馏

软蒸馏

不仅仅学答案,还学习老师的判断分布

软蒸馏学的是老师模型对多个答案的概率分布,所以信息更细

但问题也很现实,软蒸馏需要拿到logits或概率分布,很多闭源API根本不给

所以大家听到有人说"蒸馏其他厂商模型,多数时候不是严格意义上的软蒸馏,而是黑盒硬蒸馏或者响应蒸馏

白盒蒸馏和黑盒蒸馏

白盒蒸馏:你能看到老师模型内部的一些信息

比如:

  • logits
  • 概率分布
  • 中间层表示
  • attention信息

这钟蒸馏更正统,信息量更大。通常发生在自家模型体系内,或者开源模型上。

黑盒蒸馏:你看不到模型内部,只能通过API问他问题,拿到回答

这就是大多数闭源模型API的情况

只能看到它最终输出,所以黑盒蒸馏常见做法是:

  • 准备大量问题
  • 调用强模型API
  • 收集输出
  • 清洗成训练数据
  • 拿去微调自己的小模型

黑盒蒸馏技术上不复杂,麻烦的是成本、质量、规模、合规

蒸馏其他厂商模型,是不是公开的秘密

大模型厂商都不希望自己的模型被别人蒸馏

训练一个强模型,需要花费大量算力,数据,工程,人力和对齐成本。

所以,用自家大模型蒸馏自家小模型,没问题

用开源模型和许可允许的数据做蒸馏,没问题

但是批量调用闭源模型api,拿输出训练竞争模型,很可能违反服务条款

蒸馏大模型有哪些方法

Response Distillation:学最终回答

很多垂直小模型,本质上就是大量高质量指令数据+SFT

缺点也很明显:学生只学到了老师最后怎么回答,不一定学到老师为什么这么回答

CoT 蒸馏:学习推理过程

Chain of Thought,思维链

普通蒸馏只学习答案,CoT蒸馏让老师模型把推理过程也写出来,但是CoT数据必须清洗好

Preference Distillation:学偏好判断

大模型不只是回答,还会判断哪个回答更好

这类蒸馏类似于对齐,让小模型更像强模型一样判断"什么是好回答"

Self-Instruct:让模型造训练题

让强模型自己生成题目,生成答案,生成变体

但是注意,强模型生成的数据,不等于高质量数据

生成数据很容易同质化,也容易带进模型自己的偏见和错误

真正有价值的是:生成之后的筛选,去重,评测,人工抽检

领域蒸馏:只蒸馏一个能力

不是把一个通用大模型完整蒸馏出来,而是只蒸馏某个具体的能力

全量复刻一个强模型太难了,但是复刻它在一个小任务上的表现,现实很多

蒸馏能学到什么,学不到什么?

蒸馏不是魔法,学生模型不是看了老师答案,就可以突然变成老师

能学到什么?

  • 常见问题的回答方式
  • 某个任务的输出格式
  • 老师模型的表达风格
  • 一部分领域的知识
  • 一部分推理套路
  • 一部分偏好判断

学不到什么?

  • 老师模型的完整参数
  • 老师模型的全部世界知识
  • 老师模型的全部泛化能力
  • 老师模型内部真实推理机制
  • 超过学生模型容量的复杂能力

这里有一个关键点:

学生模型容量是天花板

一个很小的模型,不可能因为蒸馏数据多,就完整学会强模型的全部能力

它能学到的一些解题套路,但底层知识结构和能力上限不一样

蒸馏和微调、量化、剪枝有什么区别?

微调:让一个已有模型学习你的任务数据

比如你拿客服问答数据去训练一个模型,让它更懂你公司的客服场景

微调强调的是:学任务数据

蒸馏:让学生模型学习老师模型的输出行为

老师开源是强模型,也可是多个模型的集成

蒸馏强调的是:学老师模型

量化:降低模型参数的数值精度

让模型占用显存更少、推理更快

量化强调的是:降低计算和存储成本

剪枝:删掉模型里面不重要的结构

比如删除部分神经元,通道,层,让模型更小

剪枝强调的是:减少模型结构规模

这几者不是互斥的,通常真实工程里经常组合使用:先蒸馏出来一个小模型,再量化部署

或者

先用强模型生成领域数据,再SFT微调,再做量化上线

他们依次解决的问题是:

  • 蒸馏:能力迁移
  • 微调:任务适配
  • 量化:降低精度
  • 剪枝:减少结构

蒸馏有那些应用场景?

最核心的场景,就是降本增效

1.降低API成本

如果一个业务每天要调用强模型几百万次,成本会很高

这时候可以先让强模型生成高质量数据,再训练一个小模型承接高频任务

强模型处理复杂问题,小模型处理常见问题

这就是典型的成本分层

2.降低延迟

强模型输出慢,小模型输出快

对客服、搜索、推荐、实时交互类场景来说,延迟很关键

用户不是来欣赏模型思考的,用户是来要结果的

3.端侧部署

手机、PC、本地设备,不可能都跑大模型

端侧模型需要小、快、省资源

蒸馏就是把云端强模型的一部分能力迁移到端侧模型的一种方式

4.企业私有化部署

训练一个领域小模型,在内网环境里面跑

5.垂直领域小模型

用强模型辅助生成领域数据,在结合真实业务数据,训练一个更懂业务的小模型

6.RAG系统里面的辅助模型

RAG不一定所有环节都用大模型

某些环节可以使用小模型承接

7.Agent系统里的子任务模型

Agent 系统里,很多判断不需要最强模型

这时适合蒸馏的小任务

相关推荐
Benny_Tang1 小时前
P9527 [JOIST 2022] 洒水器 / Sprinkler 题解
c++·算法
程序员清风1 小时前
Java 智能体开发:从对话接口到任务执行
java·人工智能·python
ai小陈1 小时前
GPU服务器租用容器实战:Docker数据卷持久化与安全重建
服务器·人工智能·安全·docker·ai·gpu算力
打工仔折腾 AI1 小时前
从零写一个CAD 02:实体容器、Esc取消与键盘失灵的排查
人工智能·后端·python·性能优化
QYR-分析1 小时前
内燃机配套核心部件:汽车摇臂市场稳健增长,5.0% CAGR 背后的产业博弈
人工智能·汽车
kiracrimson1 小时前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
千里码aicood1 小时前
基于CNN的陕西降雨量气象分析
人工智能·神经网络·cnn
码云之上2 小时前
从搜索框到 Agent:Chatbot 联网搜索的技术演进
人工智能·架构·前端框架
guslegend2 小时前
Vibe Coding 最后一公里:华为生产级 Coding Agent 效果调优实录
人工智能