news 2026/10/5 2:21:13

vLLM Ascend 评测实战:用 AISBench 完成昇腾 NPU 上的模型精度与性能评估

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vLLM Ascend 评测实战:用 AISBench 完成昇腾 NPU 上的模型精度与性能评估
  • 人工智能
  • 大模型
  • 模型推理服务
  • Ascend
  • CANN

【免费下载链接】vllm-ascend

Community maintained hardware plugin for vLLM on Huawei Ascend

项目地址:https://gitcode.com/gh_mirrors/vl/vllm-ascend
点击查看免费下载

本文以 vLLM Ascend(vllm-ascend)开源仓库的官方评测指南为主线,讲解如何在昇腾 NPU 上以"在线服务"方式启动 vLLM Server,并通过 AISBench 工具对 C-Eval、MMLU、GPQA、MATH-500、LiveCodeBench、AIME 2024、GSM8K 等主流数据集执行精度(accuracy)与性能(performance)评估。读完本文,你将掌握从环境准备、数据集下载、评测配置到结果解读与常见故障排查的完整链路,并能结合仓库中的 tools/aisbench.py 封装理解评测的自动化与阈值校验机制。

1. 认识 AISBench 与 vllm-ascend 的评测方案

AISBench 是面向昇腾 AI 硬件生态的基准评测框架,同时提供精度评估(accuracy)与性能评估(performance)能力,覆盖数学、知识问答、代码生成、多模态理解等多种评测场景。vllm-ascend 官方文档将其作为推荐评测工具之一,与 lm-eval、EvalScope 等方案并列(可对比阅读 using_lm_eval.md 与 using_evalscope.md)。

在仓库的 tools/aisbench.py 中,AisbenchRunner类将 AISBench 进一步封装为三类可自动化、可验证的任务(对应aisbench_config["case_type"]):

  • accuracy:跑通数据集推理并计算准确率,默认用baseline ± threshold(阈值默认 1)区间校验结果是否达标(见_accuracy_verify);
  • performance:统计输出吞吐、输入吞吐、TPOT 等指标,默认校验Output Token Throughput >= 0.97 * baseline(见_performance_verify),并支持可选的input_throughput_threshold与tpot_threshold额外约束;
  • spec_decode:基于指标服务测量投机解码(speculative decoding)的接受率(见_spec_decode_verify)。

这意味着本文讲解的手工流程同样可以被 CI/e2e 测试复用,例如 tests/e2e/cases/features/kv_pool/test_qwen3_30b_acc.py 就通过run_aisbench_cases(model, port, aisbench_cases)批量跑精度用例。下面从最基础的手工流程讲起。

2. 前置准备:在单卡昇腾 NPU 上启动 vLLM 在线服务

2.1 启动 Docker 容器

vllm-ascend 官方镜像已经内置 vLLM Ascend 运行环境。执行以下命令启动容器(需按实际环境修改DEVICE与IMAGE):

# Update DEVICE according to your device (/dev/davinci[0-7]) export DEVICE=/dev/davinci7 # Update the vllm-ascend image export IMAGE=quay.io/ascend/vllm-ascend:{{ vllm_ascend_version }} docker run --rm \ --name vllm-ascend \ --shm-size=1g \ --device $DEVICE \ --device /dev/davinci_manager \ --device /dev/devmm_svm \ --device /dev/hisi_hdc \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \ -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /root/.cache:/root/.cache \ -p 8000:8000 \ -e VLLM_USE_MODELSCOPE=True \ -e PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256 \ -it $IMAGE \ /bin/bash

各挂载与环境变量的作用说明:

  • --device系列:将 NPU 设备(/dev/davinci[0-7])以及驱动管理节点(davinci_manager、devmm_svm、hisi_hdc)透传进容器;
  • /usr/local/dcmi、npu-smi、Ascend 驱动 lib64 与version.info、/etc/ascend_install.info:供容器内感知驱动与设备信息;
  • /root/.cache:复用宿主机模型与数据集缓存;
  • -p 8000:8000:暴露 vLLM OpenAI 兼容服务端口;
  • VLLM_USE_MODELSCOPE=True:让 vLLM 从 ModelScope 下载模型,便于国内网络环境;
  • PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256:调整 NPU 侧 PyTorch 内存分配粒度,缓解大模型场景下的碎片化。

2.2 在容器内启动 vLLM Server

vllm serve Qwen/Qwen2.5-0.5B-Instruct --max-model-len 35000 &

注意:--max-model-len应设置为大于35000,这一长度对绝大多数评测数据集都足够,否则可能影响精度评估结果。

服务启动成功后,日志应包含:

INFO: Started server process [9446] INFO: Waiting for application startup. INFO: Application startup complete.

此时http://localhost:8000即对外提供 OpenAI 兼容的/v1接口,供 AISBench 以service模式接入。

3. 安装 AISBench

在容器内从源码安装 AISBench:

git clone https://github.com/AISBench/benchmark.git cd benchmark/ pip3 install -e ./ --use-pep517

再安装评测所需的扩展依赖:

pip3 install -r requirements/api.txt pip3 install -r requirements/extra.txt

安装完成后,运行ais_bench -h确认 CLI 可用。

4. 下载评测数据集

AISBench 仓库按ais_bench/benchmark/configs/datasets目录组织各数据集的评测配置,每个数据集附带README.md说明下载与安装方式。下面给出官方文档示例中的常用数据集下载命令(均需在ais_bench/datasets目录下执行)。

4.1 C-Eval

cd ais_bench/datasets mkdir ceval/ mkdir ceval/formal_ceval cd ceval/formal_ceval wget https://www.modelscope.cn/datasets/opencompass/ceval-exam/resolve/master/ceval-exam.zip unzip ceval-exam.zip rm ceval-exam.zip

4.2 MMLU

cd ais_bench/datasets wget https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/mmlu.zip unzip mmlu.zip rm mmlu.zip

4.3 GPQA

cd ais_bench/datasets wget https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/gpqa.zip unzip gpqa.zip rm gpqa.zip

4.4 MATH

cd ais_bench/datasets wget https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/math.zip unzip math.zip rm math.zip

4.5 LiveCodeBench

cd ais_bench/datasets # If HuggingFace is slow or unreachable, set HF_ENDPOINT to a mirror: # export HF_ENDPOINT=https://hf-mirror.com huggingface-cli download livecodebench/code_generation_lite --repo-type dataset --local-dir code_generation_lite

4.6 AIME 2024

cd ais_bench/datasets mkdir aime/ cd aime/ wget https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/aime.zip unzip aime.zip rm aime.zip

4.7 GSM8K

cd ais_bench/datasets wget https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/gsm8k.zip unzip gsm8k.zip rm gsm8k.zip

提示:仓库 tools/aisbench.py 中的DATASET_RENAME映射(如aime2024 -> aime、gsm8k-lite -> gsm8k、textvqa-lite -> textvqa)说明自动化流程在复制数据集时会统一目录名,手工操作时建议按同样命名放置,避免配置与目录对不上。

5. 配置模型评测参数

精度与性能评测共用一个模型配置文件:ais_bench/benchmark/configs/models/vllm_api/vllm_api_general_chat.py。需要根据环境修改以下字段:

字段含义说明
attr推理后端类型标识固定为service(基于服务的推理)或local(本地加载模型)
type后端 API 类型用于选择不同的后端 API 实现,示例使用VLLMCustomAPIChat
abbr本地任务唯一标识用于区分多个评测任务
path模型权重路径本地模型权重路径
modelvLLM 中的模型名需与vllm serve启动时的模型名一致
host_ip/host_portvLLM 服务地址与端口默认localhost:8000
max_out_len最大生成长度注意max_out_len+ 输入长度必须小于 vLLM Server 的max_model_len;32768对大多数数据集足够
batch_size批大小按数据集规模调整
temperature采样温度按评测要求设置推理参数

官方示例配置如下:

from ais_bench.benchmark.models import VLLMCustomAPIChat from ais_bench.benchmark.utils.model_postprocessors import extract_non_reasoning_content models = [ dict( attr="service", type=VLLMCustomAPIChat, abbr='vllm-api-general-chat', path="xxxx", model="xxxx", request_rate = 0, retry = 2, host_ip = "localhost", host_port = 8000, max_out_len = xxx, batch_size = xxx, trust_remote_code=False, generation_kwargs = dict( temperature = 0.6, top_k = 10, top_p = 0.95, seed = None, repetition_penalty = 1.03, ), pred_postprocessor=dict(type=extract_non_reasoning_content) ) ]

关键点解读:

  • extract_non_reasoning_content作为后处理器,会从模型输出中剥离思维链/推理过程,只保留最终答案文本,确保评测打分器拿到的结果是干净的作答内容;
  • request_rate = 0表示按需发送(而非压测模式下的固定速率),retry = 2允许失败重试。

从源码看,自动化封装正是围绕该模板做"定制化生成":AisbenchRunner._init_request_conf读取vllm_api_general_chat.py,用正则替换model、host_port、host_ip、max_out_len、batch_size、trust_remote_code等字段,并支持注入top_k、top_p、seed、min_p、presence_penalty、repetition_penalty、thinking(即chat_template_kwargs={"thinking": True})与reasoning_effort等推理参数,最终写出vllm_api_general_chat_custom.py(tools/aisbench.py)。对应地,性能模式会强制temperature=0、ignore_eos=True,精度/投机解码模式默认temperature=0.6。单元测试 tests/ut/tools/test_aisbench.py 验证了reasoning_effort与thinking字段能够被正确注入生成文件,手工流程可参考此逻辑保证配置一致性。

6. 执行精度评估

运行以下命令分别执行各数据集的精度评估:

# run C-Eval dataset ais_bench --models vllm_api_general_chat --datasets ceval_gen_0_shot_cot_chat_prompt.py --mode all --dump-eval-details --merge-ds # run MMLU dataset ais_bench --models vllm_api_general_chat --datasets mmlu_gen_0_shot_cot_chat_prompt.py --mode all --dump-eval-details --merge-ds # run GPQA dataset ais_bench --models vllm_api_general_chat --datasets gpqa_gen_0_shot_str.py --mode all --dump-eval-details --merge-ds # run MATH-500 dataset ais_bench --models vllm_api_general_chat --datasets math500_gen_0_shot_cot_chat_prompt.py --mode all --dump-eval-details --merge-ds # run LiveCodeBench dataset ais_bench --models vllm_api_general_chat --datasets livecodebench_code_generate_lite_gen_0_shot_chat.py --mode all --dump-eval-details --merge-ds # run AIME 2024 dataset ais_bench --models vllm_api_general_chat --datasets aime2024_gen_0_shot_chat_prompt.py --mode all --dump-eval-details --merge-ds # run GSM8K dataset ais_bench --models vllm_api_general_chat --datasets gsm8k_gen_0_shot_cot_chat_prompt.py --mode all --dump-eval-details --merge-ds

命令行参数说明:

  • --models:指定模型配置(对应configs/models/vllm_api下的文件名,不带.py);
  • --datasets:指定数据集配置(对应configs/datasets下的文件名);
  • --mode all:同时执行推理与精度评分;
  • --dump-eval-details:导出逐样本的评测细节;
  • --merge-ds:合并数据集,便于一次汇总结果。

每次执行后,结果保存在带时间戳的目录中,例如outputs/default/20250628_151326:

20250628_151326/ ├── configs # Combined configuration file for model tasks, dataset tasks, and result presentation tasks │ └── 20250628_151326_29317.py ├── logs # Execution logs; if --debug is added to the command, no intermediate logs are saved to disk (all are printed directly to the screen) │ ├── eval │ │ └── vllm-api-general-chat │ │ └── demo_gsm8k.out # Logs of the accuracy evaluation process based on inference results in the predictions/ folder │ └── infer │ └── vllm-api-general-chat │ └── demo_gsm8k.out # Logs of the inference process ├── predictions │ └── vllm-api-general-chat │ └── demo_gsm8k.json # Inference results (all outputs returned by the inference service) ├── results │ └── vllm-api-general-chat │ └── demo_gsm8k.json # Raw scores calculated from the accuracy evaluation └── summary ├── summary_20250628_151326.csv # Final accuracy scores (in table format) ├── summary_20250628_151326.md # Final accuracy scores (in Markdown format) └── summary_20250628_151326.txt # Final accuracy scores (in text format)

目录语义:configs保存本次评测的合并配置(模型任务 + 数据集任务 + 结果展示任务);logs分eval(基于predictions的评分日志)与infer(推理过程日志)两类;predictions是推理服务返回的全部原始输出;results是评分后的原始分数;summary则是 CSV / Markdown / TXT 三种格式的最终汇总表,也是人工阅读结论的首选文件。

在自动化校验场景下,_get_result_accuracy会读取汇总表最后一个单元格作为准确率,并断言其落在[baseline - threshold, baseline + threshold]区间内(tools/aisbench.py),你可以据此在 CI 中设定达标基线。

7. 执行性能评估

性能评估使用--mode perf,并搭配--summarizer default_perf聚合指标。

7.1 纯文本基准

# run C-Eval dataset ais_bench --models vllm_api_general_chat --datasets ceval_gen_0_shot_cot_chat_prompt.py --summarizer default_perf --mode perf # run MMLU dataset ais_bench --models vllm_api_general_chat --datasets mmlu_gen_0_shot_cot_chat_prompt.py --summarizer default_perf --mode perf # run GPQA dataset ais_bench --models vllm_api_general_chat --datasets gpqa_gen_0_shot_str.py --summarizer default_perf --mode perf # run MATH-500 dataset ais_bench --models vllm_api_general_chat --datasets math500_gen_0_shot_cot_chat_prompt.py --summarizer default_perf --mode perf # run LiveCodeBench dataset ais_bench --models vllm_api_general_chat --datasets livecodebench_code_generate_lite_gen_0_shot_chat.py --summarizer default_perf --mode perf # run AIME 2024 dataset ais_bench --models vllm_api_general_chat --datasets aime2024_gen_0_shot_chat_prompt.py --summarizer default_perf --mode perf # run GSM8K dataset ais_bench --models vllm_api_general_chat --datasets gsm8k_gen_0_shot_cot_str_perf.py --summarizer default_perf --mode perf

注意 GSM8K 的性能评测使用单独的gsm8k_gen_0_shot_cot_str_perf.py配置,与精度评测的 prompt 配置不同。

7.2 多模态基准(文本 + 图像)

# run textvqa dataset ais_bench --models vllm_api_stream_chat --datasets textvqa_gen_base64 --summarizer default_perf --mode perf

多模态评测使用vllm_api_stream_chat模型配置(流式对话 API)与textvqa_gen_base64数据集配置(Base64 图像输入)。

性能结果同样输出到带时间戳的目录,例如:

20251031_070226/ |-- configs # Combined configuration file for model tasks, dataset tasks, and result presentation tasks | `-- 20251031_070226_122485.py |-- logs | `-- performances | `-- vllm-api-general-chat | `-- cevaldataset.out # Logs of the performance evaluation process `-- performances `-- vllm-api-general-chat |-- cevaldataset.csv # Final performance results (in table format) |-- cevaldataset.json # Final performance results (in json format) |-- cevaldataset_details.h5 # Final performance results in details |-- cevaldataset_details.json # Final performance results in details |-- cevaldataset_plot.html # Final performance results (in html format) `-- cevaldataset_rps_distribution_plot_with_actual_rps.html # Final performance results (in html format)

其中cevaldataset.csv/cevaldataset.json是最终指标,cevaldataset_details.*是逐请求明细,两个 HTML 文件则提供可视化图表(结果曲线与真实请求速率分布)。核心指标包括 TTFT(首 Token 延迟)、TPOT(每输出 Token 延迟)、输出/输入 Token 吞吐与请求吞吐等;自动化校验时即从 JSON 的Output Token Throughput["total"]与 CSV 的TPOT行读取数据做断言(tools/aisbench.py)。

8. 常见问题排查:TextVQA 图像路径错误

按 AISBench 官方文档下载 TextVQA 数据集时:

cd ais_bench/datasets git lfs install git clone https://huggingface.co/datasets/maoxx241/textvqa_subset mv textvqa_subset/ textvqa/ mkdir textvqa/textvqa_json/ mv textvqa/*.json textvqa/textvqa_json/ mv textvqa/*.jsonl textvqa/textvqa_json/

可能遇到如下报错:

AISBench - ERROR - /vllm-workspace/benchmark/ais_bench/benchmark/clients/base_client.py - raise_error - 35 - [AisBenchClientException] Request failed: HTTP status 400. Server response: {"error":{"message":"1 validation error for ChatCompletionContentPartImageParam\nimage_url\n Input should be a valid dictionary [type=dict_type, input_value='data/textvqa/train_images/b2ae0f96dfbea5d8.jpg', input_type=str]\n For further information visit https://errors.pydantic.dev/2.12/v/dict_type None","type":"BadRequestError","param":null,"code":400}}

原因分析:数据集 JSON 中记录的图片路径是相对路径(data/textvqa/train_images/...),而 OpenAI 兼容接口的image_url要求传入可访问的绝对路径,pydantic 校验ChatCompletionContentPartImageParam时因此返回 400。

解决办法:用sed将 JSON 中的相对路径批量替换为实际绝对路径:

cd ais_bench/datasets/textvqa/textvqa_json sed -i 's#data/textvqa/train_images/#/path/to/benchmark/ais_bench/datasets/textvqa/train_images/#g' textvqa_val.json

将/path/to/benchmark/ais_bench/datasets/textvqa/train_images/替换为你机器上图像文件真实存放的绝对目录即可。

9. 小结与延伸阅读

本指南完整覆盖了 vllm-ascend 环境下 AISBench 评测的标准流程:Docker 启动单卡 vLLM 服务(注意--max-model-len需大于 35000)、安装 AISBench、下载七类常用数据集、修改vllm_api_general_chat.py配置(重点是max_out_len与max_model_len的约束关系)、分别执行--mode all精度评测与--mode perf性能评测,以及 TextVQA 图像路径的修复。读懂outputs/default/<时间戳>目录结构(predictions/results/summary)即可快速定位最终得分。

如果你想将同样的评测接入自动化验证,可深入研究仓库中的 tools/aisbench.py(AisbenchRunner的配置生成与阈值校验逻辑)及其单元测试 tests/ut/tools/test_aisbench.py,并参考 e2e 用例 tests/e2e/cases/features/kv_pool/test_qwen3_30b_acc.py 的aisbench_cases组织方式。若需对比其他评测框架,可阅读同目录下的 using_lm_eval.md(lm-eval 的在线/离线/本地数据集用法)与 using_evalscope.md(EvalScope 的精度评测与压测)。

  • 人工智能
  • 大模型
  • 模型推理服务
  • Ascend
  • CANN

【免费下载链接】vllm-ascend

Community maintained hardware plugin for vLLM on Huawei Ascend

项目地址:https://gitcode.com/gh_mirrors/vl/vllm-ascend
点击查看免费下载

相关推荐

上一篇:undici CacheStorage 实战指南:`caches` 单例、Cache 生命周期与 W3C Service Worker 缓存语义解析
下一篇:Dark Reader 四步配置:从开箱暗黑模式到逐站调优的浏览器扩展清单

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 2:18:49

抖音无水印下载工具上手指南:5行命令跑通批量下载

抖音无水印下载工具上手指南&#xff1a;5行命令跑通批量下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …

作者头像 李华