大模型学习3
模型压缩
深度学习(Deep Learning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相 应的模型部署,需要借助模型压缩、优化加速、异构计算等方法突破瓶颈。
模型压缩算法能够有效降低参数冗余,从而减少存储占用、通信带宽和计算复杂度,有助 于深度学习的应用部署,具体可划分为如下几种方法(后续重点介绍剪枝与量化):
主要的模型压缩技术
1. 模型量化(Quantization)
做法:降低数值精度(如FP32 → INT8)
效果:模型体积减小75%,推理速度提升2-4倍
比喻:把高清电影转为标清,画质稍降但文件小很多
2. 模型剪枝(Pruning)
做法:移除不重要的权重连接
效果:减少计算量,提升速度
比喻:给大树修剪枝叶,去掉冗余部分,保留主干
3. 知识蒸馏(Knowledge Distillation)
做法:用大模型(教师)训练小模型(学生)
效果:小模型获得大模型的能力
比喻:教授把毕生知识精华传授给学生
压缩技术的效果对比
| 技术 | 压缩率 | 速度提升 | 精度损失 | 难度 |
|---|---|---|---|---|
| 量化 | 2-4倍 | 2-4倍 | 小 | 低 |
| 剪枝 | 2-10倍 | 1.5-3倍 | 中 | 中 |
| 蒸馏 | 10-100倍 | 3-10倍 | 中 | 高 |
为什么需要模型压缩?
部署需求
移动端:手机APP运行AI功能
边缘设备:摄像头、音箱等IoT设备
Web端:浏览器直接运行模型
成本考虑
存储成本:模型从几GB降到几百MB
计算成本:推理速度提升,服务器费用降低
功耗成本:更适合电池供电设备
量化
混合精度
混合精度(Mixed precision)在模型中使用 FP32 和 FP16 。 FP16 减少了一半的内存 大小,但有些参数或操作符必须采用 FP32 格式才能保持准确度。
混合精度训练:
模型内部在存储的时候,参数分为两部分:正在参与训练的参数和没有参与训练的参数。
为了节约显存,没有参与训练计算的参数以FP16表示以降低显存占用率。
而正在参与训练计算的参数为了保证计算结果的准确性,以FP32表示。
这就达成了,虽然模型是16位的模型,但是训练计算过程跟32位是一样的。
量化
工业界最终选择了 INT8 量化—— FP32 在推理(inference)期间被 INT8 取代(其实现阶段很多模型会在推理的时候把8位的参数,反量化到32位以保证模型精度),而训练时 (training)仍然是 FP32(以提升训练精度)。所以量化和反量化会贯穿模型的训练和推理过程。
训练过程:在模型训练时,模型本来是32位的,在参与训练的过程中,32位的一部分参数(目前没有参与计算或者相对模型影响不大参数)会被量化到8位;而正在参与计算或者核心参数仍是32位参与计算。
推理过程:模型参数在保存时,也是分为两部分。少部分核心参数还是32或16位的,但大部分参数就是量化过的8或4位。
其实量化这样设计的目的很简单,就是降低模型算力依赖的前提下,尽可能的提高模型的精度。
