推理服务精度评测
本章节介绍了3种精度测评方式,分别为acs-bench、Simple-evals工具和MME工具。
- acs-bench工具支持LLM精度在线评测业务及多模型并发测试,按照需求自定义测试配置进行多模型多数据集的组合在线精度测试,测试完成后输出详细测试结果可供分析。
- Simple-evals是一个用于评估语言模型的轻量级库,可用来评估的数据集为MMLU、GPQA、DROP、MGSM 和 HumanEval。该工具为在线评测,默认使用openai接口进行评测。
- MME工具适用于多模态模型的精度测试。目前支持模型:支持的多模态模型列表。
使用acs-bench工具进行大语言模型精度评测
acs-bench工具可进行精度测试,其主要依赖opencompass作为评测后端。acs-bench eval命令主要用于LLM精度测试任务,支持多模型并发精度测试和逐个精度测试、单任务多个数据集测试、断点续测、裁判模型。
- 安装acs-bench工具
昇腾云6.5.906及以后版本的配套镜像中默认已经安装acs-bench工具whl包acs_bench-x.x.x-py3-none-any.whl的性能测试工具,精度工具需单独安装。
可以通过如下命令查看是否已经安装acs-bench工具。pip show acs-bench
如果需要安装acs-bench精度工具,请参考以下步骤执行。
- 获取acs-bench工具的whl包。
whl包存放在软件包AscendCloud-LLM-xxx.zip>llm_tools目录中。acs-bench工具安装在python运行环境中,可以访问待测试的推理服务即可,建议在推理服务启动的容器中操作。
- 配置pip源,按实际需要配置pip源。(可选)
$ mkdir -p ~/.pip $ vim ~/.pip/pip.conf # 配置文件填入如下内容,下述命令以华为源为例: [global] index-url=https://mirrors.tools.huawei.com/pypi/simple trusted-host=mirrors.tools.huawei.com timeout = 120
- 执行如下命令安装acs-bench精度工具。(可选)
pip install llm_tools/acs_bench-*-py3-none-any.whl[eval]
若python版本高于或等于3.11,需先手动安装pyext依赖
pip install git+https://gitee.com/xana/PyExt.git@a95f488490fc57ec17d0c00a99c6bc0a4726824f
若git报错“SSL certificate problem”,可通过 git config --global http.sslVerify false 命令关闭SSL认证重新安装即可
安装完成pyext依赖后重新安装acs-bench工具
- 获取acs-bench工具的whl包。
- 配置provider.yaml
acs-bench工具通过配置providers.yaml文件访问服务端,配置流程参考:配置providers.yaml
- 准备数据集
acs-bench支持指定本地数据集进行测试,需创建data文件夹,将数据集存放在/data下。测试时指定的数据集路径为data所在路径。
支持的数据集:ceval、cmmlu、gsm8k、humaneval、math、math_prm800k_500、math500、mmlu、gpqa、livecodebench、aime2024、aime2025。
获取数据集可参考表1。建议在容器中通过wget命令下载数据集并解压使用。下载并解压命令示例如下:
wget https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip unzip OpenCompassData-core-20240207.zip
表1 数据集说明 数据集名称
任务类别
需要LLM Judge
数据集条数
下载路径
说明
ceval
Chinese, Knowledge, MCQ
否
1346
具体的数据集介绍请参考此处。
无
cmmlu
Chinese, Knowledge, MCQ
否
11582
无
gsm8k
Math, Reasoning
否
1319
无
humaneval
Coding
否
164
该数据集不支持--limit参数命令。
math
Math, Reasoning
否
5000
无
math_prm800k_500
Math, Reasoning
是
500
该数据集仅支持裁判模型,裁判模型策略仅支持auto、llm模式。
math500
Math, Reasoning
否
500
无
mmlu
Knowledge, MCQ
否
14042
无
gpqa
Knowledge, MCQ
否
198
无
livecodebench
Coding
否
879
无
aime2024
Math, Reasoning
否
30
无
aime2025
Math, Reasoning
是
30
该数据集仅支持裁判模型,裁判模型策略仅支持auto、llm模式。
- 运行精度测试任务
acs-bench工具支持使用CLI命令进行精度评测,也可将CLI命令和配置文件结合起来进行精度评测。
- 使用CLI命令进行精度评测
# 示例1:以数据集gpqa精度评测为例 acs-bench eval \ --benchmark-save-path ./output/ \ --concurrency 40 --query-per-second 40 \ --tokenizer /model/Qwen3-32B-W8A8 \ --provider ./providers.yaml \ --input-path ./opencompass/ \ --num-process 2 --eval-mode all \ --max-seq-len 32768 --max-out-len 28000 \ --datasets gpqa
1. 待评测数据集路径需要放置在${--input-path}/data文件夹中。
2. 支持同时指定多个datasets进行评测,不同数据名称之间用`,`分隔。
3. 精度评测任务时长跟模型能力、数据集大小、数据集类型有关,可根据后端模型能力合理调配{concurrency}、{query-per-second}、{num-process}参数配置请求大小。个别数据集模型推理时间过长,{timeout}默认为1000秒,为避免超时导致评测失败,可按模型能力合理调配。
- 使用judge模型进行精度评测
# 以数据集类型为gpqa为例 acs-bench eval \ --benchmark-save-path ./output/ \ --concurrency 40 --query-per-second 40 \ --tokenizer /model/Qwen3-32B-W8A8 \ --provider ./providers.yaml \ --input-path ./opencompass/ \ --num-process 2 --eval-mode all \ --max-seq-len 32768 --max-out-len 28000 \ --datasets gpqa \ --judge-strategy auto \ --judge-model-args '{"base_url":"http://127.0.0.1:9001/v1", "backend": "openai-chat", "model_name": "Qwen2.5-72B-Instruct", "max_seq_len": 20480, "max_out_len": 10240, "tokenizer_path": "/model/Qwen2.5-72B-Instruct"}'
--judge-model-args中的judge模型配置也可以在providers.yaml中配置,且CLI参数中的对应字段优先级高于yaml配置文件:
1. 如下配置文件,providers中的模型配置表示待评测模型的基础信息,支持同时配置多个模型,可以通过--enable-model-parallel参数控制是否并发使用多个模型进行推理。judges_models中的模型配置表示judge模型的配置,且只支持配置一个模型。
2. 裁判模型推荐使用Instruct模型。
providers: - id: 'ascend-vllm' name: 'ascend-vllm' api_key: 'EMPTY' base_url: 'http://127.0.0.1:9000/v1/' model_name: 'Qwen3-32b' model_category: 'Qwen3-32b' judge_models: - id: 'ascend-vllm' api_key: 'EMPTY' base_url: 'http://127.0.0.1:9001/v1' model_name: 'Qwen2.5-72B-Instruct' model_category: 'Qwen2.5-72B-Instruct'LLM-as-a-Judge评测参数,使用裁判模型来判断正误,包括以下参数:
- --judge-strategy: 使用裁判模型的策略,可选:
- auto: 默认策略,根据数据集是否需要judge来决定是否使用裁判模型
- llm: 总是使用裁判模型
- rule: 不使用裁判模型,使用规则判断
- llm_recall: 先使用规则判断,若规则判断失败再使用裁判模型
- parallel:同时对于所有样本使用规则和裁判模型进行评测,只要两者至少有一个判对则认为正确
- --judge-model-args: 设置裁判模型参数,以json字符串格式传入,将解析为字典,支持如下字段:
- api_key: 模型API端点密钥
- base_url: 模型API端点
- model_name: 模型名称
- backend: openai-chat 或者openai,默认是openai-chat
- query_per_second:QPS,用于控制请求速率
- max_workers:judge模型评测的进程数
- max_out_len:judge模型输出最大长度
- max_seq_len:judge模型输入+输出最大长度
- tokenizer_path:本地tokenizer路径,裁判模型策略为llm、llm_recall、parallel模式时需配置,如果默认数据集只支持judge评测,即使是auto模式也需要配置该参数
- temperature:温度系数
- --judge-strategy: 使用裁判模型的策略,可选:
参数说明:
精度benchmark测试参数主要由数据集配置参数Dataset Options、并发控制配置参数Concurrency Options、裁判模型配置参数Judge Options和服务请求配置参数Serving Options四部分组成,以下将按照配置类型进行介绍。
DatasetOptions配置参数:
参数名
参数类型
是否必选
参数说明
-d/--datasets
String
否
需要评测的数据集类型, 支持以,分隔的多个输入,当前支持数据集如下:ceval、cmmlu、gsm8k、humaneval、math、math_prm800k_500、math500、mmlu、mmlu_pro_0shot、mmlu_pro_fewshot、BoolQ、gpqa、livecodebench、aime2024、aime2025、cluewsc
-tc/--task-config
String
否
config.py配置文件路径
-i/ --input-path
String
是
指定评测数据集路径,该路径下必须包含data文件夹
-l/ --limit
String
否
每个子集的评估样本范围,例如 [0:5] ,配置后,每个数据集及其子数据集只会取前五个sample进行请求,humaneval数据集暂不支持--limit参数。
-t/--tokenizer
String
否
tokenizer模型文件夹路径,如果task-config中已指定时不需要配置,否则需要指定tokenizer文件路径
Concurrency Options配置参数:
参数名
参数类型
是否必选
参数说明
-c/--concurrency
Int
否
最大并发数,默认是10
-nc/--num-process
Int
否
并行处理的进程数,应该小于等于cpu数量,支持指定多组进程数,默认为1,表示同一时刻处理的task数量
-qps/--query-per-second
Int
否
每秒发送请求的查询次数
-emp/--enable-model-parallel
Bool
否
设置为True对providers.yaml下配置所有模型进行并发评估(要求模型必须为同一个模型权重,否则会影响精度),设置为False对所有模型进行逐个评估,默认为True
Judge Options配置参数:
参数名
参数类型
是否必选
参数说明
-js/--judge-strategy
String
否
judge评测策略,支持auto、llm、rule、llm_recall和parallel策略,默认是auto
-jid/--judge-id
String
否
并行处理的进程数,应该小于等于cpu数量,支持指定多组进程数,默认为1
-jma/--judge-model-args
String
否
Judge 模型的推理参数,类型是Json格式的字符串,支持字段如下: tokenizer_path,base_url ,api_key,model_name,backend,max_out_len,max_seq_len,temperature,query_per_second和max_workers
Serving Options配置参数:
参数名
参数类型
是否必选
参数说明
-p, --provider
String
否
provider文件路径
-pid, --provider-id
String
否
指定需要测试的provider id,适用于provider文件中有多个配置且只需要运行指定id的provider场景
-b, --backend
String
否
请求服务接口类型,支持openai和openai-chat,默认是openai-chat
-eb/--eval-backend
String
否
评估后端,支持 OpenCompass,默认值为 OpenCompass
-em/--eval-mode
String
否
运行模式。仅需推理结果时使用“infer”,需要评估先前结果时使用“eval”,用于可视化结果时使用“viz”,默认:all
-mol/--max-out-len
Int
否
每个模型的最大输出长度,支持以,分隔的多个整数输入
-msl/--max-seq-len
Int
否
每个模型的最大序列长度,支持以,分隔的多个整数输入
-e/--epochs
Int
否
同一个并发配置的计算次数,默认是1,表示评测任务只执行一次
-temper/--temperature
Float
否
Temperature采样参数,只在"openai"接口类型生效,支持以,分隔的多个浮点数输入
-tp/--top-p
Float
否
Top-p采样参数,只在"openai"接口类型生效,支持以,分隔的多个浮点数输入
-timeout/--timeout
Float
否
请求超时时间,默认是1000,单位为秒(s)
-s/--benchmark-save-path
String
否
精度指标落盘的文件夹路径,所有输出文件将保存在此路径中,包括推理日志、评估结果、汇总结果等
-r/--reuse
String
否
重用之前的输出和结果,并运行配置中列出的任何缺失的任务。如果未指定参数,则将重用工作目录中的最新结果。该参数也应为特定的时间戳,例如 %Y%m%d_%H%M%S 或 latest。
- 使用CLI命令进行精度评测
- 评估结果
脚本运行完成后,测试结果输出在终端。同时所有运行输出将定向到outputs/目录,结构如下:
output/ ├── 20250220_120000 ├── 20250220_183030 # 每个实验一个文件夹 │ ├── configs # 用于记录的已转储的配置文件。如果在同一个实验文件夹中重新运行了不同的实验,可能会保留多个配置 │ ├── logs # 推理和评估阶段的日志文件 │ │ ├── eval │ │ └── infer │ ├── predictions # 每个任务的推理结果 │ ├── {model_name}_final.xlsx # 每个模型测试的数据集详细测试结果 │ ├── results # 每个任务的评估结果 │ └── summary # 单个实验的汇总评估结果 ├── ...
使用Simple-evals精度测评工具进行大语言模型精度评测
Simple-evals是在线服务精度评估工具,只要支持openai的框架,都可以无障碍使用。
- 安装Simple-evals评测工具。利用包里的python conda环境,创建一个新的python 环境。以accuracy为例。
conda create -n accuracy --clone python-3.11.10 conda activate accuracy cd xxx/simple_evals bash build.sh
- 执行在线精度评测任务
# debug模式 python simple_evals.py --model $model --dataset gpqa \ --served-model-name $served_model_name \ --url http://localhost:$port/v1 \ --max-tokens 128 \ --temperature 0.6 \ --num-threads 32 \ --debug # start python simple_evals.py --model $model --dataset gpqa \ --served-model-name $served_model_name \ --url http://localhost:$port/v1 \ --max-tokens 16384 \ --temperature 0.6 \ --num-threads 32
参数说明:
- model:评测的模型,会影响到生成的文件名。例如Qwen3-32B,会在当前目录的results/ 下生成 gpqa_Qwen3-32B_20250719_130703.json和gpqa_Qwen3-32B_20250719_130703.html.json文件会记录分数,html文件可以查看具体的结果。
- dataset:评测的数据集,支持mmlu、gpqa、mgsm、drop、humaneval五个数据集。
- served_model_name:待评测服务支持openai,那么就有一个served_model_name。发送请求时,需要将它带上。
- port:支持本地、线上服务进行评测。如果是本地服务,url一般是 localhost:8080,port是此处的 8080。如果是线上服务,则服务提供商会以openai规格提供url 和served_model_name。注意url是以v1结束。
- max-tokens:生成的最大tokens数。在现在支持了思维链或者其他特性的情况下,输出越来越长,输出的结果可能在后面。因此推荐设置为16384。
- temperature:影响生成的结果,建议保持不变。
- num-threads:发送给服务请求的并发数,在服务支持的范围内并发越大,耗时越短。推荐值32。
- debug:因评测消耗较大,提供debug模式来验证安装是否成功,会发送少量请求走完所有的过程。建议第一次运行前使用debug模式快速跑完一遍。
- 结果说明
在simple-evals当前目录下生成结果,score分组保存在json中,详情保存在html中。以gpqa_Qwen3-32B_20250719_130703.json为例,gpqa为评测的数据集,Qwen3-32B为评测的大语言模型,20250719_130703为执行时的时间戳。
使用MME精度测评工具进行多模态模型精度评测
- MME数据集获取。
请用户自行获取MME评估集,将MME评估集上传至llm_tools/llm_evaluation/mme_eval/data/eval/目录中。
- 获取精度测试代码。精度测试代码存放在代码包AscendCloud-LLM的llm_tools/llm_evaluation/mme_eval目录中,代码目录结构如下。
mme_eval ├──metric.py #MME精度测试脚本 ├──MME.sh #运行MME脚本
- 启动MME精度测试脚本。
export MODEL_PATH=/data/nfs/model/InternVL2-8B/ export MME_PATH=/llm_tools/llm_evaluation/mme_eval/data/eval/MME export MODEL_TYPE=internvl2 export OUTPUT_NAME=internvl2-8B export ASCEND_RT_VISIBLE_DEVICES="0:1:2:3:4:5:6:7" bash MME.sh
参数说明:
- MODEL_PATH:模型权重路径,默认为空。
- MME_PATH:MME数据集路径,默认当前路径。
- MODEL_TYPE:模型类型。当前可选模型类型包括:llava、llava-next、minicpm、qwen-vl、internvl2、qwen2-vl、llava-onevision。
- OUTPUT_NAME:输出结果文件名称, 默认llava。
- ASCEND_RT_VISIBLE_DEVICES:表示支持多个模型服务实例,同时支持模型并行,如 0,1:2,3 默认0卡。
- QUANTIZATION:为量化选项,不传入默认为None即不启用量化;支持w4a16,需配套对应的权重使用。
- GPU_MEMORY_UTILIZATION:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。
脚本运行完成后,测试结果输出在终端。