深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现

深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
EasyQuant: Post-training Quantization via Scale Optimization
PDF:https://arxiv.org/abs/2006.16669v1.pdf
PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks

1 概述

EasyQuant通过引入cos 相似性作为目标函数,通过交替搜索权值(weights)和**(activations)的量化因子(scale)来最大化量化前后**值的 cos相似性,来找到权值和**值的最优量化因子。
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
权值量化因子
TRT: w e i g h t s c a l e = 128 / m a x ( a b s ( w e i g h t ) ) weight_scale = 128/max(abs(weight)) weightscale=128/max(abs(weight))
Tensorflow: w e i g h t s c a l e = 128 / m a x ( a b s ( w e i g h t ) ) weight_scale = 128/max(abs(weight)) weightscale=128/max(abs(weight))
**量化因子
TRT: 通过计算KL散度的方式来确定最佳阈值从而得到量化因子
*Tensorflow:*训练中,使用EMA(exponential moving average)公式 m o v e m a x = m o v e m a x ∗ m o n m e n t + m a x ( a b s ( c u r r a c t i v a t i o n ) ) ( 1 − m o n m e n t ) move_max =move_max * monment + max(abs(curr_activation))(1-monment) movemax=movemaxmonment+max(abs(curractivation))(1monment)
,训练后通过计算 a c t i v a t i o n s c a l e = 128 / m o v e m a x activation_scale = 128/move_max activationscale=128/movemax

2 Scale Optimization

假设 X 为输入张量, S为量化尺度因子,则量化公式表示为
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
其中 表示elementwise点乘操作, Round表示取整操作, Clip表示截断操作.则对于卷积操作
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
权值(int8)量化和输入**(int8)量化得到的第l层量化输出**(int32)再反量化的结果(float32) 为
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
EasyQuant通过引入cos 相似性作为目标函数,优化 原始浮点**输出与量化实现得到反量化输出的 cos 相似性(cos越大越相似)
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
来搜索权值和**值的量化因子,实际求解通过交替优化两个的量化因子来求解
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现

3 INT7 Post-training Inference

相对于int8,int7可以有更好的加速效果。所以EasyQuant在实际端上推理阶段则采用权值和** int7 量化,中间 int16 累加器累加最多八次的方式,使得推理速度优于权值和** int8 量化,中间 int16 累加器只能累加两次(溢出)的方式,同时还可以比较好的保持量化后算法的精度。
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现

4 Experiments

4-1 与PTQ比较

深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现

4-2 与QAT比较

深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现

4-3 与TRT低于8比特时比较

深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现