大模型量化实战:GPTQ vs AWQ vs INT4 完整指南
AI Infra量化GPTQAWQINT4
大模型太大,显存不够?推理太慢?量化技术了解一下。
本文将深度解析主流量化方案:GPTQ、AWQ 和 INT4,帮你做出正确的技术选择。
什么是模型量化?
量化(Quantization)是将高精度浮点数(如 FP32、FP16)转换为低精度整数(如 INT8、INT4)的技术:
FP32: 3.1415926535 → 约等于 → INT4: 10 (值域: 0-15)
收益:
- 显存占用减少 50-75%
- 推理速度提升 2-4 倍
- 部署成本大幅降低
三大量化方案对比
| 方案 | 量化精度 | 压缩率 | 精度损失 | 速度 | 推荐场景 |
|---|---|---|---|---|---|
| GPTQ | INT4/INT3 | 4x | <2% | 快 | 通用场景 |
| AWQ | INT4 | 4x | <1% | 最快 | 注重精度 |
| FP8 | FP8 | 2x | 极小 | 最快 | H100+ |
1. GPTQ (Generative Pre-trained Transformer Quantization)
核心原理
GPTQ 基于**二阶信息(Hessian 矩阵)**进行逐层量化,最小化重建误差:
# GPTQ 量化示例
from transformers import AutoModelForCausalLM, AutoTokenizer
import auto_gptq
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
model_basename="*.safetensors",
device="cuda:0",
use_safetensors=True,
)
# INT4 量化
model.quantize(
bits=4,
group_size=128, # 每 128 个参数为一组
desc_act=False,
)
优缺点
| 优点 | 缺点 |
|---|---|
| 精度较好 | 量化速度慢(需要计算 Hessian) |
| 生态成熟 | 可能过拟合校准集 |
| 支持多种模型 | 批次推理时可能有精度波动 |
2. AWQ (Activation-aware Weight Quantization)
核心原理
AWQ 认为重要的权重不应该被量化。通过分析激活值分布,找出”显著权重”并保护它们:
传统量化:所有权重一视同仁
AWQ:显著权重用更高精度,非显著权重用 INT4
# AWQ 量化示例
from awq import AutoAWQForCausalLM
model = AutoAWQForCausalLM.from_quantized(
"meta-llama/Llama-2-7b-awq",
w_bit=4,
group_size=128,
)
优缺点
| 优点 | 缺点 |
|---|---|
| 精度更好(尤其 INT4) | 不支持所有模型 |
| 量化速度快 | 校准集选择很重要 |
| 对激活异常值鲁棒 | 文档相对较少 |
3. INT4 实战部署
显存对比
| 模型 | FP16 | INT4 | 减少 |
|---|---|---|---|
| LLaMA-2-7B | 14GB | 3.5GB | 75% |
| LLaMA-2-13B | 26GB | 7GB | 73% |
| Qwen-2-14B | 28GB | 8GB | 71% |
使用 llama.cpp 部署
# 转换 GGUF 格式
python llama.cpp/convert.py models/llama-2-7b-hf --outfile models/llama-2-7b-q4.gguf
# 量化
./llama.cpp/quantize models/llama-2-7b-q4.gguf models/llama-2-7b-q4_K_M.gguf q4_K_M
# 运行
./llama.cpp/main -m models/llama-2-7b-q4_K_M.gguf -n 256
vLLM 部署量化模型
from vllm import LLM
# 使用量化后的模型
llm = LLM(
model="TheBloke/Llama-2-7B-GPTQ",
quantization="gptq",
dtype="float16",
)
量化参数调优
关键参数
| 参数 | 说明 | 推荐值 |
|---|---|---|
bits | 量化位数 | 4 |
group_size | 组大小 | 128 |
desc_act | 是否对激活排序 | False |
sym | 对称/非对称量化 | True |
组大小选择
- group_size=128:精度更高,显存略高
- group_size=64:精度略低,显存更低
- group_size=-1:按通道量化(不推荐)
选型建议
选 GPTQ 当:
- 需要快速部署
- 追求生态成熟度
- 通用场景
选 AWQ 当:
- 注重精度(尤其是 INT4)
- 量化速度要求高
- 模型有激活异常值
选 FP8 当:
- 使用 H100/H200
- 需要最高性能
- 模型支持 FP8
总结
| 场景 | 推荐方案 |
|---|---|
| 入门体验 | GPTQ (TheBloke 预量化模型) |
| 生产部署 | AWQ + vLLM |
| 极致性能 | FP8 + TensorRT-LLM |
| 本地运行 | GGUF + llama.cpp |
量化为大模型落地打开了大门,INT4 让消费级 GPU 也能跑 7B 模型!根据你的场景选择合适的方案吧。
下期预告:TensorRT-LLM 深度优化指南