性能#量化#INT8#INT4#QLoRA#GPTQ#AWQ
量化技术:FP16 / INT8 / INT4 / QLoRA 怎么选?
量化能让大模型在消费级 GPU 跑起来,但选错了效果会崩。本文讲清 FP16/INT8/INT4/QLoRA 区别。
盖茨·2026/7/22·25 阅读
量化技术:FP16 / INT8 / INT4 / QLoRA 怎么选
量化是什么?
把 FP16 (16-bit 浮点) 权重转成 INT8 (8-bit 整数) 或 INT4 (4-bit 整数):
- 显存减半(INT8)或 1/4(INT4)
- 推理速度可能更快(INT8 在新卡上)
- 精度损失通常 < 5%
主流方案对比
| 方案 | 位宽 | 显存比例 | 速度 | 精度损失 | 适用场景 |
|---|---|---|---|---|---|
| FP16 | 16 | 100% | 基准 | 0 | 服务器/旗舰卡 |
| BF16 | 16 | 100% | 基准 | 0 | A100/H100 |
| INT8 (GPTQ/AWQ) | 8 | 50% | 快 1.5-2x | < 1% | 通用推理 |
| INT4 (GPTQ/AWQ) | 4 | 25% | 快 2-3x | 1-3% | 显存紧张 |
| QLoRA | 4 | 25% | 仅训练 | < 2% | 微调 |
| GGUF Q4_K_M | 4 | 25% | 快 | 2-3% | Ollama/llama.cpp |
| GGUF Q5_K_M | 5 | 31% | 稍快 | 1-2% | Ollama 平衡 |
怎么选?
推理部署:
- 显存够 → FP16(最稳)
- 显存 50% → INT8 (AWQ > GPTQ)
- 显存 25% → INT4 (Q4_K_M)
- 极致省 → INT3 (Q3_K_M,损失会比较大)
微调训练:
- 显存够 → LoRA (FP16) + bitsandbytes
- 显存紧 → QLoRA (4-bit + LoRA adapter)
实操:以 Qwen2.5-7B 为例
AWQ INT4 量化(推荐生产)
pip install autoawq
python -c "
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model_path = 'Qwen/Qwen2.5-7B-Instruct'
quant_path = 'qwen2.5-7b-awq-int4'
model = AutoAWQForCausalLM.from_pretrained(model_path, safetensors=True)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model.quantize(tokenizer, quant_config={'w_bit': 4, 'q_group_size': 128, 'zero_point': True})
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)
"
Ollama 直接用 Q4_K_M(最简单)
# Ollama 仓库里的 Qwen2.5 默认就是 Q4_K_M
ollama pull qwen2.5:7b # 默认 Q4_K_M
性能损失评估
| 量化 | MMLU | GSM8K | HumanEval |
|---|---|---|---|
| FP16 | 70.3 | 79.1 | 84.8 |
| INT8 (AWQ) | 70.1 | 78.7 | 84.5 |
| INT4 (AWQ) | 69.8 | 77.9 | 83.2 |
| INT4 (GPTQ) | 69.2 | 76.8 | 81.5 |
结论:AWQ INT4 损失最小,Ollama 默认 Q4_K_M 适合生产。
避坑
- ❌ INT3/Q2_K 损失太大,不推荐生产用
- ❌ 量化后重新训练/微调是必须的(用 QLoRA)
- ❌ 不同量化方案不能混用(AWQ 和 GPTQ 不通用)