引言
大模型的量化(Quantization)是将高精度浮点模型转换为低精度表示的技术。2026年,INT4量化已经从"实验性技术"成为"生产级方案",让70B参数模型在消费级GPU上运行成为可能。
量化技术分类
按训练方式分类
量化方法
├── 训练后量化(PTQ)
│ ├── PTQ-W(权重量化)
│ └── PTQ-A(激活量化)
├── 校准量化(Calibration-based)
│ ├── LLM.int8()
│ └── SmoothQuant
├── 感知量化(Aware Quantization)
│ ├── AWQ(Activation-Aware)
│ ├── GPTQ(Greedy Post-Training)
│ └── QoQ(Quantization-out-of-Context)
└── 量化感知训练(QAT)
├── QAT-F(全量化训练)
└── LoRA-QAT(低秩量化)
按量化粒度分类
| 粒度 | 说明 | 精度损失 | 加速效果 |
|---|---|---|---|
| 逐层 | 每层一个缩放因子 | 低 | 中 |
| 逐通道 | 每个通道一个缩放因子 | 低 | 高 |
| 逐组 | 每组(如128个)一个缩放因子 | 中 | 最高 |
| 逐元素 | 每个权重一个缩放因子 | 高 | 有限 |
主流量化方案深度对比
AWQ(Activation-Aware Weight Quantization)
核心思想: 保护对激活值敏感的权重,对这些权重进行更精细的量化。
原理:
- 在验证集上计算每个权重的"重要性分数"
- 高重要性权重保持高精度
- 低重要性权重进行INT4量化
效果:
- Llama-2-70B INT4:Perplexity 增加 < 0.5
- 推理速度提升 2-3x
- 兼容现有推理引擎
GPTQ(Greedy Post-Training Quantization)
核心思想: 贪心优化每个权重的量化值,最小化输出误差。
原理:
- 逐层处理
- 对每个权重,贪心选择使输出误差最小的量化值
- 使用Hessian矩阵近似二阶信息
效果:
- 精度损失最小
- 量化后需要重新校准
- 量化过程较慢
SmoothQuant
核心思想: 将激活值的量化难度转移到权重上。
原理:
- 激活值通常有更大的动态范围,难以量化
- 在矩阵乘法前,平滑权重和激活的分布
- 使两者都具有可量化的动态范围
效果:
- 支持 INT8 权重 + INT8 激活
- 无需训练,纯后处理
- 与AWQ结合使用效果更佳
LLM.int8()
核心思想: 仅对异常值(outliers)进行逐元素量化,其余使用INT8。
原理:
- 检测激活值中的异常值(通常 < 0.1%)
- 异常值保持FP16
- 其余激活值量化为INT8
效果:
- 实现简单
- 精度损失小
- 内存节省有限(仅约30%)
2026年量化技术进展
1. FP8 量化
FP8(8位浮点)成为新的热点:
- 比INT4精度更高
- 比FP16内存占用更小
- NVIDIA Hopper架构原生支持
2. 混合精度量化
不同层使用不同量化精度:
- 前几层:INT8(保留关键信息)
- 中间层:INT6/INT5
- 后几层:INT4(对输出影响较小)
3. 动态量化
推理时根据输入动态调整量化策略:
- 简单输入:低精度(INT4)
- 复杂输入:高精度(INT8)
精度-效率权衡
实测数据对比(Llama-3-70B)
| 量化方案 | 内存(GB) | 吞吐量(tokens/s) | MMLU得分 | 相对损失 |
|---|---|---|---|---|
| FP16基准 | 140 | 85 | 68.5 | - |
| INT8 | 70 | 140 | 67.8 | -0.7 |
| INT4 (AWQ) | 35 | 220 | 66.2 | -2.3 |
| INT4 (GPTQ) | 35 | 215 | 66.8 | -1.7 |
| FP8 | 70 | 180 | 67.5 | -1.0 |
| INT2 | 17.5 | 350 | 62.0 | -6.5 |
选型指南
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 精度优先 | INT8 / FP8 | 精度损失最小 |
| 性能优先 | INT4 AWQ | 精度-效率最佳平衡 |
| 极致压缩 | INT2 | 内存占用最低 |
| 快速部署 | LLM.int8() | 实现最简单 |
工程实践
量化流程
# 使用 AutoGPTQ 量化模型
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
quantize_config = BaseQuantizeConfig(
bits=4,
group_size=128,
damp_percent=0.01,
)
model = AutoGPTQForCausalLM.from_pretrained(
"meta-llama/Llama-3-70B",
quantize_config=quantize_config,
)
model.quantize(dataset)
model.save_quantized("./llama3-70b-int4")
量化注意事项
- 校准数据质量:校准数据应代表真实分布
- 逐层分析:不同层对量化的敏感度不同
- 下游验证:量化后必须在目标任务上验证
- 推理引擎兼容:确保推理引擎支持所选量化格式
结语
量化是大模型"平民化"的关键技术。2026年,INT4量化已经足够成熟用于生产环境,FP8正在成为新的标准。对于大多数场景,AWQ INT4提供了最佳的精度-效率平衡。
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。