大语言模型(LLM)的部署通常面临显存占用高、推理延迟大的挑战。模型量化(Quantization)通过将高精度的浮点权重转换为低精度整数,在保持模型性能基本不变的前提下,显著降低显存占用并提升推理速度。常见的量化方案包括 AWQ、AutoGPTQ、bitsandbytes 和 llama.cpp。
1. AWQ (Activation-aware Weight Quantization)
AWQ 是一种激活感知的权重量化方法,它通过识别对输出影响较大的通道来保护重要权重,从而在低比特下保持更高的精度。
安装依赖
pip install autoawq
量化代码示例
def quantize_awq():
model_path = "/home/chuan/models/qwen/Qwen1___5-7B-Chat"
quant_path = "/home/chuan/models/qwen/Qwen1___5-7B-Chat-awq"
# 配置参数:w_bit=4 表示 4 位量化,group_size=128 为组大小
quant_config = {"zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM"}
# 加载模型
from autoawq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model = AutoAWQForCausalLM.from_pretrained(model_path, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
# 执行量化
model.quantize(tokenizer, quant_config=quant_config)
print(quant_config)
# 保存量化配置
from awq.models.utils import AwqConfig
quantization_config = AwqConfig(
bits=quant_config["w_bit"],
group_size=quant_config["q_group_size"],
zero_point=quant_config["zero_point"],
version=quant_config["version"].lower(),
).to_dict()
model.model.config.quantization_config = quantization_config
# 保存量化后的模型权重
model.save_quantized(quant_path, safetensors=)
tokenizer.save_pretrained(quant_path)


