基础原理

环境配置

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的时候最大长度不能超过1024
    max_calib_samples=128 # 从数据集中取出128句话,可以理解为batch_size=128
)

# 保存量化模型
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐