LLM系列:模型量化-SmoothQuant

716 阅读1分钟

论文发现的规律:
(1)激活比权重难量化。原因是权重分布均匀、平坦,可以看到LLMs权重INT8、INT4量化不会明显掉精度;
(2)离群异常值(Outliers)导致激活量化非常困难。在per-tensor量化中,大的异常值会导致非异常点Channel的effective quantization bits/levels非常低,引入量化误差。

image.png

(3)离群异常值(Outliers)固定在某些channels。只有很少部分channel会出现Outlier;如果某个channel有异常值,该channle的所有token都会出现Outlier;而且每个channel的激活值波动非常小;

捕获1.JPG

论文证明per-channel量化能获得与FP16差不多的精度,但硬件加速GEMM算子不支持per-channel量化。per-token激活量化仅仅比per-tensor量化好一点点。

image.png

SmoothQuant量化原理

核心思想:引入超参,减小激活值范围,增大权重值范围。这是一种数学等价的逐通道缩放变化。从而使模型易于量化,保持模型精度同时提升推理速度。

常见矩阵乘如下: Y=XWY=XW

引入per-channel平滑因子s,SmoothQuant对激活按channel维度除以s,权重按相反方式调整,即W按行乘以s。

Y=(Xdiag(s1))(diag(s)W)=X^W^Y=(Xdiag({s}^{-1}))\cdot(diag(s)W)=\hat{X}\hat{W}

引入超参α\alphaα\alpha太大,权重难以量化,α\alpha太小激活难以量化。 si=max(Xj)α/max(Wj)1αs_i = max(|X_j|)^{\alpha}/max(|W_j|)^{1-\alpha}

实验发现:针对OPT和BLOOM 模型,α=0.5\alpha=0.5,针对GLM-130B,α=0.75\alpha=0.75

Transformer块应用SmoothQuant

image.png

SmoothQuant性能

精度相比其他量化方法(LLM.int8()、ZeroQuant等)更高 image.png

推理速度提升1.56倍,内存占用减半,SmoothQuant集成框架PyTorch、FasterTransformer。

image.png

参考:
arxiv.org/pdf/2211.10…
juejin.cn/post/733007…