← 返回知识库
性能#量化#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 不通用)

相关推荐