Skip to content
🔗 分享本题
查看我的学习进度 →

GPTQ 逐块误差补偿与 AWQ 保护激活敏感通道的量化对比图

🧠 记忆锚点:GPTQ 用误差补偿逐块量化,AWQ 保护激活敏感通道;最终看目标硬件与任务评测。

💡 答案要点

GPTQ 和 AWQ 都是 INT4 权重量化方法

核心挑战: 直接 INT4 量化精度损失大(>5%),需要智能量化

GPTQ(GPT Quantization):

核心思想: 最小化量化误差

目标:找到量化权重 W_q,使得:
  误差 = ||WX - W_qX||² 最小

算法(逐层量化):
  1. 用校准数据集收集激活值 X
  2. 计算 Hessian 矩阵(二阶导数)
  3. 逐列量化权重,最小化误差
  4. 更新后续列以补偿误差

优势:

  • 数学严谨,误差最小
  • 支持极低比特(2-4 bit)

劣势:

  • 量化慢(需计算 Hessian)
  • 推理时需要分组反量化

AWQ(Activation-aware Weight Quantization):

核心思想: 保护重要权重

观察:
  某些权重对应的激活值特别大
  这些权重的量化误差影响更大

策略:
  1. 分析激活值分布
  2. 重要通道(激活值大):保持高精度或加大 scale
  3. 不重要通道:可以激进量化

算法:

python
# 1. 收集激活值
activations = []
for batch in calibration_data:
    act = model(batch)
    activations.append(act)

# 2. 计算通道重要性
importance = activations.abs().mean(dim=0)

# 3. 自适应量化
for channel in range(num_channels):
    if importance[channel] > threshold:
        # 重要通道:FP16 或大 scale
        scale[channel] = max(W[channel]) / 7  # 给更多表示空间
    else:
        # 不重要通道:INT4 或小 scale
        scale[channel] = max(W[channel]) / 7

优势:

  • 量化快(只需统计激活)
  • 推理快(权重直接量化)
  • 精度好(保护重要权重)

劣势:

  • 需要校准数据集
  • 对数据分布敏感

对比:

维度GPTQAWQ
量化速度慢(小时级)快(分钟级)
推理速度中(需分组)快(直接)
精度最好很好
实现难度
适用场景极致压缩平衡性能和精度

实测对比(Llama 2 7B,MMLU):

方法准确率量化时间推理速度
FP1646.8%-50 tok/s
INT8 RTN45.9%10min80 tok/s
GPTQ45.8%4h90 tok/s
AWQ46.2%20min95 tok/s

面试话术:

示例表达(仅在能用本人经历或可复现实验佐证时使用): "GPTQ 是数学派,追求最优解,量化慢但精度高。AWQ 是工程派,找重要权重保护,量化快推理也快。我在项目中用 AWQ,20 分钟量化完成,精度损失不到 1%。"

📚 参考:GPTQ: Accurate Post-Training Quantization(原论文) · AWQ: Activation-aware Weight Quantization(原论文)