前言
近期在学习Qwen3的模型结构时,看到了Qwen使用了GPTQ与AWQ量化方案,于是便萌生了介绍LLM 量化技术的想法,笔者将用2-3篇文章,给读者们介绍大模型量化的技术。
量化是指将高精度计算的浮点型数据近似为低比特位数据(如int16、int8、int4等)的过程,此过程需在不显著损耗精度的同时,提升模型推理效率并降低内存占用。特别是在当前主流大语言模型(LLM)的参数量轻松突破万亿规模的情况下,量化技术对于高效低成本部署LLM尤为重要。而且由于LLM的参数量巨大,当前主流的模型都采用PTQ后量化技术,从而降低量化过程带来的成本。
在正式开始这篇文章之前,我们首先来了解一下LLM量化的相关概念。
LLM量化相关概念
LLM量化常用的数值格式
数值格式 | 说明 |
FP32 | 单精度浮点数,用 32 位表示,包括 1 个符号位、8 个指数位和 23 个尾数位,精度高但计算和存储开销大。 |
FP16 | 半精度浮点数,16 位表示,1 个符号位、5 个指数位和 10 个尾数位,计算速度快但动态范围较小。 |
BF16 | 16 位,保持与 FP32 相同的 8 位指数位,7 位尾数位,牺牲部分尾数精度换来了更大的动态范围,更适合模型训练。 |
FP8 |
E4M3 能表示的精度更高,适用于权重存储、推理中间激活(分布较稳定,要求精度高); E5M2 能表示的动态范围更大,增加动态范围的代价是存储值的精度较低,适用于梯度反向传播、累积值(分布跨度大,需要更宽的动态范围)。 |
INT8/INT4 | INT8 用 8 位表示 256 个离散整数值,INT4 用 4 位表示 16 个值。它们借助缩放因子和零点来近似浮点数,整数运算在硬件层面更高效。 |
LLM量化对象
在部署推理时,LLM的量化对象与传统的CNN有所不同,除了权重与激活以外,还增加了LLM特有的KV Cache。所以,LLM的量化对象主要是权重、激活和KV Cache。
- 权重量化:仅对LLM中的权重进行量化,常见的方法有GPTQ (W4A16,权重量化为 INT4,激活保持 FP16/BF16)、AWQ(W4A16/W8A16)等;
- 激活量化:对LLM中的激活进行量化,常见的方法有SmoothQuant (W8A8)、LLM.int8()等,由于激活分布范围大且动态变化,相比权重量化更具挑战;
- KV Cache 量化:在 LLM 推理中,为避免重复计算,会缓存 Attention 中的 Key/Value 向量(KV Cache)。 KV Cache 的大小与 上下文长度线性相关,是长文本推理时的主要显存瓶颈。常见的方法有KV Cache INT8/INT4 量化。
LLM的实际部署过程中,常见的量化方案包括:
- W4A16(GPTQ、AWQ) :权重量化为 INT4,激活保持 FP16/BF16。
- W8A16 : 权重量化为 INT8,激活保持 FP16/BF16。
- W8A8(SmoothQuant): 权重和激活均量化为 INT8。
- KV Cache INT8 :缓解长上下文显存开销。
下面,我们将对具体的量化方法进行介绍。
主流LLM量化方法介绍
AWQ 结合 AutoAWQ量化方法介绍及使用示例
AWQ 量化技术原理
权重对于大语言模型的性能并不同样重要, 有一小部分(0.1%-1%)对模型精度影响较大的关键权重;跳过这些关键权重的量化将显著减少量化精度损失。
而且,关键权重对应于较大激活幅度的权重通道更加显着,因为它们处理更重要的特征,从而根据这个现象寻找关键权重。尽管将 0.1% 的权重保留为 FP16 可以在不明显增加模型大小的情况下提高量化性能,但这种混合精度数据类型会给系统实现带来困难(硬件效率低下)。
设计了一种per-channel缩放方法来自动搜索最佳缩放,从而减少显著权重的量化误差,这种方法不存在硬件效率低下的问题。

PPL:即困惑度Perplexity,是语言模型预测序列的平均不确定性度量。PPL 越小,表示模型越“自信”且预测越接近真实分布;PPL 越大,说明预测分布和真实分布偏差更大。
上图是作者的实验,可以看出:
左图:所有的权重都从FP16量化到INT3,PPL为43.2;
中图:基于激活分布找到了1%的关键权重,将关键权重保持FP16精度,其余权重量化到INT3,PPL由43.2大幅下降至13.0,但这种混合精度格式在硬件上运行并不高效;
右图: AWQ 执行per-channel缩放以保护关键权重从而减少量化误差,这里可以看到缩放weight后再做量化的PPL为13.0,缩放本身未对精度产生影响。


为提升该过程的稳定性,我们通过分析影响缩放因子(scaling factor)选择的相关因素,为最优缩放比例(optimal scale)定义了一个搜索空间(search space)。如前一部分所述,权重通道(weight channels)的显著性实际上由激活值缩放比例(activation scale)决定(即 “激活感知性”,activation-awareness)。因此,AWQ采用了一个极为简洁的搜索空间,具体如下:

AWQ 量化模型示例
安装依赖
量化模型
- "w_bit": 权重量化的位宽
- "q_group_size":量化不是对整个权重张量做一次缩放,而是分组处理,上述示例选择每组 128 个权重会共享一组缩放因子(scale)和零点(zero point),128 是一个常用折中值(Meta 在 LLaMA-2/3 的 INT4 AWQ 中也常用 128)。
- "zero_point":是否使用零点(zero point)补偿,如果设成 False,就是对称量化(中心对齐 0),如果设成 True,就是非对称量化,可以更好覆盖权重分布,提高精度。
- "version": 底层推理内核类型(后端实现方式)。GEMM:通用矩阵乘法(General Matrix Multiplication),适合大模型的权重矩阵乘法。GEMV:矩阵-向量乘法(适合批次小、延迟敏感的场景)。一般推荐用 GEMM,因为推理框架(Transformers, vLLM 等)大部分优化都是基于 GEMM 内核。
加载量化后的模型进行推理
GPTQ
GPTQ 量化的优点:
- 无须重新训练(仅需少量校准数据)。
量化精度接近全精度,4bit GPTQ 能维持 LLaMA、OPT 等模型接近 FP16 的性能。
速度快,实用性强,已成为主流 LLM 低比特推理方法。
GPTQ 量化的缺点:
量化过程涉及 Hessian 矩阵近似和逐元素优化,计算复杂度较高。
一般只量化权重,激活量化效果不佳(通常保持 FP16)。
GPTQ量化技术原理
GPTQ是一种高精度、高效率的量化方法,它可以在大约四个 GPU 小时内量化具有 1750 亿个参数的 GPT 模型,将位宽降低到每个权重 3 位或 4 位,与未压缩基线相比,精度下降可以忽略不计。GPTQ源于OBQ(Optimal Brain Quantization),而OBQ改进自剪枝方法OBS(Optimal Brain Surgeon),OBS又源自Yann LeCun 1990年提出的OBD(Optimal Brain Damage)。OBD通过泰勒展开简化目标函数并计算海森矩阵确定参数影响;OBS考虑参数交叉项,求海森矩阵逆确定剪枝顺序并更新其他参数减少误差。OBQ将剪枝思路推广到量化,视剪枝为近似0的特殊量化,但速度慢,大模型量化需数天。GPTQ作为OBQ加速版,优化算法性能,降低复杂度并保证精度,176B Bloom模型量化不到4小时,且有严谨数学理论推导。
GPTQ在执行量化操作时,会先对权重实施分组处理(比如,每128列划分为一个组),进而构成若干个数据块。对于每个数据块里的全部参数,会逐一开展量化工作。在完成某一个参数的量化后,借助校准数据集,对该数据块中其余还未进行量化的参数进行合理调节,通过这种方式来补偿量化过程中产生的精度损耗。GPTQ的量化过程如下所示:

前向采样数据
构造量化优化问题

其中WX为量化前的权重和激活输入,另外一项为量化后的权重和激活。
Hessian近似
GPTQ 使用输入激活的协方差来近似 Hessian,这样就转化为公式(2)中的问题:

逐元素优化(带校正)

重复上述步骤,依次处理完一层的全部权重。然后继续到下一层,直到整个模型量化完成。
GPTQ量化使用示例
安装依赖
推荐通过安装源代码的方式获取并安装AutoGPTQ工具包:
量化模型
参考资料
https://zhuanlan.zhihu.com/p/681578090
https://zhuanlan.zhihu.com/p/680212402
http://cnblogs.com/xwher/p/18788021
AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration
GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers
