https://dropbox.tech/machine-learning/halfquadratic-quantization-of-large-machine-learning-models

目录

  1. 引言
  2. 半二次量化(HQQ)
  3. 处理时间
  4. 基准测试
  5. 结论

1. 引言

大型语言模型(LLMs)已彻底改变了机器学习的多个子领域,包括自然语言处理、语音识别和计算机视觉,使机器能够以前所未有的准确性和流畅度理解并生成输出。然而,部署大型语言模型面临的最关键挑战之一是其高昂的内存需求 —— 无论是训练阶段还是推理阶段均是如此。量化方法(如 bitsandbytes、GPTQ 和 AWQ)已使在内存显著减少的情况下运行 Llama-2 等热门大型模型成为可能,让机器学习社区能够借助单块消费级 GPU 开展卓越的研究工作。

本文提出了一种名为半二次量化(Half-Quadratic Quantization, HQQ) 的新型量化技术。该方法无需校准数据,能显著加快大型模型的量化速度,同时提供与基于校准的方法相当的压缩质量。例如,HQQ 处理庞大的 Llama-2-70B 模型仅需不到 5 分钟,相比被广泛采用的 GPTQ,速度提升超过 50 倍。在内存占用相当的情况下,我们量化至 2 位的 Llama-2-70B 模型,其性能大幅优于全精度的 Llama-2-13B 模型。

模型量化是在有限资源下部署大型模型并节省成本的关键步骤,这对于训练和推理阶段的大型语言模型而言尤为重要。bitsandbytes 等软件包已使在消费级 GPU 上运行大型模型成为现实,这对机器学习社区来说是一项革命性的突破。

在仅权重量化领域,主要存在两类方法:

  • 无数据校准技术(如 bitsandbytes):仅依赖模型权重,无需外部数据;
  • 基于校准的方法(如 GPTQ 和 AWQ):依赖外部数据集。

尽管基于校准的方法能提供更优的量化质量,但它们存在两个主要问题:

  1. 校准数据偏差:量化质量会受所提供校准数据的影响而下降;
  2. 量化时间长:校准过程计算量巨大(尤其是对于超大型模型),导致难以测试和部署多个模型。

如果能兼顾基于校准方法的质量与无校准量化方法的速度,岂不是两全其美?这正是我们通过半二次量化(HQQ)方法所要实现的目标。

2. 半二次量化(HQQ)

基础量化往往会导致模型精度损失,这是因为模型权重的取值范围广泛,量化过程可能会对其造成显著改变。其中,偏离分布的权重(通常称为 “异常值”)是一个特殊的挑战。分组精度调优量化(GPTQ)和激活感知层量化(AWQ)等算法试图通过依赖校准数据来最小化层输出误差,从而解决这一问题。

与这些方法不同,我们的方法专注于最小化权重本身的误差,而非层激活误差。此外,通过引入促进稀疏性的损失函数(如\(l_{p<1}\)范数),我们利用超拉普拉斯分布(hyper-Laplacian distribution)对异常值进行有效建模。与平方误差相比,该分布能更准确地捕捉异常值误差的重尾特性,从而实现对误差分布更精细的表征。

我们提出了一种鲁棒的优化公式来求解量化参数(零点z和缩放因子s)。具体而言,我们使用促进稀疏性的损失函数\(\phi()\)(如\(l_{p}\)范数)来衡量原始权重W与其反量化版本之间的差异:\(\underset{z,s}{\text{argmin}}\,\phi(W-Q_{z,s}^{-1}(Q_{z,s}(W))\)其中,\(Q_{z,s}()\)是依赖于z和s参数的量化算子,用于生成量化权重\(W_{q}\);\(Q_{z,s}^{-1}()\)是反量化算子:\(\begin{array}{c} Q_{z,s}(W)=\text{round}(W/s+z)=W_{q} \\ Q_{z,s}^{-1}(W_{q})=s(W_{q}-z) \end{array}\)

使用\(l_{p<1}\)范数会使问题变为非凸优化问题。为求解该问题,我们引入额外变量\(W_{e}\),采用半二次求解器(Half-Quadratic solver),将主问题分解为更易求解的子问题。此外,为简化计算,我们固定缩放因子s,仅对零点z进行优化:\(\underset{z,W_{e}}{\text{argmin}}\,\phi(W_{e})+\frac{\beta}{2}||W_{e}-(W-Q_{z}^{-1}(Q_{z}(W))||_{2}^{2}\)

随后,我们通过交替优化求解子问题:\(\begin{array}{cc} \text{(sp}_{1}) & W_{e}^{(t+1)}\leftarrow\underset{W_{e}}{\text{argmin}}\,\phi(W_{e})+\frac{\beta^{(t)}}{2}||W_{e}-(W-Q_{z}^{-1}(Q_{z}(W))||_{2}^{2} \\ \text{(sp}_{2}) & z^{(t+1)}\leftarrow\underset{z}{\text{argmin}}\,\frac{1}{2}||Q_{z}^{-1}(Q_{z}(W))-(W-W_{e}^{(t+1)})||_{2}^{2} \\ & \beta^{(t+1)}\leftarrow\kappa\beta^{(t)} \end{array}\)其中,\(\beta\)和\(\kappa\)为严格正数参数。

2.1 子问题\(\text{(sp}_{1})\)

该问题的形式为近邻算子(Proximal Operator)。当\(\phi()\)为\(l_{1}\)范数时,其解为软阈值算子;对于\(0 \le p \leq 1\)的\(l_{p}\)范数,存在更通用的阈值解,我们采用的是广义软阈值算子:\(\begin{array}{c} W_{e}^{(t+1)}\leftarrow\text{shrink}_{l_{p}}\left(W-Q_{z}^{-1}(Q_{z}(W)),\beta\right) \\ \text{shrink}_{l_{p}}(x,\beta)=\text{sign}(x)\text{relu}(|x|-\frac{|x|^{p-1}}{\beta}) \end{array}\)

2.2 子问题\(\text{(sp}_{2})\)

第二个子问题可重写为:

$$
\begin{array}{c}
    z^{\left( t+1 \right)}\gets \underset{z}{\text{arg}\min}\,\frac{1}{2}||z-\left( W_{q}^{\left( t+1 \right)}-\frac{\left( W-W_{e}^{\left( t+1 \right)} \right)}{s} \right) ||_{2}^{2}\\
    W_{q}^{\left( t+1 \right)}=\text{round}\left( W/s+z^{\left( t \right)} \right)\\
\end{array}
$$

其解为量化分组轴上的平均值:\(z^{(t+1)}\leftarrow\langle W_{q}^{(t+1)}-\frac{(W-W_{e}^{(t+1)})}{s}\rangle\)

在实现中,我们使用缩放因子的倒数\(1/s\)而非s,因为我们发现这在半精度计算中更稳定。

值得注意的是,与基于自动微分(autograd)的梯度下降法不同,我们提出的方法依赖闭形式解(closed-form solutions),无需计算梯度。这使我们能够在推理模式下以半精度运行所有计算,且求解器仅需几次迭代即可收敛。相比之下,使用 AdamW 优化器和 PyTorch 的自动微分需要数千次迭代才能获得良好结果,且在\(p < 1\)(我们用于促进稀疏性的参数范围)时会失效。得益于半二次求解器,我们的量化方法实现了显著的速度提升(量化 Llama-2-7B 模型时,比自动微分快 100 倍以上),甚至能在几分钟内处理最大型的模型。

3. 处理时间

我们报告了 Llama-2 系列模型的量化处理时间。我们发现,GPTQ 和 AWQ 的处理时间在不同机器上差异显著。我们的方法全程在 GPU 上以半精度执行量化,仅在求解器完成后使用 CPU 将数据传输至 GPU。HQQ 量化最大的 Llama-2-70B 模型仅需几分钟,相比 GPTQ 速度提升超过 50 倍。

3.1 Llama-2-7B:量化时间(分钟)

机器配置GPTQAWQHQQ
Titan RTX25221
A100 SXM412101

3.2 Llama-2-13B:量化时间(分钟)

机器配置GPTQAWQHQQ
Titan RTX40402
A100 SXM421201

3.3 Llama-2-70B:量化时间(分钟)

机器配置GPTQAWQHQQ
A100 SXM42152005

4. 基准测试

4.1 Llama-2 模型基准测试

为衡量我们方法的量化质量,我们在广泛使用的 wikitext2 数据集上采用困惑度(PPL)指标,并报告量化模型运行时的 GPU 内存占用(MEM,单位:GB)—— 根据序列长度的不同,预测阶段可能需要额外内存。我们与社区广泛使用的主流方法进行对比:bitsandbytes(BNB)、基于 AutoGPTQ 的 GPTQ 和基于 AutoAWQ 的 AWQ。

参数设置:半二次求解器的固定参数为\(p=0.7\)、\(\beta=1\)、\(\kappa=1.01\)、迭代次数 = 20;当误差不再改善时,采用早停策略退出求解器(我们尚未对参数进行大量调优,不同设置可能会获得更优结果)。与其他方法类似,我们采用分组方式将权重量化为缓冲区(_g128 表示分组大小为 128);零点量化为 8 位,不进行分组或优化。

方法量化位数(nBits)Llama-2-7BLlama-2-13BLlama-2-70B
困惑度(PPL)↓内存(MEM)↓困惑度(PPL)↓内存(MEM)↓困惑度(PPL)↓内存(MEM)↓
FP(全精度)165.1813.54.6325.6内存溢出(OOM)内存溢出(OOM)
BNB85.227.94.6714.43.1768.15
GPTQ_g12885.197.84.6314.83.1274.87
HQQ_g12885.197.64.63143.1269.32
BNB_g6445.434.74.798.23.2939.11
GPTQ_g12845.4154.748.93.2440
GPTQ_g6445.3854.739.13.2341.13
AWQ_g12845.324.64.718.23.2135.78
AWQ_g6445.284.64.78.53.237.08
HQQ_g12845.354.64.747.93.2135.97
HQQ_g6445.34.64.78.23.1937.52
GPTQ_g12836.33.95.2573.8533.7
GPTQ_g6436.145.167.33.733.47
HQQ_g12836.23.85.156.83.5830.11
HQQ_g6435.824.54.987.43.4533.46
GPTQ_g642无数据(nan)3.51369.4424.5
HQQ_g32215.613.57.635.94.8224.2
HQQ_g1627.34.16.366.94.1230.27
HQQ_g16_s*27.313.76.376.14.1326.37

注:* 表示缩放因子也量化为 8 位,分组大小为 128。

如上表所示,我们的方法无需校准数据即可实现优异性能。对于 Llama-2-70B 等大型模型,2 位量化的 HQQ 模型在内存占用相当的情况下,困惑度低于全精度的 Llama-2-13B 模型。

4.2 ViT 模型基准测试

我们还在视觉模型上评估了量化方法的有效性 —— 具体而言,我们对基于 LAION 数据集训练的视觉 Transformer(ViT)系列的多个 OpenCLIP 模型进行了量化。由于 Auto-GPTQ 和 Auto-AWQ 的校准仅支持文本输入,因此我们仅与 bitsandbytes 进行对比(将 Transformer 块中的所有线性层替换为其量化版本)。

我们进行了两组基准测试,并报告在 ImageNet 数据集上的 Top-1 和 Top-5 准确率:

  1. 零样本性能测试:使用 OpenAI 提示词,通过对所有模板的文本特征取平均生成零样本分类器。该测试直接衡量量化模型的质量,因为评估过程不涉及训练;
  2. 线性探测测试:将量化模型作为冻结骨干网络,在其特征之上训练线性 Softmax 分类器。该测试衡量量化模型作为冻结骨干网络的质量。

所有结果如下表所示:

方法量化位数(nBits)模型线性探测(Top-1)线性探测(Top-5)零样本(Top-1)零样本(Top-5)
FP(全精度)16ViT-B-320.7640.9410.6640.896
FP(全精度)16ViT-L-140.820.9640.7310.93
FP(全精度)16ViT-H-140.8410.9730.7720.949
BNB8ViT-B-320.7620.940.6630.896
HQQ8ViT-B-320.7630.9410.6630.896
BNB8ViT-L-140.820.9640.7310.93
HQQ8ViT-L-140.820.9640.7310.93
BNB8ViT-H-140.840.9720.7710.949
HQQ8ViT-H-140.8410.9730.7720.95
BNB4ViT-B-320.7330.9250.6080.859
HQQ4ViT-B-320.750.9330.6390.881
BNB4ViT-L-140.8150.9610.7180.925
HQQ4ViT-L-140.8150.9620.7210.926
BNB4ViT-H-140.8370.9710.7660.947
HQQ4ViT-H-140.8390.9730.7690.948
HQQ3ViT-B-320.6640.8810.4810.753
HQQ3ViT-L-140.7990.9540.6890.909
HQQ3ViT-H-140.8310.9690.7550.943
HQQ2ViT-B-320.3180.5510.040.106
HQQ2ViT-L-140.7310.9170.5590.815
HQQ2ViT-H-140.8080.960.7160.924

结果表明,尽管无需校准数据,我们的方法仍能生成高质量的量化模型。在 4 位量化下,HQQ 的零样本性能大幅优于 bitsandbytes(以 ViT-B-32 为例,Top-1 准确率提升 3.1%)。在极低比特量化场景中,3 位量化的 ViT-H-14 模型性能优于全精度的 ViT-L-14 模型(零样本 Top-1 准确率提升 2.4%),而 2 位量化版本的性能则大幅优于全精度的 ViT-B-32 模型(零样本 Top-1 准确率提升 5.2%)。

5. 结论

本文证明,通过我们提出的半二次量化(HQQ)方法,无校准量化能够实现与 GPTQ、AWQ 等主流数据依赖型方法相当的质量。我们已在不同模型规模和应用场景下,验证了 HQQ 在极低比特量化中的有效性。此外,通过利用半二次分裂等高效优化技术,我们的方法将量化时间缩短至几分钟 —— 即使对于 Llama-2-70B 等最大型模型亦是如此。

本文所有结果的复现代码已公开:https://github.com/mobiusml/hqq

标签:机器学习

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐