
🧠 记忆锚点: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优势:
- 量化快(只需统计激活)
- 推理快(权重直接量化)
- 精度好(保护重要权重)
劣势:
- 需要校准数据集
- 对数据分布敏感
对比:
| 维度 | GPTQ | AWQ |
|---|---|---|
| 量化速度 | 慢(小时级) | 快(分钟级) |
| 推理速度 | 中(需分组) | 快(直接) |
| 精度 | 最好 | 很好 |
| 实现难度 | 高 | 中 |
| 适用场景 | 极致压缩 | 平衡性能和精度 |
实测对比(Llama 2 7B,MMLU):
| 方法 | 准确率 | 量化时间 | 推理速度 |
|---|---|---|---|
| FP16 | 46.8% | - | 50 tok/s |
| INT8 RTN | 45.9% | 10min | 80 tok/s |
| GPTQ | 45.8% | 4h | 90 tok/s |
| AWQ | 46.2% | 20min | 95 tok/s |
面试话术:
示例表达(仅在能用本人经历或可复现实验佐证时使用): "GPTQ 是数学派,追求最优解,量化慢但精度高。AWQ 是工程派,找重要权重保护,量化快推理也快。我在项目中用 AWQ,20 分钟量化完成,精度损失不到 1%。"
📚 参考:GPTQ: Accurate Post-Training Quantization(原论文) · AWQ: Activation-aware Weight Quantization(原论文)