ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何评测量化大模型:基于lm-evaluation-harness复现Qwen3.6-35B-A3B-w8a8-llmcompressor的GSM8K 100%精度恢复

如何评测量化大模型:基于lm-evaluation-harness复现Qwen3.6-35B-A3B-w8a8-llmcompressor的GSM8K 100%精度恢复

【免费下载链接】Qwen3.6-35B-A3B-w8a8-llmcompressor

项目地址:https://ai.gitcode.com/hf_mirrors/amd/Qwen3.6-35B-A3B-w8a8-llmcompressor
点击查看免费下载

📌 评测量化大模型,精度恢复率才是硬指标

本文将带你量化大模型评测的完整流程:以 AMD 发布的量化模型 Qwen3.6-35B-A3B-w8a8-llmcompressor 为例,使用 lm-evaluation-harness 复现其 GSM8K 基准测试 100% 精度恢复(0.9629)。该模型采用 W8A8 量化(8-bit 权重 + 8-bit 动态激活),权重体积从 67.0 GiB 压缩到 35.1 GiB(约 48% 缩减),并专用于 AMD EPYC CPU 推理。

一句话概括:量化模型好不好,不看宣传,跑一遍基准评测就有答案。

一、为什么量化模型必须做精度评测?

量化(Quantization)把模型权重从 BF16 高精度浮点压缩为 INT8 整数,换取:

  • 📦体积减半:67.0 GiB → 35.1 GiB,磁盘占用降低约 48%
  • ⚡更快的 CPU 推理:本模型基于 ZenDNN 优化,专为 AMD EPYC CPU 推理设计
  • ⚠️可能的精度损失:压缩必然伴随信息损失,必须量化验证

新手提示:精度损失不是"有没有"的问题,而是"有多少"的问题。行业常用精度恢复率(Recovery)来衡量:量化模型得分 ÷ 原始 BF16 模型得分。本模型 GSM8K 恢复率高达100%,说明量化几乎没有损伤数学推理能力。

二、读懂量化方案:W8A8 到底量化了哪些层?

在评测前,先看懂 recipe.yaml 中的量化配方,你才能真正理解评测结果的可信度:

default_stage: default_modifiers: QuantizationModifier: targets: [Linear] scheme: W8A8 ignore: ['re:.*lm_head', 're:visual.*', 're:model.visual.*', 're:.*mlp.gate$', 're:.*embed_tokens$', 're:.*shared_expert_gate$', 're:.*linear_attn.*']

关键信息拆解:

配置项含义新手理解
scheme: W8A8权重 8-bit、激活 8-bit权重和运行时输入都压缩为 INT8
targets: [Linear]只量化线性层模型中计算最密集的模块
ignore列表排除敏感层关键"神经"不做压缩,保精度

从 config.json 可以看到完整的量化配置:

  • 权重:INT8、对称量化、per-channel(静态校准)
  • 激活:INT8、对称量化、per-token(动态量化)
  • 保留 BF16 的敏感层:MoE 路由器(mlp.gate)、shared_expert_gate、线性注意力模块(linear_attn)、视觉塔(model.visual)、输出层(lm_head)

💡这就是 GSM8K 能拿 100% 恢复的关键:MoE 路由器决定"哪个专家专家处理你的问题",一旦被量化损伤,推理能力会显著下滑——所以评测量化大模型时,看 ignore 列表能直接判断精度风险。

三、评测环境准备

评测依赖 README.md 中声明的严格版本组合(版本锁定是该模型的重要限制):

torch==2.11.0 zentorch==2.11.0.3 vllm==0.26.0 llmcompressor==0.12.0

另外注意两点:

  1. OpenMP 配置:启动前需设置LD_PRELOAD指向libomp.so(LLVM OpenMP)或libiomp5.so(Intel OpenMP),这是 CPU 推理性能的关键;
  2. CPU 专用:该模型面向 AMD EPYC CPU 推理,不适合 GPU 场景。

四、一键复现:lm-evaluation-harness 评测命令

这是整篇文章最实用的一步——直接复用官方评测命令即可复现结果:

lm_eval \ --model vllm \ --model_args pretrained=amd/Qwen3.6-35B-A3B-w8a8-llmcompressor-v0.12.0,tokenizer=Qwen/Qwen3.6-35B-A3B,dtype=bfloat16,max_model_len=4096,language_model_only=True,enable_thinking=False \ --tasks gsm8k \ --batch_size auto \ --trust_remote_code \ --num_fewshot 5 \ --apply_chat_template \ --log_samples \ --gen_kwargs "max_gen_toks=2048" \ --output_path .

参数逐个解读(都是高频长尾知识点):

参数作用新手提示
--model vllm用 vLLM 引擎做批量评测比 transformers 引擎快得多
--tasks gsm8k运行 GSM8K 数学推理基准小学级数学应用题,考察多步推理
--num_fewshot 55-shot 评测必须在提示中放 5 个示例,与基线保持一致
--apply_chat_template使用聊天模板格式化输入见 chat_template.jinja,量化模型评测必须加
--gen_kwargs "max_gen_toks=2048"每题最多生成 2048 token数学题需要完整推理链,给足生成空间
--log_samples保存每条样本的输入输出结果异常时用于逐题排查
--output_path .结果输出目录评测结果写入当前目录

⚠️ 评测量化大模型的黄金法则:量化模型与 BF16 基线的评测参数必须完全一致,任何一处不一致(fewshot 数、chat template、生成上限)都会污染对比结论。

五、结果解读:GSM8K 100% 精度恢复意味着什么?

官方评测结果(来自 README.md):

基准测试BF16 基线W8A8 量化模型精度恢复率
GSM8K(5-shot)0.96290.9629100%

如何正确理解这个数字:

  1. 恢复率 100% 是"相对无损":量化模型与原始模型在 1319 道 GSM8K 测试题上表现完全一致,说明 W8A8 量化对该模型的数学推理能力无损;
  2. 0.9629 不是"满分":原始 BF16 模型本身也只做到 96.29%,剩余误差来自模型本身能力边界,而非量化损失;
  3. GSM8K 是推理能力探针:数学应用题需要链式推理,对 MoE 专家路由精度最敏感——它能拿满恢复率,侧面验证了"路由器保留 BF16"这一设计决策的成功。

🎯给新手的结论:评测量化大模型看三件事——恢复率(本模型 100%)、绝对分数是否与官方一致、评测参数是否与基线严格对齐。三者都满足,结果才可信。

六、常见问题(FAQ)

Q1:量化后精度掉了怎么办?先检查ignore列表是否覆盖了路由器、lm_head等敏感层(参考本项目的 recipe.yaml),再确认评测时是否使用了--apply_chat_template等与基线一致的参数。

Q2:为什么必须锁定版本?模型依赖 ZenDNN v6.1.0 / ZenTorch v2.11.0.3 / PyTorch v2.11.0,版本不匹配可能导致加载失败或数值行为不一致,评测结果将不可复现。

Q3:GSM8K 之外还能测什么?lm-evaluation-harness 支持数百种任务(MMLU、HellaSwag、HumanEval 等),只需替换--tasks参数即可扩展评测面。


更多模型细节(推理示例、完整依赖栈)见 README.md,许可证信息见 LICENSE。掌握"读配方 → 配环境 → 跑命令 → 对结果"这套流程后,你就能独立评测任何量化大模型了。

【免费下载链接】Qwen3.6-35B-A3B-w8a8-llmcompressor

项目地址:https://ai.gitcode.com/hf_mirrors/amd/Qwen3.6-35B-A3B-w8a8-llmcompressor
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进