模型压缩
在几乎不牺牲精度的前提下把模型变小、变快、变便宜——但三者通常只能同时占两样
定义
模型压缩是一类在尽量保持精度的前提下,减少模型参数量、显存占用与计算量的技术。主流手段包括量化(用更低的位宽表示权重与激活)、知识蒸馏(让小模型学习大模型的输出)、剪枝(移除冗余的权重或结构)以及低秩分解(用若干小矩阵近似一个大矩阵)。
直观理解
把一间塞满杂物的大房子收纳成一套紧凑公寓:量化是把每件物品的尺寸标注从毫米改成厘米,省下大量标签却不改变物品本身;剪枝是扔掉那些从没用过的物件;蒸馏是让徒弟照着师傅做好的成品练手,而不是重走师傅摸索的弯路。三种做法都能腾出空间,但也都可能顺手丢掉某件不起眼却关键的东西。
压缩方法的分类:量化改位宽、蒸馏换模型、剪枝删结构、分解降秩,四条路径可以叠加使用
不同量化方案在 LLaMA 级模型上的困惑度增量(示意量级,越小越好,FP16 为基准):4 位在多数任务上接近无损,2–3 位开始明显退化
工作原理
- 01
量化:用更少的比特表示数值
把一个 FP16 浮点数映射成 INT8 或 INT4 整数,需要先确定一组缩放因子(scale),尽量覆盖权重的取值范围。权重分布均匀、激活分布带离群值时,训练后量化(PTQ)就够了;否则需要量化感知训练(QAT),在训练时就让模型“习惯”低位宽。
- 02
蒸馏:把教师的知识搬进学生
用大模型(教师)的输出概率分布作为软标签训练小模型(学生)。相比硬标签,软标签携带了“这个答案有多接近另一个答案”的信息,学生因此能以更小的体量学到更平滑的决策边界。
- 03
剪枝:找出并移除冗余
按权重的绝对值或重要性打分,移除影响最小的连接。非结构化剪枝去掉单个权重,稀疏度高但通用硬件不一定加速;结构化剪枝整块删掉神经元或注意力头,压缩比有限但能真正换来速度提升。
- 04
低秩分解:用两个小矩阵近似一个大矩阵
一个 m×n 的大矩阵若秩较低,可以写成 m×r 与 r×n 两个小矩阵之积,参数从 mn 降到 r(m+n)。SVD 是经典做法,LoRA 则把“低秩更新”用在了微调上——冻结原权重,只训练一对小矩阵。
压缩方案的代价-质量权衡:横轴为相对推理成本,纵轴为相对精度;理想区域在左上(低代价、高精度),悬停看具体方案
应用场景
- 端侧与移动部署:把模型塞进手机、车机或嵌入式设备的内存
- 降低推理成本:INT4 权重让同样的显存同时服务更多请求
- 蒸馏小模型:用高并发、低延迟的小模型承接结构化任务
- 大模型低比特部署:在消费级显卡上运行原本需要数据中心的大模型
常见误区
- “4 位几乎无损”是统计上的常见结果,不是普遍保证。个别敏感层或长尾任务在低位宽下会明显掉点,需要逐层评估而不是一刀切。
- 稀疏不等于加速。非结构化剪枝得到的稀疏矩阵,在通用 GPU 上往往因为访存不规则而得不到实际提升,除非硬件或内核专门支持。
- 蒸馏无法超越教师的上限,学生会继承教师的偏见与幻觉。把大模型的缺陷“压”进小模型时,缺陷也一并被保留了下来。
关键术语
- 量化
- 用低位宽整数表示浮点权重与激活
- 知识蒸馏
- 用大模型的软输出训练小模型
- 剪枝
- 移除影响力低的权重或整块结构
- 低秩分解
- 用两个小矩阵之积近似一个大矩阵