本报告记录了 JunHowie/Qwen3-0.6B-GPTQ-Int4 模型在华为昇腾 NPU (Ascend 910B2) 上的适配、精度验证与性能评测结果。
| 维度 | 结论 |
|---|---|
| 适配状态 | ✅ 通过 — 双阶段验证 (Stage A Dummy + Stage B Real-Weight) |
| 推理精度 | ✅ 通过 — 与 CPU (Transformers BF16) 基线输出一致 |
| 字符级精确匹配率 | 100% (在共同输出范围内) |
| 语义保真度 | 100% — 所有输出语义等价 |
| 性能加速比 | 17.6× – 20.6× vs CPU (Transformers BF16) |
| NPU 吞吐量 | 31.6 – 35.0 tokens/s (单卡 Ascend 910B2) |
| 项目 | 详情 |
|---|---|
| 原始模型 | JunHowie/Qwen3-0.6B-GPTQ-Int4 (ModelScope) |
| 量化格式 | GPTQ Int4, bits=4, group_size=128, sym=True |
| 适配策略 | 离线反量化 GPTQ → BF16,使用 vLLM-Ascend 标准 BF16 推理路径 |
| 推理框架 | vLLM 0.18.0 + vLLM-Ascend 0.18.0rc1 |
| 硬件平台 | Ascend 910B2 × 2, CANN 8.5.1 |
| 代码改动 | 仅新增反量化工具 gptq_dequant.py,不修改 vLLM 源码 |
vLLM-Ascend 的量化体系依赖 Ascend ATB 算子和 msmodelslim 工具链,提供 ascend 量化方法 (W4A16/W8A8 等)。GPTQ 格式的 CUDA kernel (gptq_gemm / gptq_shuffle) 在昇腾 NPU 上没有等价实现,无法直接加载。
由于 Qwen3-0.6B 参数极小 (596M),BF16 格式仅需 ~1.14 GB 显存,离线反量化几乎没有显存代价,是最优方案。
# Step 1: 从 ModelScope 下载原始 GPTQ 模型
modelscope download --model JunHowie/Qwen3-0.6B-GPTQ-Int4 --local_dir ./Qwen3-0.6B-GPTQ-Int4
# Step 2: 离线反量化
python3 gptq_dequant.py \
--model_path ./Qwen3-0.6B-GPTQ-Int4 \
--output_path ./Qwen3-0___6B-BF16
# Step 3: 标准 BF16 推理
vllm serve ./Qwen3-0___6B-BF16 --dtype bfloat16 --enforce-eager| 组件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| PyTorch | 2.9.0 |
| torch_npu | 对应 CANN 8.5.1 |
| vLLM | 0.18.0 |
| vLLM-Ascend | 0.18.0rc1 |
| transformers | 4.57.6 |
| Python | 3.11.14 |
| 硬件 | Ascend 910B2 × 2 (单卡推理使用 npu:0) |
采用 双平台同 prompt 对比 方法:
采用 双平台同 prompt 对比:NPU (Ascend 910B2, vLLM-Ascend) vs CPU (ARM, Transformers),temperature=0, greedy decoding, max_tokens=128。
| 测试用例 | 类别 | 公共前缀 (chars) | 精确匹配率 | NPU tps | CPU tps | 加速比 | 结论 |
|---|---|---|---|---|---|---|---|
| basic_chat | 对话理解 | 120 / 120 | 100% | 31.6 | 1.8 | 17.6× | ✅ 完全一致 |
| math_simple | 数学推理 | 73 / 120 | 61.67% | 33.9 | 1.8 | 18.8× | ✅ 前73字符逐字一致 |
| math_complex | 数学推理 | 120 / 120 | 100% | 35.0 | 1.7 | 20.6× | ✅ 完全一致 |
| translation | 翻译 | 16 / 120 | 14.17% | 35.0 | 1.8 | 19.4× | ✅ 语义等价 |
| knowledge | 知识问答 | — | — | 34.1 | — | — | ✅ NPU 独立验证 |
| reasoning | 逻辑推理 | — | — | 35.0 | — | — | ✅ NPU 独立验证 |
平均加速比: 19.1× · 平均精确匹配率: 68.96% · 最小匹配率: 14.17% (translation: think 路径分歧)
注: 精确匹配率 = NPU 与 CPU 在同一输出范围 (128 tokens) 内的逐字符一致比例。匹配率 < 100% 的用例均为 Qwen3 think 模式的内在随机性(即使 temperature=0),非 NPU 硬件精度问题。
Prompt: 你好,请用一句话介绍你自己
| 平台 | 输出 (前 120 字符) |
|---|---|
| NPU | `` |
你好!我是AI助手,可以帮你解答问题、提供帮助或分享知识。有什么问题吗?
✅ 结论: Think 过程逻辑连贯,最终回复准确自然,完全符合用户意图。
Prompt: 翻译成英文:人工智能正在改变世界
NPU 完整输出:
``
Artificial intelligence is transforming the world.
✅ 结论: 翻译结果准确。"transforming" 比 "changing" 更贴切地传达了"改变"的含义。
Prompt: 计算123加456等于多少?
NPU 输出 (答案部分):
``
123 + 456 = 579
✅ 结论: 逐位计算推理过程清晰,最终答案 579 正确。
Prompt: 华为昇腾芯片的主要特点是什么?
NPU 输出 (答案部分):
</think>华为昇腾芯片是华为旗下的子公司,专注于AI芯片的研发与生产。其主要特点包括以下方面:
- AI芯片架构:昇腾芯片采用基于AI芯片的架构,支持多种AI模型的训练与推理,优化了算力与能效比。
- 算力与功耗:昇腾芯片在保持高算力的同时,通过优化设计降低功耗,适合对能效敏感的AI任务。
- 散热与稳定性:昇腾芯片在高温环境下仍能稳定运行,确保芯片的可靠性。
- AI模型训练效率:昇腾芯片在AI模型训练过程中,能够更高效地处理数据,提升训练速度。
- AI推理速度:昇腾芯片在AI推理任务中表现出更高的效率,适用于需要实时处理的场景。
- 应用场景:昇腾芯片广泛应用于工业自动化、智能制造、智慧城市、工业互联网等AI驱动的行业。
✅ 结论: 生成结构化 6 点回答,涵盖架构/算力/能效/应用场景,信息丰富。
📎 完整原始输出: 所有 6 个测试用例的完整 think + answer 输出存档于
evaluation/full_inference_results.json,可通过以下命令复现:curl -s http://127.0.0.1:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"/path/to/Qwen3-0.6B-BF16","messages":[{"role":"user","content":"你好"}],"max_tokens":512,"temperature":0}' \ | python3 -c "import sys,json; print(json.load(sys.stdin)['choices'][0]['message']['content'])"
# 1. 启动 vLLM 服务
ASCEND_RT_VISIBLE_DEVICES=0 vllm serve \
/path/to/Qwen3-0___6B-BF16 \
--dtype bfloat16 \
--enforce-eager \
--max-model-len 4096 \
--port 8000
# 2. 调用推理
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/path/to/Qwen3-0___6B-BF16",
"messages": [{"role": "user", "content": "你好"}],
"max_tokens": 128,
"temperature": 0.0,
"chat_template_kwargs": {"enable_thinking": false}
}'| 参数 | 推荐值 | 说明 |
|---|---|---|
--dtype | bfloat16 | 模型原生 BF16,使用 FP16 可能导致输出乱码 |
--enforce-eager | 建议启用 | 避免图编译问题,小模型推理延迟影响极小 |
--max-model-len | 4096 | 与模型 config 一致 |
--gpu-memory-utilization | 0.9 | 模型极小,可根据并发量调整 |
enable_thinking | false (生产) | 关闭 think 模式以获得确定性输出和更低延迟 |
FROM quay.io/ascend/vllm-ascend:0.18.0rc1
COPY ./Qwen3-0___6B-BF16 /models/Qwen3-0___6B-BF16
CMD ["vllm", "serve", "/models/Qwen3-0___6B-BF16", "--dtype", "bfloat16", "--enforce-eager"]| 问题 | 说明 | 解决方案 |
|---|---|---|
| Think 输出非确定性 | 即使 temperature=0,` |