大模型——剪枝、量化、蒸馏、二值化

大语言模型的参数量现在十分惊人,GPT3的参数量已经达到1750亿。GPT3在fp16的精度下仍需要325G的存储空间,推理时至少需要5张80G的A100GPU。高参数量意味着对内存要求很高,以至于对终端部署有着极高要求。

而为了能在更多的设备上运行大模型,就需要模型压缩技术。

四大模型压缩技术:量化、剪枝、蒸馏和二值化

模型压缩主要有几个需求:1.降低模型所占空间。2.降低模型计算复杂度。3.降低能耗,提高续航。4.保证模型性能

量化

压缩每个权重参数存储的比特数,以达到降低内存需求的目的。传统的深度学习,参数一般用32位浮点数存储。量化可以将32位浮点数,量化成8位整数。这样,模型存储空间将直降至四分之一。而且,低精度的整数运算比浮点数运算高效的多。

对于1位量化,理想条件下,模型大小甚至可以降低至原来的三十二分之一。

量化方法主要有三类:训练后量化(PTQ)、量化感知训练(QAT)、量化感知微调(QAF)

训练后量化

模型训练后,对权重进行量化。

TensorFlow lite提供工具,可以将32位浮点数,量化成8位整数。

缺点:量化时无法考虑训练中的动态变化,会使模型的精度下降

量化感知训练

在训练中就进行量化,让模型提前适应低精度。

TensorRT支持这种方法,在训练中模拟量化,保持模型性能。

缺点:运算更加复杂,需要更高的运算资源

训练感知微调

基于预训练模型进行微调,同时加入量化操作。结合了预训练模型的优势和量化的高效性。

在NLP中,研究人员经常在预训练的BERT中进行量化感知微调。他能快速适应特定任务,减少计算开销。性能上不如从头训练的量化感知模型。

量化存在的问题

  • 精度下降。量化的位数越低,精度下降越大
  • 模型敏感度不同。不同模型,对量化的敏感程度不同,对于有些模型,量化后性能依然出色,但有些模型,量化对其影响会非常大。
    量化友好模型:传统CNN(如ResNet, VGG, MobileNet)、轻量级设计模型。
    敏感模型:包含Transformer架构的模型、某些循环神经网络(RNN/LSTM)、超小模型、包含特定算子(如Depthwise卷积)的模型。
  • 量化感知训练、训练感知微调需要修改训练过程,从而加大了训练的难度和计算资源的需求。

剪枝

去除神经网络中的不必要的连接,或者让一些神经元失活。以减少模型参数,降低计算量。

剪枝方法主要有两种:结构化剪枝、非结构化剪枝

基于权重重要性的剪枝方法

通过分析权重对模型输出的影响,将影响小的权重减掉。在不怎么影响模型性能的情况下,大幅度降低模型的参数数量。

非结构化剪枝

随机移除单个权重和连接。

可以很好提高压缩比,直接移除对模型影响很小的权重。非结构化剪枝可以把模型参数减少50%以上

缺点:产生的稀疏结构在硬件上很难高效运算,因为硬件更喜欢规整的矩阵操作。参数量虽然减少很多,但推理速度减少并不明显。

结构化剪枝

按照一定规则剪枝,比如移除一定的神经元、滤波器、隐藏层。

压缩比上不如非结构化剪枝,但是推理速度优化方面表现更好,在CNN中可以将推理速度提升2~3倍,并降低能耗。

剪枝总结

  • 精度损失问题。剪枝比例高时,精度损失严重。
  • 可以降低参数量50%以上,对于结构化剪枝,还可以提升计算速度,降低能耗,这对于移动设备和嵌入式设备非常友好。
  • 由于剪枝去除了冗余信息,模型的泛化能力也更好。
  • 不同硬件平台对剪枝的接受程度不一样,可能需要额外优化
  • 不同模型对剪枝敏感度不一样

蒸馏

分为教师模型和学生模型。

首先,训练一个大型、复杂、性能优异的教师模型,让其在大规模的数据集上学习,积累丰富的知识。

其次,选择一个较小的模型作为学生模型,进行初始化,要求结构简单但有一定的学习能力。

然后,进行训练。将教师模型的输出作为额外的监督信息,和学生模型的输出对比,通过优化损失函数来训练学生模型。损失函数包含两部分:学生模型原始损失、两个模型差异损失(一般选KL散度)

最后,对学生模型微调。

蒸馏涉及到一个温度参数,意义为难度程度。在高温模式下,可以学习到复杂的关联关系。低温模式下,答案接近原始分布,适合简单任务。(也可以选择动态,初期高温学习更多信息,后期低温聚焦特征)

NLP中,通常以BERT作为教师模型,LSTM作为学生模型。

蒸馏总结

优势

模型压缩效果显著,学生相较于教师,参数可以达到十分之一甚至更少。

推理速度快几倍

泛化能力更强

应用范围广:图像分类、目标检测、NLP

缺点

学生模型性能严重依赖教师模型的质量

训练时同时考虑学生和教师的训练过程

对于复杂任务,学生模型精度处理不如教师模型

需要合适且匹配的学生模型和教师模型

二值化

二值化可以在一些低功耗的物联网设备中,实现高精度的图像识别和语音识别,且由于计算简单不需要复杂的硬件支持。

二值化是一种极端的量化技术,把神经网络的权重和激活值限制在两个值上,通常为+1和-1。

二值化后,参数只需要1个bit就可以表示,极大程度降低模型复杂度,传统32位浮点数相比,缩小32倍。

由于只有两个值,乘法计算也可以通过转化为加法和移位替代。二值化网络卷积通过 同或XNOR 和 位操作 实现。

二值化总结

在神经网络训练中,研究人员也通过二值化技术压缩预训练的Transformer模型,显著减少模型存储空间和推理延迟。

二值化压缩率极高

推理速度提升明显,在一些网络中可以加快10倍以上

计算简单,可以进行硬件优化,使用专门的二值化硬件加速器

缺点:

精度损失严重,在复杂任务中更为明显

训练时需要特殊处理,如用直通估计器处理不可导的二值化操作

不同模型对二值化敏感度不同

场景分析

资源受限的场景

二值化适合精度要求不高的任务。量化可以调整量化精度控制压缩效果和模型性能之间的平衡。

要求计算速度,对精度有要求

量化和结构化剪枝

要求高性能

蒸馏

展望

多种压缩方法组合

量化+剪枝

蒸馏+量化感知训练

论文

https://arxiv.org/pdf/1603.05279

https://arxiv.org/pdf/2004.09602

https://arxiv.org/pdf/1511.00363

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/37631.pdf

相关推荐
龙山云仓8 分钟前
No131:AI中国故事-对话荀子——性恶论与AI约束:礼法并用、化性起伪与算法治理
大数据·人工智能·深度学习·算法·机器学习
夏鹏今天学习了吗16 分钟前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
九河云41 分钟前
纺织印染“数字色差仪”:光谱+AI模型一次调色成功省染料12%
大数据·人工智能·安全·机器学习·数字化转型
芒克芒克43 分钟前
数组去重进阶:一次遍历实现最多保留指定个数重复元素(O(n)时间+O(1)空间)
数据结构·算法
星火开发设计1 小时前
二维数组:矩阵存储与多维数组的内存布局
开发语言·c++·人工智能·算法·矩阵·函数·知识
丨康有为丨1 小时前
算法时间复杂度和空间复杂度
算法
HarmonLTS1 小时前
Python人工智能深度开发:技术体系、核心实践与工程化落地
开发语言·人工智能·python·算法
a程序小傲2 小时前
京东Java面试被问:RPC调用的熔断降级和自适应限流
java·开发语言·算法·面试·职场和发展·rpc·边缘计算
一分之二~2 小时前
二叉树--层序遍历(迭代和递归)
数据结构·c++·算法·leetcode
Quintus五等升2 小时前
深度学习③|分类任务—AlexNet
人工智能·经验分享·深度学习·神经网络·学习·机器学习·cnn