深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现
深度学习论文: EasyQuant: Post-training Quantization via Scale Optimization及其PyTorch实现EasyQuant: Post-training Quantization via Scale OptimizationPDF:https://arxiv.org/abs/2006.16669v1.pdfPyTorch: https://gi
深度学习论文: 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相似性,来找到权值和激活值的最优量化因子。
权值量化因子
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))
weight_scale=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))
weight_scale=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)
move_max=move_max∗monment+max(abs(curr_activation))(1−monment)
,训练后通过计算
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
activation_scale=128/move_max
2 Scale Optimization
假设 X 为输入张量, S为量化尺度因子,则量化公式表示为
其中 表示elementwise点乘操作, Round表示取整操作, Clip表示截断操作.则对于卷积操作
权值(int8)量化和输入激活(int8)量化得到的第l层量化输出激活(int32)再反量化的结果(float32) 为
EasyQuant通过引入cos 相似性作为目标函数,优化 原始浮点激活输出与量化实现得到反量化输出的 cos 相似性(cos越大越相似)
来搜索权值和激活值的量化因子,实际求解通过交替优化两个的量化因子来求解
3 INT7 Post-training Inference
相对于int8,int7可以有更好的加速效果。所以EasyQuant在实际端上推理阶段则采用权值和激活 int7 量化,中间 int16 累加器累加最多八次的方式,使得推理速度优于权值和激活 int8 量化,中间 int16 累加器只能累加两次(溢出)的方式,同时还可以比较好的保持量化后算法的精度。
4 Experiments
4-1 与PTQ比较
4-2 与QAT比较
4-3 与TRT低于8比特时比较
更多推荐
所有评论(0)