【文献阅读】HQQ 半二次量化:大型机器学习模型的高效量化方法
https://dropbox.tech/machine-learning/halfquadratic-quantization-of-large-machine-learning-models

目录
- 引言
- 半二次量化(HQQ)
- 处理时间
- 基准测试
- 结论
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):依赖外部数据集。
尽管基于校准的方法能提供更优的量化质量,但它们存在两个主要问题:
- 校准数据偏差:量化质量会受所提供校准数据的影响而下降;
- 量化时间长:校准过程计算量巨大(尤其是对于超大型模型),导致难以测试和部署多个模型。
如果能兼顾基于校准方法的质量与无校准量化方法的速度,岂不是两全其美?这正是我们通过半二次量化(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:量化时间(分钟)
| 机器配置 | GPTQ | AWQ | HQQ |
|---|---|---|---|
| Titan RTX | 25 | 22 | 1 |
| A100 SXM4 | 12 | 10 | 1 |
3.2 Llama-2-13B:量化时间(分钟)
| 机器配置 | GPTQ | AWQ | HQQ |
|---|---|---|---|
| Titan RTX | 40 | 40 | 2 |
| A100 SXM4 | 21 | 20 | 1 |
3.3 Llama-2-70B:量化时间(分钟)
| 机器配置 | GPTQ | AWQ | HQQ |
|---|---|---|---|
| A100 SXM4 | 215 | 200 | 5 |
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-7B | Llama-2-13B | Llama-2-70B | |||
|---|---|---|---|---|---|---|---|
| 困惑度(PPL)↓ | 内存(MEM)↓ | 困惑度(PPL)↓ | 内存(MEM)↓ | 困惑度(PPL)↓ | 内存(MEM)↓ | ||
| FP(全精度) | 16 | 5.18 | 13.5 | 4.63 | 25.6 | 内存溢出(OOM) | 内存溢出(OOM) |
| BNB | 8 | 5.22 | 7.9 | 4.67 | 14.4 | 3.17 | 68.15 |
| GPTQ_g128 | 8 | 5.19 | 7.8 | 4.63 | 14.8 | 3.12 | 74.87 |
| HQQ_g128 | 8 | 5.19 | 7.6 | 4.63 | 14 | 3.12 | 69.32 |
| BNB_g64 | 4 | 5.43 | 4.7 | 4.79 | 8.2 | 3.29 | 39.11 |
| GPTQ_g128 | 4 | 5.41 | 5 | 4.74 | 8.9 | 3.24 | 40 |
| GPTQ_g64 | 4 | 5.38 | 5 | 4.73 | 9.1 | 3.23 | 41.13 |
| AWQ_g128 | 4 | 5.32 | 4.6 | 4.71 | 8.2 | 3.21 | 35.78 |
| AWQ_g64 | 4 | 5.28 | 4.6 | 4.7 | 8.5 | 3.2 | 37.08 |
| HQQ_g128 | 4 | 5.35 | 4.6 | 4.74 | 7.9 | 3.21 | 35.97 |
| HQQ_g64 | 4 | 5.3 | 4.6 | 4.7 | 8.2 | 3.19 | 37.52 |
| GPTQ_g128 | 3 | 6.3 | 3.9 | 5.25 | 7 | 3.85 | 33.7 |
| GPTQ_g64 | 3 | 6.1 | 4 | 5.16 | 7.3 | 3.7 | 33.47 |
| HQQ_g128 | 3 | 6.2 | 3.8 | 5.15 | 6.8 | 3.58 | 30.11 |
| HQQ_g64 | 3 | 5.82 | 4.5 | 4.98 | 7.4 | 3.45 | 33.46 |
| GPTQ_g64 | 2 | 无数据(nan) | 3.5 | 13 | 6 | 9.44 | 24.5 |
| HQQ_g32 | 2 | 15.61 | 3.5 | 7.63 | 5.9 | 4.82 | 24.2 |
| HQQ_g16 | 2 | 7.3 | 4.1 | 6.36 | 6.9 | 4.12 | 30.27 |
| HQQ_g16_s* | 2 | 7.31 | 3.7 | 6.37 | 6.1 | 4.13 | 26.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 准确率:
- 零样本性能测试:使用 OpenAI 提示词,通过对所有模板的文本特征取平均生成零样本分类器。该测试直接衡量量化模型的质量,因为评估过程不涉及训练;
- 线性探测测试:将量化模型作为冻结骨干网络,在其特征之上训练线性 Softmax 分类器。该测试衡量量化模型作为冻结骨干网络的质量。
所有结果如下表所示:
| 方法 | 量化位数(nBits) | 模型 | 线性探测(Top-1) | 线性探测(Top-5) | 零样本(Top-1) | 零样本(Top-5) |
|---|---|---|---|---|---|---|
| FP(全精度) | 16 | ViT-B-32 | 0.764 | 0.941 | 0.664 | 0.896 |
| FP(全精度) | 16 | ViT-L-14 | 0.82 | 0.964 | 0.731 | 0.93 |
| FP(全精度) | 16 | ViT-H-14 | 0.841 | 0.973 | 0.772 | 0.949 |
| BNB | 8 | ViT-B-32 | 0.762 | 0.94 | 0.663 | 0.896 |
| HQQ | 8 | ViT-B-32 | 0.763 | 0.941 | 0.663 | 0.896 |
| BNB | 8 | ViT-L-14 | 0.82 | 0.964 | 0.731 | 0.93 |
| HQQ | 8 | ViT-L-14 | 0.82 | 0.964 | 0.731 | 0.93 |
| BNB | 8 | ViT-H-14 | 0.84 | 0.972 | 0.771 | 0.949 |
| HQQ | 8 | ViT-H-14 | 0.841 | 0.973 | 0.772 | 0.95 |
| BNB | 4 | ViT-B-32 | 0.733 | 0.925 | 0.608 | 0.859 |
| HQQ | 4 | ViT-B-32 | 0.75 | 0.933 | 0.639 | 0.881 |
| BNB | 4 | ViT-L-14 | 0.815 | 0.961 | 0.718 | 0.925 |
| HQQ | 4 | ViT-L-14 | 0.815 | 0.962 | 0.721 | 0.926 |
| BNB | 4 | ViT-H-14 | 0.837 | 0.971 | 0.766 | 0.947 |
| HQQ | 4 | ViT-H-14 | 0.839 | 0.973 | 0.769 | 0.948 |
| HQQ | 3 | ViT-B-32 | 0.664 | 0.881 | 0.481 | 0.753 |
| HQQ | 3 | ViT-L-14 | 0.799 | 0.954 | 0.689 | 0.909 |
| HQQ | 3 | ViT-H-14 | 0.831 | 0.969 | 0.755 | 0.943 |
| HQQ | 2 | ViT-B-32 | 0.318 | 0.551 | 0.04 | 0.106 |
| HQQ | 2 | ViT-L-14 | 0.731 | 0.917 | 0.559 | 0.815 |
| HQQ | 2 | ViT-H-14 | 0.808 | 0.96 | 0.716 | 0.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
标签:机器学习
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)