INT4量化
4-bit Integer Quantization for LLMs
概述
INT4量化将模型权重从FP16/FP32压缩到4-bit整数,显存占用减少75%, 使得消费级GPU也能运行大模型,是目前最流行的模型压缩技术之一。
核心价值:7B模型从14GB降至3.5GB,可在消费级GPU上运行。
量化原理
权重量化
将FP16权重映射到4-bit整数:
# 量化公式
W_int4 = round(W_fp16 / scale + zero_point)
# 反量化
W_approx = (W_int4 - zero_point) * scale
# 4-bit范围: -8到7 或 0到15
激活值保持高精度
权重量化为INT4,激活值保持FP16,计算时动态反量化。这种W4A16方案在精度和效率间取得平衡。
主要方法
| 方法 | 特点 | 精度损失 | 速度 |
|---|---|---|---|
| GPTQ | 后训练量化,逐层优化 | 小 | 快 |
| AWQ | 激活感知,保护重要权重 | 很小 | 快 |
| GGUF/GGML | CPU优化,多种量化方案 | 小-中 | 中等 |
| bitsandbytes | NF4量化,动态反量化 | 小 | 中等 |
GPTQ量化
GPTQ是目前最流行的后训练量化方法:
# 安装
pip install auto-gptq
# 量化模型
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
quantize_config = BaseQuantizeConfig(
bits=4, # 4-bit量化
group_size=128, # 分组大小
desc_act=True # 激活排序
)
model = AutoGPTQForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
quantize_config
)
# 使用校准数据量化
model.quantize(calibration_data)
# 保存量化模型
model.save_quantized("./llama-2-7b-gptq")AWQ量化
AWQ通过分析激活值识别重要权重:
# 安装
pip install autoawq
# 量化模型
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model = AutoAWQForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
# 量化配置
quant_config = {
"zero_point": True,
"q_group_size": 128,
"w_bit": 4
}
# 量化
model.quantize(
tokenizer,
quant_config=quant_config,
calib_data=calibration_data
)
# 保存
model.save_quantized("./llama-2-7b-awq")显存对比
| 模型 | FP16 | INT8 | INT4 |
|---|---|---|---|
| 7B | 14GB | 7GB | 3.5GB |
| 13B | 26GB | 13GB | 6.5GB |
| 70B | 140GB | 70GB | 35GB |
INT4量化使70B模型可在2×A100-40GB或4×RTX 4090上运行。
推理使用
# 加载GPTQ量化模型
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"./llama-2-7b-gptq",
device_map="auto"
)
# 加载AWQ量化模型
from awq import AutoAWQForCausalLM
model = AutoAWQForCausalLM.from_quantized(
"./llama-2-7b-awq",
device_map="auto"
)
# vLLM加载量化模型
from vllm import LLM
llm = LLM(
model="./llama-2-7b-awq",
quantization="awq"
)精度损失评估
| 量化方法 | MMLU | Perplexity | 相对FP16 |
|---|---|---|---|
| FP16 (基准) | 46.9 | 5.68 | - |
| GPTQ-4bit | 46.5 | 5.72 | -0.9% |
| AWQ-4bit | 46.7 | 5.70 | -0.4% |
LLaMA-13B在MMLU上的表现,INT4量化精度损失很小。
最佳实践
- 优先选择AWQ或GPTQ进行INT4量化
- 使用vLLM或TGI获得最佳推理性能
- group_size通常设为128
- 量化后验证模型在目标任务上的表现
- CPU推理场景使用GGUF格式
参考资料
- GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers (Frantar et al., 2023)
- AWQ: Activation-aware Weight Quantization (Lin et al., 2023)
- QLoRA: Efficient Finetuning of Quantized LLMs (Dettmers et al., 2023)
----