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/GGMLCPU优化,多种量化方案小-中中等
bitsandbytesNF4量化,动态反量化中等

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")

显存对比

模型FP16INT8INT4
7B14GB7GB3.5GB
13B26GB13GB6.5GB
70B140GB70GB35GB

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"
)

精度损失评估

量化方法MMLUPerplexity相对FP16
FP16 (基准)46.95.68-
GPTQ-4bit46.55.72-0.9%
AWQ-4bit46.75.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)
----