基于tensorRT方法的int8量化实现
为了解决在对称量化时候精度损失的情况发生,提出了一中利用|T|作为量化边界的量化方法(具体如图):
我们需要找到一个合适的阈值T,然后超出阈值绝对值的数全部映射到|127|上,这样原来的数就形成了新的概率分布,然后利用KL距离判断两个分布的差异程度,当然肯定是差异越小说明量化的更好,从而选择更优的T。
KL距离:
在数理统计中,Kullback-Leibler散度(也称为相对熵)是一种判断概率分布与第二种参考概率分布差异程度的度量。
信息熵
他的公式来源于香浓提出的信息熵,这是一种对信息的度量,也代表着根据信息的概率分布计算的到信息所需要的最短编码长度:
按照不真实分布q来编码样本所需的编码长度的期望如下图,这就是交叉熵H( p,q ):
所以,计算得到的KL距离也叫做相对熵,他表示两个分布的差异,差异与大,距离越大:
因此,我们就可以使用KL来判断当前的T值选取的是否合适。
量化流程:
首先准备一个校准数据集。
然后,对每一层:
收集激活值的直方图;
基于不同的阈值生成不同的量化分布;
然后计算每个分布与原分布的相对熵,然后选择熵最少的一个,也就是跟原分布最像的一个。
记录此时的阈值,也可以得到对应的scale值了。