模型压缩-裁剪、量化、蒸馏

参考:
https://zhuanlan.zhihu.com/p/642412124

模型压缩是一种缩小神经网络结构和参数的技术。 压缩的模型在使用少量计算资源
的情况下,使其性能与原始模型近似;常见包括剪枝、量化、蒸馏、神经结构搜索(NAS)等

在这里插入图片描述

##模型压缩与工程部署关注的常用参数


1)模型大小 
  
   一般使用参数量parameter来衡量,单位是兆(M)


 2)实时运行内存、模型计算量 
  
   就是模型实际运行时所占的内存资源消耗,单位是兆字节 (MB);模型计算量常见有FLOPs(浮点运算数)和MACs两种衡量的方式(MACs ≈  2 * FLOPs)


 3)模型推理响应时间、吞吐量QPS
   
   响应时间是指模型对请求作出响应的时间,单位一般是毫秒(MS);吞吐量是指模型在单位时间内处理请求的数量

1、裁剪

代码参考:https://pytorch.org/tutorials/intermediate/pruning_tutorial.html

1)结构化的剪枝

神经元剪枝pruning neurons,注意剪枝力度有点大,会对模型精度产生较大的影响

 2)非结构化的剪枝

突出剪枝pruning synapses,精度的损失就会小一些,但最终产生的是稀疏矩阵

在这里插入图片描述

2、量化

量化是指将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。一般将浮点激活值或权重(通常以32比特浮点数表示)近似为低比特的整数(8比特)表示

1)更少的存储开销和带宽需求

2)更快的计算速度

3)更低的能耗与占用面积

4)可接受的精度损失
在这里插入图片描述
如上图,FP32乘法运算的能耗是INT8乘法运算能耗的18.5倍,
芯片占用面积则是int8的27.3倍

模型量化方法

1)线性量化

扫描二维码关注公众号,回复: 15866671 查看本文章
对称量化
非对称量化 

在这里插入图片描述
2)非线性量化

非线性函数
聚类、对数                  

在这里插入图片描述

3)二值化1-bit、三值2-bit等

4)混合精度量化

3、蒸馏

代码参考:https://github.com/airaria/TextBrewer

Knowledge Distillation,简称KD,顾名思义,就是将已经训练好的模型(老师网络)包含的知识(”Knowledge”),蒸馏(“Distill”)提取到另一个小模型(学生网络)里面去
在这里插入图片描述

4、神经结构搜索

代码参考:https://github.com/awslabs/autogluon

神经结构搜索(Neural Architecture Search,NAS)是指给定一个称为搜索空间的候选神经网络结构、组件集合(blocks),通过控制器按照某种搜索算法策略从集合中搜索出子网络结构,并使用某种性能评估策略评估性能;算是自动机器学习(AutoML)的一种;例如EfficientNet(Google)、RegNet(Facebook)等模型

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42357472/article/details/131712068