AWQ量化
基础原理
环境配置
1、pip install autoawq
这里有个问题是目前最新版本不用autoawq, 后续代码使用的是awq
2、下载一个实验小模型,目前awq支持的模型不多,基本就是几个经典的模型,所以这依然
用nano-vllm里面的Qwen3-0.6B这个模型做实验
3、实际测试会遇到AttributeError: ‘Catcher’ object has no attribute ‘attention_type’, 可以把
transformers的版本回退到 transformers==4.51.3,此外还有多卡gpu机器好像有点问题,这
里我是直接export CUDA_VISIBLE_DEVICES=0设置为单卡就可以了,其他显存问题oom可
以参考这里
代码demo
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer# 模型路径(Hugging Face Hub 或本地路径)
model_path = "huggingface/Qwen3-0.6B" # 或 "Qwen/Qwen-7B-Chat" 等
quant_path = "./qwen-awq" # 保存路径# 加载 tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)# 加载模型(仅 CPU 加载,节省显存)
model = AutoAWQForCausalLM.from_pretrained(model_path, trust_remote_code=True)
print(model)# 量化配置
quant_config = {"zero_point": True, # 是否使用零点(推荐 True)"q_group_size": 128, # 分组大小(128 是标准)"w_bit": 4, # 权重比特数"version": "GEMM" # 使用 GEMM 内核(高效)
}# 执行量化(需要 GPU!)
model.quantize(tokenizer,quant_config=quant_config,# 可选:指定校准数据集(默认使用 pile-val-backup的前 128 个样本)# calib_data="c4", # 或 "pile", "wikitext2"n_parallel_calib_samples=1,max_calib_seq_len=1024, # 从数据集中取出的每句话,转为token的时候最大长度不能超过1024max_calib_samples=128 # 从数据集中取出128句话,可以理解为batch_size=128
)# 保存量化模型
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)