模型量化(基于pytorch)
1、量化简介
1.1、量化介绍
-
基于pytorch的量化官方地址https://pytorch.org/docs/stable/quantization.html
-
量化的作用:
减小模型大小(减小四倍左右),方便模型部署到小型设备中(如低成本嵌入式设备) -
量化的数据:
weight的8 bit量化 :data_type = qint8,数据范围为[-128, 127]
activation的8 bit量化:data_type = quint8,数据范围为[0, 255]
<1>一般我们都将float32量化到qint8。
<2>模型参数中的bias一般是不进行量化操作的,仍然保持float32的数据类型。
<3>weight在浮点模型训练收敛之后一般就已经固定住了,所以根据原始数据就可以直接量化。
<4>activation会因为每次输入数据的不同,导致数据范围每次都是不同的,所以针对这个问题,在量化过程中专门会有一个校准过程,即提前准备一个小的校准数据集,在测试这个校准数据集的时候会记录每一次的activation的数据范围,然后根据记录值确定一个固定的范围。
1.2、量化方法
1.2.1、训练后动态量化(Post Training Dynamic Quantization)
官方地址: