引言
大语言模型(LLMs)的出现推动了文本生成、少样本学习、推理和蛋白质序列建模等领域的进步。这些模型的规模通常达到数千亿个参数,使得高效的推理算法变得至关重要。本文研究了LLM参数的训练后量化,提出了一种新的量化方法——不合处理量化(QuIP),并展示了其在大语言模型中的应用。
研究背景
训练后量化
训练后量化(Post-Training Quantization,PTQ)是一种通过在训练完成后对模型参数进行量化,从而提高模型运行效率的方法。现有的PTQ方法主要通过减少权重或激活值的范围来简化量化过程,但这些方法在处理大规模语言模型时往往需要进一步的再训练,成本较高。
现有方法
一些现有的方法如SmoothQuant、ZeroQuant和LLM.int8()等,通过不同的技术手段来减小量化的难度。例如,SmoothQuant通过在激活值和权重之间进行重新缩放来去除激活值中的异常值,从而简化量化过程。OPTQ(即GPTQ)提出了一种新的舍入方法,能够在最大的OPT和BLOOM模型上工作。
QuIP方法
不合处理量化
QuIP是一种基于不合性(incoherence)处理的量化方法,主要包括两个步骤:
- 自适应舍入:通过最小化一个二次代理目标来进行舍入。
- 高效的预处理和后处理:通过乘以随机正交矩阵的Kronecker积来确保权重和Hessian矩阵的不合性。
自适应舍入
自适应舍入步骤通过最小化以下代理目标来进行:
ℓ ( W ^ ) = tr ( ( W ^ − W ) H ( W ^ − W ) T ) \ell(\hat{W}) = \operatorname{tr}\left((\hat{W} - W)H(\hat{W} - W)^T\right) ℓ(W^)=tr((W^−W)H(W^−W)T)
其中, W W W是原始权重矩阵, W ^ \hat{W} W^是量化后的权重矩阵, H H H是这些向量的二阶矩阵,作为Hessian的代理。这个公式使得量化可以在神经元之间并行运行,对于大规模语言模型是可行的。
LDLQ方法
LDLQ方法是一种优化的自适应舍入方法,通过以下方式定义:
W ^ k = Q ( W k + ( W 1 : ( k − 1 ) − W ^ 1 : ( k − 1 ) ) a k ) \hat{W}_k = Q(W_k + (W_{1:(k-1)} - \hat{W}_{1:(k-1)})a_k) W^k=Q(Wk+(W1:(k−1)−W^1:(k−1))ak)
其中, W k W_k Wk表示第 k k k列, Q Q Q表示最近舍入或标准无偏舍入, a k a_k ak是一些向量序列。最终的 W ^ \hat{W} W^满足以下矩阵方程:
W ^ = Q ( W + ( W − W ^ ) U ) \hat{W} = Q(W + (W - \hat{W})U) W^=Q(W+(W−W^)U)
其中, U U U是一个严格的上三角矩阵,其列是向量 a k a_k ak。通过选择合适的 U U U,可以使得代理目标达到最小值。
理论分析
最优性证明
通过理论分析,LDLQ在最差和平均情况下都是最优的。对于所有正半定的 H H H,以及Q作为最近舍入或随机舍入,LDLQ的最差和平均代理损失都小于其他舍入方法:
tr ( D ) = L worst ( LDLQ , H ) ≤ L worst ( A , H ) \operatorname{tr}(D) = L_{\text{worst}}(\text{LDLQ}, H) \leq L_{\text{worst}}(A, H) tr(D)=Lworst(LDLQ,H)≤Lworst(A,H)
m tr ( D ) = L avg ( LDLQ , H ) ≤ L avg ( A , H ) m \operatorname{tr}(D) = L_{\text{avg}}(\text{LDLQ}, H) \leq L_{\text{avg}}(A, H) mtr(D)=Lavg(LDLQ,H)≤Lavg(A,H)
其中, D D D是 H H H的LDL分解中的对角矩阵。
不合处理的作用
不合处理的作用在于通过乘以随机正交矩阵的Kronecker积来确保权重和Hessian矩阵的不合性,从而减少舍入误差。这种处理可以看作是一种形式的异常值抑制,跨越权重和激活空间。
实验结果
通过实验证明,不合处理显著提高了大模型的量化效果,特别是在较高压缩率下。对于大规模LLM(>2B参数),我们观察到2位和4位压缩之间的差距很小,并且随着模型规模的增加而进一步减少,提示了2位推理在LLM中的可行性。
结论
本文提出了一种基于不合处理的量化方法QuIP,通过自适应舍入和高效的预处理与后处理步骤,实现了大语言模型的两位量化。理论分析表明,QuIP在最差和平均情况下都是最优的。实验结果显示,QuIP能够在高压缩率下显著提高量化效果,首次实现了仅使用每权重两位的LLM量化方法。
参考文献
-
Chee, J., Cai, Y., Kuleshov, V., & De Sa, C. (2023). QuIP: 2-Bit Quantization of Large Language Models With Guarantees. Retrieved from https://arxiv.org/pdf/2307.13304
-
Nagel, M., et al. (2020). Adaptive Rounding for Post-Training Quantization.
-
Zhang, H., et al. (2021). SmoothQuant: Removing Outliers by Rescaling Activations and Weights.
-
Lin, Y., et al. (2021). ZeroQuant: Efficient Post-Training Quantization for Large-Scale Transformers.
-
Dettmers, T., et al. (2021). LLM.int8(): 8-bit Matrix Multiplications for Large Language Models.
-
Frantar, E., et al. (2021). OPTQ: Quantization for Optimal Performance of Large Language Models.
二阶矩阵,也称为Hessian矩阵,是在优化问题和多元微积分中非常重要的一个概念。它描述了一个多变量函数在某一点的二阶导数信息,用于分析该点的曲率特性。具体来说,给定一个实值函数 f ( x 1 , x 2 , . . . , x n ) f(x_1, x_2, ..., x_n) f(x1,x2,...,xn),其Hessian矩阵是由该函数的所有二阶偏导数组成的方阵,定义如下:
H ( f ) = [ ∂ 2 f ∂ x 1 2 ∂ 2 f ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ∂ x 1 ∂ x n ∂ 2 f ∂ x 2 ∂ x 1 ∂ 2 f ∂ x 2 2 ⋯ ∂ 2 f ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ∂ x n ∂ x 1 ∂ 2 f ∂ x n ∂ x 2 ⋯ ∂ 2 f ∂ x n 2 ] H(f) = \begin{bmatrix} \frac{\partial^2 f}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^2 f}{\partial x_2 \partial x_1} & \frac{\partial^2 f}{\partial x_2^2} & \cdots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \frac{\partial^2 f}{\partial x_n \partial x_2} & \cdots & \frac{\partial^2 f}{\partial x_n^2} \end{bmatrix} H(f)= ∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f
Hessian矩阵的作用
Hessian矩阵在优化中有几个重要作用:
- 局部曲率分析:Hessian矩阵提供了函数在某一点的局部曲率信息。通过分析Hessian矩阵的特征值,可以判断该点是局部最小值、局部最大值还是鞍点。
- 二次近似:在优化算法中,Hessian矩阵用于构建目标函数的二次近似,从而帮助找到优化方向。例如,Newton法通过使用Hessian矩阵来迭代更新参数,以加速收敛。
- 稳定性分析:Hessian矩阵的正定性与否可以用于判断优化过程的稳定性。在训练神经网络时,Hessian矩阵的特征值用于评估网络的学习动态。
在QuIP方法中的应用
在QuIP方法中,Hessian矩阵作为代理目标的一部分,用于指导自适应舍入过程。具体来说,QuIP方法通过最小化以下代理目标来进行舍入:
ℓ ( W ^ ) = tr ( ( W ^ − W ) H ( W ^ − W ) T ) \ell(\hat{W}) = \operatorname{tr}\left((\hat{W} - W)H(\hat{W} - W)^T\right) ℓ(W^)=tr((W^−W)H(W^−W)T)
其中, W W W是原始权重矩阵, W ^ \hat{W} W^是量化后的权重矩阵, H H H是这些向量的Hessian矩阵。这个公式的直观理解是,通过权重矩阵 W W W和量化后的权重矩阵 W ^ \hat{W} W^之间的差异,以及Hessian矩阵 H H H,来构建一个二次代理目标,以引导量化过程中的舍入决策。
从公式的角度解析
从公式的角度来看,Hessian矩阵 H H H在代理目标中的作用如下:
- 权重差异的加权: ( W ^ − W ) (\hat{W} - W) (W^−W)表示量化后的权重和原始权重之间的差异。 H H H对这些差异进行加权,使得某些方向上的误差更重要。这样一来,量化过程中可以优先考虑这些方向,减少关键方向上的误差。
- 二次形式: tr ( ( W ^ − W ) H ( W ^ − W ) T ) \operatorname{tr}\left((\hat{W} - W)H(\hat{W} - W)^T\right) tr((W^−W)H(W^−W)T)表示了一种二次形式,通过对权重差异进行平方和加权,构建了一个二次代理目标。这种二次形式在数学上具有良好的性质,有助于优化算法的收敛性和稳定性。
总结
Hessian矩阵在QuIP方法中起到了关键的作用,通过提供函数的二阶导数信息,帮助构建了一个有效的代理目标,从而指导自适应舍入过程,最终实现高效的量化。理解Hessian矩阵的定义和作用,对于深入理解QuIP方法和其他优化算法都有重要意义。
不合处理的作用解析
背景介绍
在机器学习和深度学习中,量化是一种通过将模型参数从高精度(如32位浮点数)减少到低精度(如8位或更低)以便减少模型大小和提高计算效率的技术。然而,直接进行量化可能会引入舍入误差,尤其是在模型参数分布不均匀时,这种误差可能会严重影响模型性能。
不合性(Incoherence)
不合性旨在使得矩阵的行或列之间在统计意义上独立或弱相关。具体来说,在量化过程中,如果权重矩阵和Hessian矩阵是不合的(incoherent),则这些矩阵的行或列的大小和方向是均匀分布的,这样可以减少舍入误差。
随机正交矩阵和Kronecker积
为了实现不合性处理,QuIP方法中采用了随机正交矩阵的Kronecker积。正交矩阵是指一个方阵,其行向量和列向量都是正交的,且模长为1。随机正交矩阵是通过随机生成的方式得到的正交矩阵。
Kronecker积是两个矩阵之间的操作,定义如下:
A ⊗ B = [ a 11 B a 12 B ⋯ a 1 n B a 21 B a 22 B ⋯ a 2 n B ⋮ ⋮ ⋱ ⋮ a m 1 B a m 2 B ⋯ a m n B ] A \otimes B = \begin{bmatrix} a_{11}B & a_{12}B & \cdots & a_{1n}B \\ a_{21}B & a_{22}B & \cdots & a_{2n}B \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1}B & a_{m2}B & \cdots & a_{mn}B \\ \end{bmatrix} A⊗B= a11Ba21B⋮am1Ba12Ba22B⋮am2B⋯⋯⋱⋯a1nBa2nB⋮amnB
其中, A A A是一个 m × n m \times n m×n的矩阵, B B B是一个 p × q p \times q p×q的矩阵, A ⊗ B A \otimes B A⊗B则是一个 m p × n q mp \times nq mp×nq的矩阵。
不合处理的具体步骤
不合处理通过以下步骤来实现权重和Hessian矩阵的不合性:
- 生成随机正交矩阵:生成一个随机正交矩阵 Q Q Q,这个矩阵可以通过对一个随机矩阵进行QR分解得到。
- Kronecker积:计算随机正交矩阵 Q Q Q的Kronecker积 Q ⊗ Q Q \otimes Q Q⊗Q,得到一个新的矩阵 K K K。
- 矩阵乘法:将权重矩阵和Hessian矩阵分别与 K K K相乘,得到新的不合矩阵 W ′ W' W′和 H ′ H' H′。
W ′ = K ⋅ W ⋅ K T W' = K \cdot W \cdot K^T W′=K⋅W⋅KT
H ′ = K ⋅ H ⋅ K T H' = K \cdot H \cdot K^T H′=K⋅H⋅KT
不合处理的作用
通过上述步骤,不合处理在以下几个方面发挥作用:
- 减少舍入误差:由于随机正交矩阵的作用,权重和Hessian矩阵的各个方向上的信息被均匀分布,从而减少某些方向上的突出值(异常值)。这使得在量化过程中,舍入误差能够更均匀地分布,减少了总体误差。
- 抑制异常值:异常值是指在数据中显著偏离其他值的点。在权重和激活空间中,异常值可能会导致量化过程中误差的累积。通过不合处理,这些异常值被有效抑制,使得量化后的模型具有更好的鲁棒性。
- 提高量化效果:经过不合处理后的矩阵在统计意义上更加独立,减少了量化过程中相邻元素之间的相关性,从而提高了量化效果,使得模型在更低的位宽下仍能保持较高的性能。
实验验证
实验结果表明,通过不合处理,QuIP方法在高压缩率下显著提高了量化效果。例如,在大规模LLMs(>2B参数)上,2位和4位压缩之间的差距显著减小,提示了2位推理在LLMs中的可行性。
总结
不合处理通过乘以随机正交矩阵的Kronecker积来确保权重和Hessian矩阵的不合性,从而减少舍入误差。这种处理不仅抑制了异常值,还提高了量化效果,使得在低位宽下的模型性能得以保持。理解不合处理的具体步骤和作用,对于深入掌握QuIP方法以及其他量化技术具有重要意义。