赞
踩
例:
原本需要用 float 32 表示的权重,量化后只需要使用 int 8 表示,仅仅这一个操作,可以获得接近4倍的网络加速!(float 32 指的是 32 位的 float 型数据,int 8 指的是 8 位的数据。)
一般情况下不同数据类型所占位数或字节数参考:
数据类型 位数 字节数 int 占一个内存单元:
如 64 位系统一个内存单元占 64 位64 位系统:8 字节
32 位系统:4 字节
16 位系统:2 字节char 8 1 char*(指针变量) 占一个内存单元 64 位系统:8 字节
32 位系统:4 字节
16 位系统:2 字节short int 16 2 unsigned int 32 4 float 32 4 double 64 8 long 64 8 long long 64 8 unsigned long 64 8
降低模型消耗的内存大小
尤其是手机、机器人等嵌入式终端,很多情况下无法配备非常大的内存空间。
加速模型推理
对大多数处理器而言,整型运算的速度一般(但不总是)要比浮点运算更快一些;
降低模型所需的内存带宽
网络运行时,如果模型需要很大的内存带宽,则内存,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 类型。
线性量化:
可结合对数据的分析进行量化方法的选择
…(待补充)
使用验证集中的一小部分图片(通常为整个数据集的 1-5%)来收集数据分布的信息,包括最小值 / 最大值、基于熵理论的最佳阈值、基于对称量化的量化因子等。最终,这些量化参数会被记录在新生成的量化模型中。
如果要让最后的精度损失不大,是要考虑一些先验知识的,这个先验知识就是每一层在 FP 32 精度下的激活值分布,只有根据这个才能找到更加合理的 阈值|T|。
基本上现有的深度学习框架都是默认 FP 32 精度的,当然也有些模型支持 FP 16 精度训练。
【深度学习】轻量级神经网络设计思路
【深度学习】轻量级神经网络之MobileNet
【深度学习】Transformer原理篇——浓缩的精华
【深度学习】Softmax和交叉熵损失是什么?香农信息量、熵、交叉熵又是什么?
【深度学习】Focal Loss
【深度学习】关于负梯度方向,函数值下降最大的思考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。