SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models
Introduction
量化是指把一个位宽为fp16的连续型的数值映射到int8的离散型数值,如上图。
当前激活值比量化权重更苦难,当在训练好一个模型后,权重是通过一个随机、Xavier、Kaiming初始化等方法初始化的,均值方差比较稳定,经过权重更新后,分布也不会发生很大变化。
但是激活值的分布是十分不稳定,由于噪声当前是不可避免的,有人发现一个token的每一个维度的分布可能差距很大,但是一个维度内部的分布相对来说是稳定。如下图:
Method
为了量化激活值,首先要解决分布不稳定的问题,作者的办法是找出为权重与激活值每一个维度数值最大的绝对值,形成一个新的矩阵,|x|和|w|,然后执行下图的公式计算得到一个平滑矩阵s。
得到平滑矩阵后,为了保持结果不变,以前前向计算为x * w,现在为x * s * w/s,如下图,这样就可以达到一个平滑激活值分布的作用。
实验
参考
https://arxiv.org/pdf/2211.10438.pdf
文章评论