当前位置:   article > 正文

【深度学习】模型压缩——量化_模型的压缩(int4& & int8)

模型的压缩(int4& & int8)
基本原理
  • 浮点存储(运算)转换为整型存储(运算)的一种模型压缩技术。

例:

原本需要用 float 32 表示的权重,量化后只需要使用 int 8 表示,仅仅这一个操作,可以获得接近4倍的网络加速!(float 32 指的是 32 位的 float 型数据,int 8 指的是 8 位的数据。)

一般情况下不同数据类型所占位数或字节数参考:

数据类型位数字节数
int占一个内存单元:
如 64 位系统一个内存单元占 64 位
64 位系统:8 字节
32 位系统:4 字节
16 位系统:2 字节
char81
char*(指针变量)占一个内存单元64 位系统:8 字节
32 位系统:4 字节
16 位系统:2 字节
short int162
unsigned int324
float324
double648
long648
long long648
unsigned long648
量化目的
  • 降低模型消耗的内存大小

    尤其是手机、机器人等嵌入式终端,很多情况下无法配备非常大的内存空间。

  • 加速模型推理

    对大多数处理器而言,整型运算的速度一般(但不总是)要比浮点运算更快一些;

  • 降低模型所需的内存带宽

    网络运行时,如果模型需要很大的内存带宽,则内存,CPU 和电池都会飞速消耗,影响用户体验,变得智能却要付出过多的代价。

  • 更低的能耗与占用面积

    FP 32 乘法运算的能耗是 INT 8 乘法运算能耗的18.5倍,芯片占用面积则是 int 8 的27.3倍,而对于芯片设计和 FPGA 设计而言,更少的资源占用意味着相同数量的单元下可以设计出更多的计算单元;而更少的能耗意味着更少的发热,和更长久的续航。

  • 尚可接受的精度损失

  • int 8 支持性良好

    如NPU/APU/AIPU等基本都是支持 int 8(甚至更低精度的 int 4 )计算,Mali GPU 开始引入 int 8 dot支持,Nvidia 也不例外。除此之外,当前很多创业公司新发布的边缘端芯片几乎都支持 int 8 类型。

量化方法
  • 线性量化:

    • 对称量化:用一个映射公式将输入数据映射到[-128,127]的范围内
    • 非对称量化:用一个映射公式将输入数据映射到[0,255]的范围内

    可结合对数据的分析进行量化方法的选择

  • …(待补充)

量化校准

使用验证集中的一小部分图片(通常为整个数据集的 1-5%)来收集数据分布的信息,包括最小值 / 最大值、基于熵理论的最佳阈值、基于对称量化的量化因子等。最终,这些量化参数会被记录在新生成的量化模型中。

如果要让最后的精度损失不大,是要考虑一些先验知识的,这个先验知识就是每一层在 FP 32 精度下的激活值分布,只有根据这个才能找到更加合理的 阈值|T|。

基本上现有的深度学习框架都是默认 FP 32 精度的,当然也有些模型支持 FP 16 精度训练。

其他深度学习相关文章

【深度学习】轻量级神经网络设计思路
【深度学习】轻量级神经网络之MobileNet
【深度学习】Transformer原理篇——浓缩的精华
【深度学习】Softmax和交叉熵损失是什么?香农信息量、熵、交叉熵又是什么?
【深度学习】Focal Loss
【深度学习】关于负梯度方向,函数值下降最大的思考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/261346
推荐阅读
  

闽ICP备14008679号