Lin J, Tang J, Tang H, et al. Awq: Activation-aware weight quantization for llm compression and acceleration[j]. Machine Learning System. Best Paper. https://arxiv.org/abs/2306.00978


1. 背景和动机

  1. 直接在FP16精度上Round成INT3/INT4会造成极大的性能损失
  2. 基于activation distribution对重要的weight做精度保留则可以很大程度上提高模型性能。
  3. 但是混合存储FP16和INT3/4,在推理系统实现的时候过于复杂且对于硬件非常的不友好。

2. 算法

2.1 原理和假设

Fig 1. AWQ

原有的Round方法(图a):

$$ Q(\mathbf{w})=\Delta\cdot\mathrm{Round}(\frac{\mathbf{w}}\Delta),\quad\Delta=\frac{\max(|\mathbf{w}|)}{2^{N-1}} $$

其中$\mathbf{w}$表示一组参数,$Q(\mathbf{w})$表示量化函数,$N$表示量化位数。

改进后的量化方法(图c):

$$ Q(w\cdot s)\cdot\frac xs=\Delta^{’}\cdot\mathrm{Round}(\frac{ws}{\Delta^{’}})\cdot x\cdot\frac1s $$

其中$w \in \mathbf{W}$。即先对特定的$w$做Scaling然后再Scaling回去。这样做的理由是,误差可以成倍的减小,如下面的公式和观察出来的现象:

$$ \begin{aligned}\operatorname{Err}(Q(w)x)&=\Delta\cdot\operatorname{RoundErr}(\frac w\Delta)\cdot x \newline \operatorname{Err}(Q(w\cdot s)(\frac xs))&=\Delta^{’}\cdot\operatorname{RoundErr}(\frac{ws}{\Delta^{’}})\cdot x\cdot\frac1s\end{aligned} $$

其中由于$\operatorname{Round}$函数是四舍五入,所以误差$\operatorname{RoundErr}\in [0,0.5]$且是一个均匀分布。平均在0.25。不管是否被缩放了,这个分布是不变的。

  1. 由于一组权重$\mathbf{w}$的最大值在缩放一个$w$后是基本不变的,所以我们可以认为$\Delta^{’} \approx \Delta$。

在此基础上,我们可以看出使用了Scaling以后得误差变小了,将上述提到的误差做个比值可以看出,$k=\frac{\Delta^{’}}{\Delta} \times \frac{1}{s}$。

2.2 优化:如何找到最优的Scaling值呢?

$$ \mathbf{s}^{*} = \arg \mathop{\min}_{s}\mathcal{L}(\mathbf{s}) $$

$$ \mathcal{L}(s) = \Vert Q(\mathbf{W} \cdot \text{diag}(s))(\text{diag}(s)^{-1}\cdot \mathbf{X}) - \mathbf{WX} \Vert $$

实际上就是用L2 Norm搜索出来一组最为合适的Scaling参数,注意,Scaling是对于每个权值都做的。 作者团队为了简化搜索的空间,对$\mathbf{s}$做了一定的约束,如下:

$$ \mathbf{s} = \mathbf{s_X}^{\alpha},\alpha^{*}=\arg \mathop{\min}_{\alpha}\mathcal{L}(\mathbf{s_X}^{\alpha}) $$

其中,$\alpha \in [0, 1]$为缩放系数,$\mathbf{s_{X}}$是activation perchannel 的值。当$\alpha = 0$时,意味着不缩放;反之,意味着完全缩放。

3. 总结

非常有用,简单粗暴,Best Paper实至名归?是一个非常符合直觉的工程性质的工作,但是工程的实现复杂性比较高,在多数场景上没有被使用。 问题:由于一组权重$\mathbf{w}$的最大值在缩放一个$w$后是基本不变的,所以我们可以认为$\Delta^{’} \approx \Delta$。这个假设并不是很成立啊?