Qwen 量化模型性能评估实战指南:Qwen2 系列 GPTQ 与 AWQ 的 MMLU/C-Eval/IFEval 基准详解
【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5
本指南围绕 Qwen 官方文档 量化模型效果评估 展开,系统解读 Qwen2 系列在 BF16、GPTQ-Int8、GPTQ-Int4、AWQ 四种精度下的生成性能评估结果,说明三项核心评测指标(MMLU、C-Eval、IFEval)的含义与解码设置,并结合仓库中 GPTQ、AWQ 与 速度基准 文档,讲解量化模型的加载运行、自行量化的完整实操路径。读完本文,你将掌握量化模型性能评估的完整方法论,并能据此为具体场景选择量化方案。
量化模型评估:为什么精度指标与推理效率同等重要
大语言模型量化通过将权重从 16 位浮点(BF16/FP16)压缩到 8 位或 4 位整数,换取显存占用与推理速度的显著改善。但量化不可避免地带来精度损失,因此需要在"压缩收益"与"能力保留"之间做权衡。官方文档专门以独立章节报告量化模型的生成性能(generation performance),其目的正是让开发者拿到量化前后的可量化对比数据,而不是凭感觉决策。
需要注意:本评估数据目前针对Qwen2 系列(0.5B / 1.5B / 7B / 72B),文档顶部明确标注了 "To be updated for Qwen3",即该基准表尚待更新到 Qwen3 系列(Qwen3 系列的相关量化速度与显存数据可参考 速度基准)。因此,本文数据是理解 Qwen 量化方法论的历史基准,而 Qwen3 系列读者应结合最新模型卡与本文方法自行复测。
评估协议:三项指标与贪心解码
文档规定了统一的评估协议,保证不同模型、不同量化方式之间的可比性:
- MMLU (Accuracy):大规模多任务语言理解基准,覆盖 STEM、人文、社科等多个领域的选择题,衡量模型的综合知识面与理解能力。
- C-Eval (Accuracy):中文综合评估基准,涵盖中国语境下的多学科知识,是衡量中文能力的关键指标。
- IFEval (Strict Prompt-Level Accuracy):指令遵循评估,检测模型是否严格遵循用户指令中的各类约束(格式、长度、关键词等),采用严格的提示词级别准确率统计。
解码设置:所有模型统一使用贪心解码(greedy decoding),即每一步选择概率最高的 token,以消除采样随机性对结果的影响,保证量化引入的差异能够被稳定、可复现地观测。
量化精度全览:Qwen2 系列 0.5B 至 72B 实测对比
下表完整呈现官方文档的评估结果。Average 为三项指标的算术平均,数据为百分比(%):
| 模型 | 量化方式 | Average | MMLU | C-Eval | IFEval |
|---|---|---|---|---|---|
| Qwen2-72B-Instruct | BF16 | 81.3 | 82.3 | 83.8 | 77.6 |
| Qwen2-72B-Instruct | GPTQ-Int8 | 80.7 | 81.3 | 83.4 | 77.5 |
| Qwen2-72B-Instruct | GPTQ-Int4 | 81.2 | 80.8 | 83.9 | 78.9 |
| Qwen2-72B-Instruct | AWQ | 80.4 | 80.5 | 83.9 | 76.9 |
| Qwen2-7B-Instruct | BF16 | 66.9 | 70.5 | 77.2 | 53.1 |
| Qwen2-7B-Instruct | GPTQ-Int8 | 66.2 | 69.1 | 76.7 | 52.9 |
| Qwen2-7B-Instruct | GPTQ-Int4 | 64.1 | 67.8 | 75.2 | 49.4 |
| Qwen2-7B-Instruct | AWQ | 64.1 | 67.4 | 73.6 | 51.4 |
| Qwen2-1.5B-Instruct | BF16 | 48.4 | 52.4 | 63.8 | 29.0 |
| Qwen2-1.5B-Instruct | GPTQ-Int8 | 48.1 | 53.0 | 62.5 | 28.8 |
| Qwen2-1.5B-Instruct | GPTQ-Int4 | 45.0 | 50.7 | 57.4 | 27.0 |
| Qwen2-1.5B-Instruct | AWQ | 46.5 | 51.6 | 58.1 | 29.9 |
| Qwen2-0.5B-Instruct | BF16 | 34.4 | 37.9 | 45.2 | 20.0 |
| Qwen2-0.5B-Instruct | GPTQ-Int8 | 32.6 | 35.6 | 43.9 | 18.1 |
| Qwen2-0.5B-Instruct | GPTQ-Int4 | 29.7 | 33.0 | 39.2 | 16.8 |
| Qwen2-0.5B-Instruct | AWQ | 31.1 | 34.4 | 42.1 | 16.7 |
读表要点:如何解读量化损失
从表格中可以提取几条关键规律,帮助你在实际部署中做取舍:
- 规模越大,量化抗性越强:72B 模型在 BF16 平均 81.3 分的基础上,GPTQ-Int4(81.2)与 AWQ(80.4)的绝对下降仅 0.1~0.9 分;而 0.5B 模型从 BF16 的 34.4 分降至 GPTQ-Int4 的 29.7 分,损失约 4.7 分。模型参数量越小,冗余度越低,量化越敏感。
- Int8 几乎无感:各规模下 GPTQ-Int8 相对 BF16 的降幅普遍在 0.5~2 分以内,是"低风险压缩"的首选,尤其适合对精度敏感的场景。
- Int4 存在明显权衡:GPTQ-Int4 与 AWQ 在 7B 及以下模型的 C-Eval 上降幅可达 1~4 分(如 Qwen2-7B AWQ 的 C-Eval 为 73.6,较 BF16 的 77.2 低 3.6 分),但在 72B 上甚至出现个别指标反超(GPTQ-Int4 的 C-Eval 83.9、IFEval 78.9 均高于 BF16),说明大模型的冗余空间足以吸收 Int4 量化误差。
- AWQ 与 GPTQ 互有胜负:两者在 Average 上接近,但分项上各有侧重,例如 1.5B 下 AWQ(46.5)明显优于 GPTQ-Int4(45.0),主要赢在 C-Eval(58.1 vs 57.4)与 IFEval(29.9 vs 27.0)。选择时应结合任务画像:偏中文知识看 C-Eval,偏指令遵循看 IFEval。
量化方法速览:GPTQ 与 AWQ 的底层原理与差异
要正确使用上述量化模型,先要理解两种主流方法的本质区别,二者在 GPTQ 文档 与 AWQ 文档 中有详细说明:
- GPTQ:一种面向 GPT 类 LLM 的 one-shot 权重量化方法,基于近似二阶信息(Hessian 矩阵)逐层(或逐列)调整权重,将量化误差在层内传播补偿,从而以极少的校准数据达到接近训练后量化的精度。
- AWQ(Activation-aware Weight Quantization):一种硬件友好的低比特仅权重量化方法。其核心洞察是:并非所有权重同等重要,基于激活值统计识别"显著权重(salient weights)",并通过按通道缩放来保护这些权重,而非依赖反向传播式的误差补偿。AutoAWQ 官方宣称相较 FP16 可实现约 3 倍加速与 3 倍显存缩减(该数据来自 AWQ 文档对 AutoAWQ 库的描述,实际效果以你的硬件实测为准)。
一句话总结:GPTQ 靠数学补偿保住精度,AWQ 靠激活感知保住关键权重。这也是二者在评估表中表现各有千秋的根源。
加载运行量化模型:transformers 与 vLLM 两条路径
量化模型拿到手后如何跑起来?以 Qwen2.5 官方量化权重为例(评估表基于 Qwen2 系列,而实操仓库文档基于 Qwen2.5 系列,两者同属 Qwen 量化方法论体系),GPTQ 文档 与 AWQ 文档 给出了两种主流方式。
路径一:Hugging Face Transformers 直接加载
transformers已官方支持 AutoGPTQ 与 AutoAWQ 内核,因此加载量化模型与加载普通模型几乎无异:
from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "Qwen/Qwen2.5-7B-Instruct-GPTQ-Int4" # 或 "Qwen/Qwen2.5-7B-Instruct-AWQ" model = AutoModelForCausalLM.from_pretrained( model_name, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained(model_name) prompt = "Give me a short introduction to large language models." messages = [ {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."}, {"role": "user", "content": prompt}, ] text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, ) model_inputs = tokenizer([text], return_tensors="pt").to(model.device) generated_ids = model.generate(**model_inputs, max_new_tokens=512) response = tokenizer.batch_decode(generated_ids[:, model_inputs.input_ids.size(-1):], skip_special_tokens=True)[0]注意事项(来自 GPTQ 文档):
- 使用官方 GPTQ 模型需保证
optimum>=1.20.0及兼容版本的transformers与auto_gptq,可执行pip install -U "optimum>=1.20.0"。 - 若日志提示
CUDA extension not installed.且推理变慢,说明auto_gptq未找到匹配的融合 CUDA 内核、已回退到普通实现,应安装预编译 wheel 或从源码安装。 - AWQ 模型建议搭配
autoawq使用,transformers 同样原生支持。
路径二:vLLM 提供 OpenAI 兼容 API
vLLM 已支持 GPTQ 与 AWQ,且对 GPTQ 会在可行时自动启用更高效的 GPTQ Marlin 内核。启动服务只需一行命令:
# GPTQ 示例 vllm serve Qwen2.5-7B-Instruct-GPTQ-Int4 # AWQ 示例(建议 vllm>=0.6.1,其 AWQ 性能已有明显优化) vllm serve Qwen/Qwen2.5-7B-Instruct-AWQ随后通过 OpenAI 兼容接口调用:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "Qwen2.5-7B-Instruct-GPTQ-Int4", "messages": [ {"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."}, {"role": "user", "content": "Tell me something about large language models."} ], "temperature": 0.7, "top_p": 0.8, "repetition_penalty": 1.05, "max_tokens": 512 }'也可以使用openaiPython SDK 调用(以openai_api_base = "http://localhost:8000/v1"指向本地 vLLM 服务即可)。
自行量化:用校准数据复现评估中的量化模型
评估表中的 GPTQ-Int8/Int4 与 AWQ 权重并非凭空而来——它们由校准数据驱动生成。如果你想对自己的微调模型执行同样的量化流程,两份文档给出了完整步骤。
使用 AutoGPTQ 量化(GPTQ 路径)
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig from transformers import AutoTokenizer model_path = "your_model_path" quant_path = "your_quantized_model_path" quantize_config = BaseQuantizeConfig( bits=8, # 4 或 8,对应评估表中的 GPTQ-Int4 / GPTQ-Int8 group_size=128, damp_percent=0.01, desc_act=False, # 设为 False 可显著提速,但困惑度可能略有上升 static_groups=False, sym=True, true_sequential=True, model_name_or_path=None, model_file_base_name="model", ) max_len = 8192 tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoGPTQForCausalLM.from_pretrained(model_path, quantize_config)校准数据准备:将对话按 ChatML 模板格式化后分词,构造input_ids与attention_mask列表:
import torch data = [] for msg in dataset: text = tokenizer.apply_chat_template(msg, tokenize=False, add_generation_prompt=False) model_inputs = tokenizer([text]) input_ids = torch.tensor(model_inputs.input_ids[:max_len], dtype=torch.int) data.append(dict(input_ids=input_ids, attention_mask=input_ids.ne(tokenizer.pad_token_id)))随后执行量化并保存:
model.quantize(data, cache_examples_on_gpu=False) model.save_quantized(quant_path, use_safetensors=True) tokenizer.save_pretrained(quant_path)使用 AutoAWQ 量化(AWQ 路径)
pip install "autoawq<0.2.7"from awq import AutoAWQForCausalLM from transformers import AutoTokenizer model_path = "your_model_path" quant_path = "your_quantized_model_path" quant_config = {"zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM"} tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoAWQForCausalLM.from_pretrained(model_path, device_map="auto", safetensors=True) # 校准数据:对话消息格式化后的纯文本列表 data = [] for msg in dataset: text = tokenizer.apply_chat_template(msg, tokenize=False, add_generation_prompt=False) data.append(text.strip()) model.quantize(tokenizer, quant_config=quant_config, calib_data=data) model.save_quantized(quant_path, safetensors=True, shard_size="4GB") tokenizer.save_pretrained(quant_path)实操提示:校准数据的领域分布直接决定量化质量。文档建议直接使用微调数据(如 Alpaca 格式)进行校准,让量化过程"看到"目标域的真实输入分布,这是降低 MMLU/C-Eval/IFEval 等指标掉点的最有效手段。
延伸:量化后的速度与显存实测(Qwen3 系列)
精度只是量化决策的一面,另一面是速度与显存。速度基准 报告了 Qwen3 系列在 BF16、FP8、AWQ-INT4、GPTQ-Int8/Int4 下的推理速度与显存占用,可视为本评估表的"效率侧"补充。要点包括:
- 评估环境:Transformers 侧使用 NVIDIA H20 96GB,PyTorch 2.6.0、Flash Attention 2.7.4、Transformers 4.51.3;SGLang 侧为 SGLang 0.4.6.post1。
- 速度定义:
Speed = (tokens_prompt + tokens_generation) / time,batch size 为 1,使用尽可能少的 GPU。 - 测试覆盖:生成 2048 tokens,输入长度覆盖 1、6144、14336、30720、63488、129024 tokens。
- 代表性结论(以 Qwen3-8B Transformers 为例):输入长度 1 时,BF16 显存约 15.9 GB、FP8 约 9.3 GB、AWQ-INT4 约 6.2 GB;输入长度 30720 时 AWQ-INT4 速度可达约 438 tokens/s,显著高于 BF16 的约 209 tokens/s。可见 INT4 量化在长上下文场景下的显存与吞吐收益非常可观。
- 注意限制:文档明确提示 Transformers 的 FP8 速度"目前非最优,待优化";SGLang 的 GPTQ-Int4 性能也待改进;MoE 模型(如 Qwen3-30B-A3B)在 Transformers 下 GPTQ-Int4 标注为"MoE Kernel Unsupported"——这些都是选型时必须知晓的边界条件。
量化选型决策清单
综合精度基准与实操文档,给出如下决策参考(基于仓库文档数据,实际以你的硬件与任务复测为准):
- 显存紧张、追求极致吞吐:优先 AWQ-Int4(或 GPTQ-Int4),7B 级模型可将显存压到 6~8 GB 量级;若任务对中文知识(C-Eval)敏感,注意 7B 及以下 AWQ/GPTQ-Int4 约 2~4 分的掉点是否可接受。
- 精度敏感、希望低风险:选 GPTQ-Int8,各规模下平均掉点普遍小于 2 分。
- 超大模型(72B 级):量化代价极小甚至分项反超,INT4 方案几乎是无损省显存。
- 小模型(0.5B/1.5B 级):量化损失相对明显,若任务精度优先,建议保留 BF16 或仅用 Int8。
- 效率验证闭环:选型后参考 速度基准 的协议(固定 batch size、输入长度序列、统一解码参数)自测,确保"精度 + 速度 + 显存"三者同时满足需求。
小结
量化模型性能评估是"精度-效率"权衡决策的基石。本文完整继承了官方 量化模型效果评估 中的 Qwen2 系列四项指标实测数据,阐释了 MMLU、C-Eval、IFEval 与贪心解码的评估协议,并结合 GPTQ 文档 与 AWQ 文档 给出了量化模型加载与自行量化的完整实操路径。同时提醒读者:本基准面向 Qwen2 系列,Qwen3 系列的速度与显存数据请查阅 速度基准,精度数据请以最新模型卡为准。掌握这套方法论后,你便能为自己的部署场景做出数据驱动的量化决策。
【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考