一、模型压缩的背景(基于大模型的高成本问题)
1. 高成本部署
大模型的优点有很多:文本分类、情感分析、常用序列标注、简单信息抽取。但是缺点也不少,比如应用的成本高
DeepSeekR1671B模型有6710亿个参数。假设每个参数占用4字节(float32),总内存需求约为2.684TB。
使用80GB内存的NVIDIA A100或H100GPU,每个GPU能存储约20B参数(80GB/4字节≈20B参数)
因此至少需要:671B/20B≈34个GPU
现在京东上A100 80G的报价大概是17万人民币,那么部署一套deepseekR1需要 17W*34=578W
小结:
大模型可以完成很多复杂任务,但是也有自己的缺点,比如大模型的幻觉、数据过时等问题,而上文中的高成本问题,有多种方式可以解决,其中很重要的一种就是模型压缩
2. 适配轻量化设备
可以将模型量化或者裁剪之后,部署到摄像头或者手机上
二、大模型压缩的三种思路
1. 模型裁剪
1.1 模型裁剪的分类
模型裁剪分为非结构化裁剪和结构化裁剪两大类。
非结构化裁剪基于模型权重,可以考虑将其中不重要的参数置0
训练后的模型权重取决于多个复杂因素,整体符合正态分布
1.2 模型裁剪的优点:
显著减少参数量和计算量,加快推理速度。
结构化剪枝后可以适配轻量化设备
2. 模型量化
模型裁剪的思路是减少参数总量,模型量化的思路是减少每一个参数的大小。
自然界中的数字可以拥有无限精度,计算机中的数字必须指定精度,如果要降低模型大小和算力,可以把高精度数字转化为低精度数字
2.1 量化的分类
按照量化的时间点,可以分为训练后量化和量化感知训练(QLoRA训练);
按照量化的粒度,可以分为统一的精度量化和混合量化(ViT)
按照对称性,可以分为对称量化和非对称量化
2.2 量化的优点
减小模型体积和显存占用
加快推理速度
2.3 量化的缺点
量化是一种有损压缩,必然会有精度损失(可以用混合精度和量化感知训练缓解)
3. 模型蒸馏
3.1 定义
模型蒸馏(Model Distillation)是一种将复杂模型(通常称为“教师模型”)的知识迁移到更简单、更高效的模型(称为“学生模型”)中的技术。其核心思想是通过模仿教师模型的输出来训练学生模型,使其在保持较小规模的同时,尽可能接近教师模型的性能。
3.2 步骤
一个典型的模型蒸馏过程包含以下三个步骤:
训练教师模型:在大规模数据上训练一个高性能但复杂的教师模型
知识迁移:用教师模型对训练数据进行推理,生成可训练的数据,数据的输出可以是中间层特征、软标签或者硬标签
训练学生模型:通过学习教师模型生成的数据,使学生模型预测结果接近教师模型的预测结果
3.3 模型蒸馏的优点
1、模型轻量化,
参数量显著压缩:BERT-base(110M参数)→ DistilBERT(66M参数),体积减少40%;TinyBERT(14.5M参数)仅保留BERT-base 13%的参数量。
2、推理加速,
学生模型推理速度提升2-5倍(如DistilGPT-2提速3倍);TinyBERT在手机CPU上延迟从500ms降至120ms。
3、如果学习了中间特征和软标签,可以提升小模型的泛化能力。
4、可以跨架构蒸馏
3.4 模型蒸馏的缺点
1、不可能超过教师模型
2、对温度非常敏感
3、学习中间层特征和软标签,成本较高
三、模型蒸馏的实现方式
1. 学习软标签
1.1 什么是软标签
我们有一篇文章,是诗人艾青的自传,其中涉及到战争年代与王震将军的往事,分类的时候会得到标签:
| 军事 | 文学 | 家居 | 体育 | 财经 | 其他 | |
|---|---|---|---|---|---|---|
| 软标签 | 0.2 | 0.7 | 0.0015 | 0.00003 | 0.001 | …… |
| 硬标签 | 0 | 1 | 0 | 0 | 0 | …… |
在得到硬标签之前,通常会有一个softmax层,它通常作为多分类或者归一化函数使用,公式为:$softmax(x)_i = \frac {e^{x_i}}{\sum _j e^{x_j}}$,输出的值都>0总和为1,由于指数函数的作用,这些值的大小差距会被拉开,这些值就是软标签
1.2 为什么学习软标签?
学习软标签的核心是通过教师模型的输出概率分布传递知识,使学生模型不仅能学习模型的最终结果,还能捕捉类别间的隐含关系,内容比硬标签更丰富,很适合作为学生模型学习的目标。
1.3 计算损失
计算两个分布之间的差异,应该使用KL散度:$D_{KL}(Pt \parallel Ps) = \sum{i} P_t(i) \log \frac{P_t(i)}{Ps(i)}$
D{KL}(Pt \parallel Ps) = \sum{i} P_t(i) \log \frac{P_t(i)}{P_s(i)}$
2. 学习中间层特征
2.1 什么是中间层特征
中间层特征指的是模型特定步骤输出的向量,在NLP领域主要有两种情况:
神经网络的关键隐藏层输出的向量,如多层bilstm模型中第n层bilstm输出的向量,bert模型中第k层encoder或decoder输出的向量
注意力机制输出的对全局或局部的注意力向量
2.2 为什么学习中间层特征?
中间层特征特征隐含了大量的词法、句法、语法信息,比如:
bert逐层抽象出的向量包含了上下文敏感的词汇表征
transformer的注意力向量,捕获了词与词之间复杂的依赖关系
如果能有效学习这些特征,可以大幅度改善学生模型的效果。
2.3 怎样学习中间层特征?
2.3.1 逐层匹配
学生模型的层数只有教师模型的1/k
用逐层匹配策略,学生模型的第m层可以对齐教师模型的 第mk层向量。
2.3.1 跨层融合
用跨层融合策略,学生模型的第m层可以对齐教师模型的 第(m-1)k+1层到mk层池化后的向量。
2.3.3 计算损失
特征向量对齐可以使用MSE或者余弦距离,注意力特征可以考虑KL散度
4. 学习硬标签
3.1 什么是硬标签
| 军事 | 文学 | 体育 | 财经 | 家居 | 其他 | |
|---|---|---|---|---|---|---|
| 软标签 | 0.2 | 0.7 | 0.00003 | 0.001 | 0.0015 | …… |
| 硬标签 | 0 | 1 | 0 | 0 | 0 | …… |
3.2 为什么学习硬标签?
如果有条件,应该尽量学习中间特征和软标签,那为什么要学习硬标签?
1、教师模型不可用或者是闭源模型
2、 获取教师模型的中间特征或软标签成本过高–deepseek-R1
3、 训练资源受限
4、 需要学习的领域或特性不是非常复杂
5、 学生模型已经有相当好的基础
3.3 怎样学习硬标签?
step1:组织符合某个领域或者特性的数据集
step2:获取教师模型推理结果
step3:训练学生模型,使其学到领域知识或特性
3.4 优点
无需获取中间层特征或软标签
训练成本低
迭代速度快
3.5 缺点
信息受损
效果的上限不高
易于过拟合