论文发现的规律:
(1)激活比权重难量化。原因是权重分布均匀、平坦,可以看到LLMs权重INT8、INT4量化不会明显掉精度;
(2)离群异常值(Outliers)导致激活量化非常困难。在per-tensor量化中,大的异常值会导致非异常点Channel的effective quantization bits/levels非常低,引入量化误差。
(3)离群异常值(Outliers)固定在某些channels。只有很少部分channel会出现Outlier;如果某个channel有异常值,该channle的所有token都会出现Outlier;而且每个channel的激活值波动非常小;
论文证明per-channel量化能获得与FP16差不多的精度,但硬件加速GEMM算子不支持per-channel量化。per-token激活量化仅仅比per-tensor量化好一点点。
SmoothQuant量化原理
核心思想:引入超参,减小激活值范围,增大权重值范围。这是一种数学等价的逐通道缩放变化。从而使模型易于量化,保持模型精度同时提升推理速度。
常见矩阵乘如下:
引入per-channel平滑因子s,SmoothQuant对激活按channel维度除以s,权重按相反方式调整,即W按行乘以s。
引入超参,太大,权重难以量化,太小激活难以量化。
实验发现:针对OPT和BLOOM 模型,,针对GLM-130B,。
Transformer块应用SmoothQuant
SmoothQuant性能
精度相比其他量化方法(LLM.int8()、ZeroQuant等)更高
推理速度提升1.56倍,内存占用减半,SmoothQuant集成框架PyTorch、FasterTransformer。