✅[April-May 2024] 模型量化之 🥕Quarot & SpinQuant
0. 前言 本问分析的两篇文章是: 2024-05, SpinQuant: LLM quantization with learned rotations from meta,一作是 Zechun Liu 2024-04, QuaRot: Outlier-Free 4-Bit Inference in Rotated LLMs from ETH Zurich、EPFL、Microsoft Research、IST Austria & NeuralMagic 这两篇文章以相同的视角去解决问题,并且量化后的模型保持了相当好的性能,应该就是未来模型量化的一个主要的跟进方向。QuaRot和SpinQuant可以算作是同一系列的工作,SpinQuant在QuaRot的基础上做了可学习旋转矩阵的改进。 1. Computational Invariance Computational Invariance是Quarot和SpinQuant的基础。 Computational Invariance定理[1]指出,可以使用正交矩阵对Transformer 中的权重和块间激活进行变换,而模型输出不变。这个定理是说,如果$W_{in}$是一个在transformer block(i.e. $W_k,W_q,W_v$等)左边的权重,我们可以左乘上一个正交的矩阵$Q$,为了在最后的结果里消除这个影响,我们可以在输出矩阵(i.e. $W_{out}, W_{down}$)右边乘上$Q_T$。 尽管 RMSNorm 被应用于两个数据块之间,但只要 RMSNorm 数据块中没有重新缩放(在实际操作中,我们会先将任何重新缩放吸收到相邻的权重矩阵中),这一点还是适用的。从概念上讲,这是因为 RMSNorm 将激活值除以它们的模长,而对激活值应用旋转矩阵$Q$不会影响模长(因为正交矩阵的特性): $$\text{RMSNorm}(\boldsymbol{X}) = \text{RMSNorm}(\boldsymbol{X\boldsymbol{Q}^T})\boldsymbol{Q}$$ 我们这里假设RMSNorm对激活值$\boldsymbol{X}$的每一行做的操作都是$x_{i} \larr x_i/ \Vert x_I \Vert$。这意味着,将输出矩阵乘以 $Q^T$ 会使线性层输出$XQ^T$,$XQ^T$被归一化,然后传入下一个区块,其输入权重矩阵现在是$QW$,因此该线性层不做任何修改就会输出原始激活。 2. 🥕Quarot Quarot有两个阶段,一个阶段是在全精度下操作模型权重,并在模型的前向传递中插入两个额外的乘Hadamard矩阵操作;在第二个阶段使用现在的量化方法来量化夹在Hadamard矩阵中的模型权重,因为这些权重被削减了峰度,outliers减少,可以使量化的压力小很多。 Fig 1. QuaRot workflow 1 Fig 2. QuaRot workflow 2 Quarot文中的图片已经非常清晰的描绘了什么时候做旋转以及何时做量化和量化的数据流。SpinQuant和Quarot比较了实验结果,Quarot的实验结果请看第三章节的SpinQuant的表格。...