量化
Quantization
量化(Quantization)是将模型权重和激活值从高精度浮点(如 FP16)转换为低精度整数(如 INT8/INT4)的技术,可显著降低显存占用和推理延迟。
详细解释
量化(Quantization)是大模型「用更少资源跑更大模型」的关键技术。深度学习参数默认用 FP32(32 位浮点)或 FP16(16 位浮点)存储,量化的核心思想是把它们压成 INT8(8 位整数)甚至 INT4(4 位整数)。
精度对比
| 精度 | 单参数字节 | 7B 模型体积 | 相对 FP16 的体积 |
|---|---|---|---|
| FP32 | 4 字节 | 28 GB | 2.0x |
| FP16 | 2 字节 | 14 GB | 1.0x(基准) |
| BF16 | 2 字节 | 14 GB | 1.0x |
| INT8 | 1 字节 | 7 GB | 0.5x |
| INT4 | 0.5 字节 | 3.5 GB | 0.25x |
| INT2 | 0.25 字节 | 1.75 GB | 0.125x(实验性) |
主流量化方法
| 方法 | 精度 | 速度 | 质量损失 | 代表实现 |
|---|---|---|---|---|
| PTQ(训练后量化) | INT8/INT4 | 极快 | < 1% | GPTQ, AWQ |
| QAT(量化感知训练) | INT4 | 慢 | < 0.3% | BitsAndBytes |
| GGUF | INT4/INT5/INT8 | 快 | < 1.5% | llama.cpp |
| AWQ | INT4 | 快 | < 1% | MIT-Han-Lab |
| SmoothQuant | INT8 | 快 | 极小 | 智谱 GLM |
实战:4-bit 量化加载模型
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype="float16",
bnb_4bit_use_double_quant=True
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-7B",
quantization_config=bnb_config,
device_map="auto"
)
# 7B 模型只需 6GB 显存,RTX 3060 也能跑
唯元智创的量化推理
唯元智创生产环境统一采用 AWQ-INT4 量化方案,兼顾:
- 显存占用降低 75%
- 推理速度提升 1.3-1.8 倍
- 质量损失 < 1%(基于内部 5000 题评测集)
常见问题
INT4 量化对模型效果有影响吗?
通常在通用任务上 < 1%,但在数学/代码等高敏感任务可能下降 2-5%。建议先在小流量灰度,对比 INT4 vs FP16 的实际效果。
为什么不用 INT2?
INT2 量化损失通常 > 5%,已超出可接受范围。INT4 是当前「甜点精度」。