Back to blog

QQQ: Quality Quattuor-Bit Quantization for Large Language Models

W4A8量化方法,通过自适应平滑和Hessian补偿实现高质量4-bit权重量化,同时加速预填充和解码

QQQ: Quality Quattuor-Bit Quantization for Large Language Models

一、论文概述

项目内容
标题QQQ: Quality Quattuor-Bit Quantization for Large Language Models
作者Ying Zhang, Peng Zhang, Mincong Huang, Jingyang Xiang, Yujie Wang, Chao Wang, Yineng Zhang, Lei Yu, Chuan Liu, Wei Lin
机构Meituan, Zhejiang University
论文arXiv:2406.09904
发布2024年6月14日

二、核心思想

QQQ是一种高质量W4A8量化方法(4-bit权重,8-bit激活),通过自适应平滑和Hessian补偿解决W4A8量化的精度退化问题,同时开发高效的W4A8 GEMM内核实现推理加速。

问题定义

现有量化方法的局限:

方法类型代表问题
W8A8SmoothQuant仅加速预填充(计算密集),解码阶段收益有限
W4A16GPTQ, AWQ仅加速解码(内存密集),预填充阶段计算量未减少
W4A4Atom精度损失严重
W4A8QoQ精度仍有提升空间

W4A8的优势:同时减少权重内存(解码加速)和激活计算量(预填充加速),但面临两大挑战:

  1. 激活中的离群值导致量化误差大
  2. 缺乏高效的W4A8 GEMM内核

解决方案

QQQ通过以下技术解决上述挑战:

  1. 自适应平滑(Adaptive Smoothing):仅对含显著离群值的激活通道进行平滑,保留其他通道
  2. Hessian补偿(Hessian-based Compensation):基于二阶信息补偿权重量化损失
  3. 高效GEMM内核:针对per-channel和per-group量化分别设计W4A8 GEMM

三、技术架构

整体框架

QQQ框架

QQQ是一个两阶段量化方法:

  • 阶段1:自适应平滑激活通道,将量化难度从激活转移到权重
  • 阶段2:Hessian补偿权重量化,最小化量化误差

自适应平滑

核心思想:仅对含显著离群值的激活通道进行平滑,其他通道保持不变。

离群通道选择:

T={t∣max⁡(abs(X:,t))<σ}\mathcal{T} = \{t \mid \max(\text{abs}(\mathbf{X}_{:,t})) < \sigma\}

其中 σ\sigma 是通过网格搜索确定的阈值,范围为 [0,max⁡(abs(X))][0, \max(\text{abs}(\mathbf{X}))]。

平滑参数优化:

arg⁡min⁡s∥Q(X:,T⊘s)Q(WT,:⊙s)−XT,:WT,:∥2\arg\min_{\mathbf{s}} \|Q(\mathbf{X}_{:,\mathcal{T}} \oslash \mathbf{s}) Q(\mathbf{W}_{\mathcal{T},:} \odot \mathbf{s}) - \mathbf{X}_{\mathcal{T},:}\mathbf{W}_{\mathcal{T},:}\|^2

目标是最小化量化前后激活-权重乘积的平方误差。

Hessian补偿

在平滑激活后,使用GPTQ框架进行权重量化补偿:

权重更新:

Wi=arg⁡min⁡Wi(Q(Wi)−Wi)2[HF−1]i,i\mathbf{W}_i = \arg\min_{\mathbf{W}_i} (Q(\mathbf{W}_i) - \mathbf{W}_i)^2 [\mathbf{H}_F^{-1}]_{i,i}

误差补偿:

δF=−Wi−Q(Wi)[HF−1]i,i⋅(HF−1):,i\boldsymbol{\delta}_F = -\frac{\mathbf{W}_i - Q(\mathbf{W}_i)}{[\mathbf{H}_F^{-1}]_{i,i}} \cdot (\mathbf{H}_F^{-1})_{:,i}

其中 HF=2XFTXF\mathbf{H}_F = 2\mathbf{X}_F^T \mathbf{X}_F 是Hessian矩阵。

W4A8 GEMM内核

Per-Channel量化GEMM

Per-Channel W4A8 GEMM

流程:

  1. INT4权重 → INT8(FastINT4toINT8:左移4位)
  2. INT8 GEMM计算
  3. INT32结果 → FP16(反量化)

关键优化:

  • FastINT4toINT8:利用位移操作高效转换
  • 融合反量化:在GEMM内完成INT32到FP16的转换

Per-Group量化GEMM

Per-Group W4A8 GEMM

流程:

  1. INT4权重 → FP16(FastINT4toFP16)
  2. FusedDequantQuant:组缩放反量化 + 通道缩放重量化
  3. FP16 → INT8(FastFP16toINT8)
  4. INT8 GEMM计算
  5. INT32结果 → FP16(反量化)

FusedDequantQuant优化:

FusedDequantQuant设计

将组缩放除以通道缩放,合并为单一操作,减少内存访问。

FastFP16toINT8优化:

FastFP16toINT8设计

传统方法:使用标准FP16→INT8指令,速度慢。

QQQ方法:

  1. 加128:将FP16值移到[0.0, 255.0]范围(对应UINT8)
  2. 加1024:将UINT8的8位对齐到FP16尾数的低位
  3. 位提取:直接从FP16位模式中提取INT8值

加速效果:FastFP16toINT8可加速per-group W4A8 GEMM最高2.02×。

四、核心创新

创新点说明效果
自适应平滑仅平滑含离群值的激活通道比全通道平滑更有效
Hessian补偿基于二阶信息补偿权重量化损失显著降低精度退化
FastINT4toINT8位移操作实现高效类型转换per-channel GEMM 3.67×加速
FusedDequantQuant融合组缩放反量化和通道缩放量化减少内存访问
FastFP16toINT8位操作替代标准转换指令per-group GEMM 2.02×加速

与现有方法对比

方法位宽对称量化预填充加速解码加速精度
SmoothQuantW8A8✓✓✗高
GPTQW4A16✗✗✓高
AWQW4A16✗✗✓高
AtomW4A4✓✓✓中
QoQW4A8✗✓✓高
QQQW4A8✓✓✓高

五、实验结果

评估设置

项目配置
模型LLaMA-1 (7B/13B/30B), LLaMA-2 (7B/13B/70B), LLaMA-3 (8B)
基准WikiText2 (困惑度), PIQA/ARC/HellaSwag/WinoGrande (零样本)
硬件NVIDIA A100 80G GPU
框架vLLM v0.4.1 + Marlin内核

WikiText2困惑度

Table 1: WikiText2困惑度(序列长度2048)

位宽方法LLaMA-1 7B13B30BLLaMA-2 7B13B70BLLaMA-3 8B
FP16-5.685.094.105.474.883.326.27
W8A8SmoothQuant5.785.174.285.584.933.396.39
W4A16GPTQ-g1285.835.204.225.634.993.436.44
AWQ-g1285.785.194.215.604.973.416.38
W4A4Atom-g1286.255.524.616.125.313.737.16
W4A8QoQ5.935.284.345.755.123.526.61
QQQ5.845.204.285.655.013.436.49
QQQ-g1285.765.154.195.574.953.386.36

关键发现:

  • Per-group QQQ与W8A8 SmoothQuant、W4A16 GPTQ、W4A16 AWQ性能相当
  • 相比W4A4 Atom,per-group QQQ在LLaMA-2-13B上困惑度降低0.41
  • 相比W4A8 QoQ,per-group QQQ在大多数模型上更优

零样本准确率

Table 2: LLaMA-2零样本准确率

模型方法PIQAARC-eARC-cHellaSwagWinoGrande
7BFP1679.0574.5846.2576.0568.98
Atom-g12875.1452.9938.4069.3762.75
QoQ77.6472.8143.6074.0068.03
QQQ-g12878.5172.9444.3774.5367.01
13BFP1680.5277.4449.0679.3872.22
Atom-g12876.0755.6439.4271.8664.72
QoQ78.7275.2446.3377.1470.17
QQQ-g12879.4176.2847.1577.4470.48

关键发现:

  • QQQ显著优于W4A4 Atom(LLaMA-2-13B HellaSwag上+4.79%)
  • Per-group QQQ与QoQ相当,平均提升0.3%

推理吞吐量

吞吐量对比

在LLaMA-2-13B上的加速比:

对比方法加速比
vs FP162.24×
vs W8A8 SmoothQuant2.10×
vs W4A16 AWQ1.59×
vs W4A16 Marlin1.25×

关键发现:

  • QQQ在大多数batch size下优于所有对比方法
  • 相比W4A16 AWQ和Marlin,小batch size时速度相当,大batch size时优势明显
  • 相比W8A8 SmoothQuant,平均约2×加速

GEMM内核性能

GEMM加速

Per-channel W4A8 GEMM加速比:

对比方法加速比
vs PyTorch FP16 GEMM3.67×
vs W8A8 GEMM2.51×
vs W4A16 Marlin GEMM1.71×

Per-group W4A8 GEMM加速比:

对比方法加速比
vs PyTorch FP16 GEMM3.29×
vs W8A8 GEMM2.26×

关键发现:

  • 小token数(<64)时W4A8 GEMM相比W8A8有显著优势
  • 随token数增加,per-channel GEMM变慢(类型转换开销),per-group保持高效

FastFP16toINT8效果

Per-group GEMM加速

  • FastFP16toINT8可加速per-group W4A8 GEMM最高2.02×
  • 证明了高效类型转换对GEMM性能的关键影响

消融实验

Table 3: 量化技术组合效果(LLaMA系列困惑度)

粒度模型基线+自适应平滑+GPTQ补偿
Per-channelLLaMA-1-7B6.936.776.19
LLaMA-1-13B5.845.845.43
LLaMA-1-30B5.044.894.61
LLaMA-2-7B7.367.295.95
LLaMA-2-13B5.475.435.21
LLaMA-2-70B4.073.883.68
LLaMA-3-8B10.889.467.41

关键发现:

  • 自适应平滑 + GPTQ补偿组合效果最佳
  • 在LLaMA-3-8B上,困惑度从10.88降至7.41(降低3.47)

六、相关工作

方向代表工作QQQ优势
W8A8量化SmoothQuant, LLM.int8()同时加速预填充和解码
W4A16量化GPTQ, AWQ预填充阶段也获得加速
W4A4量化Atom精度显著更高
W4A8量化QoQ对称量化更高效,精度相当
GEMM优化Marlin专为W4A8设计,速度更快

七、总结

核心贡献

  1. 提出QQQ,一种高质量W4A8量化方法,通过自适应平滑和Hessian补偿实现接近FP16的精度
  2. 开发高效的W4A8 GEMM内核,包括FastINT4toINT8、FusedDequantQuant和FastFP16toINT8优化
  3. 集成到vLLM框架,实现端到端推理加速
  4. 在LLaMA系列模型上验证有效性和通用性

性能总结

指标结果
精度接近FP16,显著优于W4A4 Atom
GEMM加速per-channel 3.67×,per-group 3.29× vs FP16
端到端加速2.24× vs FP16,2.10× vs W8A8,1.25× vs W4A16 Marlin
兼容性支持per-channel和per-group量化,集成vLLM

局限性

  1. 两阶段量化方法需要更多量化时间
  2. 混合精度GEMM目前仅支持4-bit权重
  3. 对称量化限制了某些场景的灵活性

八、参考资源