本站内容由 AI 生成,可能存在错误。如发现问题,欢迎到 GitHub Issues 反馈。

PTQ 权重量化:从 GPTQ 到 AWQ

PTQ 权重量化:从 GPTQ 到 AWQ

更新于 2026-04-05

Post-Training Quantization (PTQ,训练后量化) 在模型训练完成后直接对权重进行量化,无需重新训练。相比 QAT 的零训练成本优势——只需少量校准数据和几分钟处理时间——使 PTQ 成为 LLM 部署的首选量化方案。本文深入分析四种主流 PTQ 方法的算法原理和适用场景。

Round-to-Nearest 的局限

最简单的量化方式是 Round-to-Nearest (RTN):对每个权重直接取最近的量化值。RTN 在 8-bit 时表现尚可——LLaMA2-7B 的 perplexity 从 FP16 的 5.47 仅升至约 5.52。但降到 4-bit 时,perplexity 飙升到 7.2 以上。

核心问题:RTN 独立处理每个权重,忽略了权重之间的相关性。当量化一个权重产生误差时,这个误差对模型输出的影响取决于该权重与其他权重的关系 (Hessian 矩阵)。RTN 完全忽略了这种结构化信息。

GPTQ:Hessian 引导的误差补偿

GPTQ (Frantar et al., 2022) 基于关键洞察:量化一个权重产生的误差可以通过调整尚未量化的权重来补偿

算法的核心是 Optimal Brain Quantization (OBQ) 的高效近似:逐列处理权重矩阵,利用 H1H^{-1} (Hessian 逆矩阵) 将当前列的量化误差最优分配到后续列。更新公式:

δF=wqw[HF1]qq(HF1):,q\delta_F = -\frac{w_q - w}{[H_F^{-1}]_{qq}} \cdot (H_F^{-1})_{:,q}

关键优化:Lazy Batch Updates 每 128 列批量更新一次,减少内存访问。校准需要 128-512 个文本样本的前向传播来估计 Hessian 矩阵。

Step 1: 原始权重矩阵 W (FP16)
W (FP16) — Hessian H⁻¹ 引导量化顺序+0.0312-0.0187+0.0456-0.0089-0.0234+0.0401-0.0156+0.0278+0.0178-0.0345+0.0289-0.0198-0.0401+0.0156-0.0367+0.0423GPTQ 逐列量化: 利用 Hessian 逆矩阵将误差最优地分散到后续列

实际效果:LLaMA2-7B 在 INT4-g128 下 perplexity 仅 5.67,接近 FP16 的 5.47。量化 7B 模型约需 10 分钟和单张 GPU。

AWQ:激活感知的权重量化

AWQ (Lin et al., 2023) 从另一个角度出发:不是所有权重同等重要。观察发现 LLM 的激活中存在约 1% 的显著通道 (salient channels),这些通道的激活值远大于其他通道。

AWQ 的解决方案是 per-channel scaling:对显著通道的权重乘以较大的 scale factor ss,使其量化粒度更细。同时激活除以 ss 保持数学等价:

Y=XW=(Xdiag(s)1)(diag(s)W)Y = XW = (X \cdot \text{diag}(s)^{-1}) \cdot (\text{diag}(s) \cdot W)

激活矩阵 X(点击列选择通道)0.120.034.80.080.150.020.110.060.090.055.20.110.070.040.130.080.140.024.70.060.180.030.090.050.110.045.00.090.120.050.140.070.080.064.90.130.090.020.100.040.130.035.20.070.160.040.120.060.100.054.80.100.110.030.080.090.150.045.30.080.140.050.110.07ch0ch1ch2ch3ch4ch5ch6ch7通道 2 ⚡ 显著通道max=5.34 mean=4.989缩放因子 s = 10.68AWQ 放大此通道权重 → 量化粒度更细 → 误差更小缩放前量化误差: 0.47缩放后量化误差: 0.05Y = XW = (X·diag(s)⁻¹)·(diag(s)·W) — 保持数学等价, 保护 1% 关键通道AWQ 是"事前预防" (调整分布使其易量化) vs GPTQ 是"事后补救" (补偿量化误差)

AWQ 的关键优势:无需反向传播 (量化速度快 ~5 min)、输出标准 INT4 格式 (兼容 vLLM/TRT-LLM)、质量优异 (LLaMA2-7B INT4-g128 perplexity ~5.60)。

与 GPTQ 的本质区别:GPTQ 在量化过程中修改未量化权重来补偿误差 (“事后补救”),AWQ 在量化前调整权重分布使其更易量化 (“事前预防”)。两者可以组合使用。

SmoothQuant:平滑激活离群值

前面的方法聚焦权重量化 (weight-only),SmoothQuant (Xiao et al., 2022) 解决的是 W8A8——同时量化权重和激活,利用 INT8 Tensor Core 加速。

激活量化的难点在于 outlier channels:部分通道值域达其他通道的 100 倍以上,per-tensor INT8 量化无法同时保留大值和小值精度。

SmoothQuant 的核心思想——将量化难度从激活迁移到权重:

Y=XW=(Xdiag(s)1)(diag(s)W)=XWY = X \cdot W = (X \cdot \text{diag}(s)^{-1}) \cdot (\text{diag}(s) \cdot W) = X' \cdot W'

平滑因子 sj=max(Xj)αs_j = \max(|X_j|)^\alphaα=0.5\alpha = 0.5 是经验最优值。变换后 XX' 各通道动态范围接近,WW' 值虽略增但仍可控,两者都可用 per-tensor INT8 量化。

Step 1: 原始 Activation (通道 2 是 outlier)
Activation X (FP16)0.5000.30048.20.8000.4000.60052.10.5000.7000.20045.70.9000.3000.50050.80.600通道 2 动态范围 (~50) 是其他通道 (~1) 的 50 倍Per-tensor INT8 量化: scale 被 outlier 主导 → 正常通道精度崩溃Per-channel max:ch0: 0.7ch1: 0.6ch2: 52.1ch3: 0.9

SmoothQuant 在数据中心场景最具价值:W8A8 直接利用 GPU 的 INT8 Tensor Core (A100/H100),吞吐量相比 FP16 提升 1.5-2 倍。

方法对比与选型

校准样本量化耗时位宽PPL (4-bit)推理框架适用场景RTN0<1 minW4/W8~7.2通用快速基线GPTQ128~10 minW4/W3/W2~5.67ExLlama/vLLM4-bit 部署AWQ128~5 minW4~5.60vLLM/TRT-LLM高效部署SmoothQuant512~15 minW8A8~5.73TRT-LLM高吞吐推理点击单元格查看详细说明

选型建议:

  • 消费级 GPU 部署 (RTX 3090/4090):选 AWQ 或 GPTQ 的 INT4-g128,用 vLLM 或 ExLlamaV2
  • 数据中心高吞吐 (A100/H100):选 SmoothQuant 的 W8A8,用 TensorRT-LLM
  • 快速评估:先用 RTN INT8 验证,再切换更精细方法
  • 极低比特 (2-3 bit):GPTQ 支持但质量损失较大,需评估是否需要 QAT

总结

PTQ 权重量化已发展出成熟工具链。GPTQ 通过 Hessian 误差补偿实现高质量逐列量化,AWQ 利用激活感知 per-channel scaling 保护关键通道,SmoothQuant 通过数学变换让 W8A8 成为可能。三者各有侧重,实际部署应根据硬件条件和精度需求选择。