更新时间:2025-11-19 GMT+08:00
分享

推理服务精度评测

本章节介绍了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精度测试任务,支持多模型并发精度测试和逐个精度测试、单任务多个数据集测试、断点续测、裁判模型。

  1. 安装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精度工具,请参考以下步骤执行。

    1. 获取acs-bench工具的whl包。

      whl包存放在软件包AscendCloud-LLM-xxx.zip>llm_tools目录中。acs-bench工具安装在python运行环境中,可以访问待测试的推理服务即可,建议在推理服务启动的容器中操作。

    2. 配置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
    3. 执行如下命令安装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工具

  2. 配置provider.yaml

    acs-bench工具通过配置providers.yaml文件访问服务端,配置流程参考:配置providers.yaml

  3. 准备数据集

    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

    code_generation_lite

    aime2024

    Math, Reasoning

    30

    aime

    aime2025

    Math, Reasoning

    30

    aime2025

    该数据集仅支持裁判模型,裁判模型策略仅支持auto、llm模式。

  4. 运行精度测试任务

    acs-bench工具支持使用CLI命令进行精度评测,也可将CLI命令和配置文件结合起来进行精度评测。

    1. 使用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秒,为避免超时导致评测失败,可按模型能力合理调配。

    2. 使用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:温度系数

    参数说明:

    精度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。

  5. 评估结果

    脚本运行完成后,测试结果输出在终端。同时所有运行输出将定向到outputs/目录,结构如下:

    output/
    ├── 20250220_120000
    ├── 20250220_183030     # 每个实验一个文件夹
    │   ├── configs         # 用于记录的已转储的配置文件。如果在同一个实验文件夹中重新运行了不同的实验,可能会保留多个配置
    │   ├── logs            # 推理和评估阶段的日志文件
    │   │   ├── eval
    │   │   └── infer
    │   ├── predictions   # 每个任务的推理结果
    │   ├── {model_name}_final.xlsx   # 每个模型测试的数据集详细测试结果
    │   ├── results       # 每个任务的评估结果
    │   └── summary       # 单个实验的汇总评估结果
    ├── ...

使用Simple-evals精度测评工具进行大语言模型精度评测

Simple-evals是在线服务精度评估工具,只要支持openai的框架,都可以无障碍使用。

  1. 安装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
  2. 执行在线精度评测任务
    # 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模式快速跑完一遍。
  3. 结果说明

    在simple-evals当前目录下生成结果,score分组保存在json中,详情保存在html中。以gpqa_Qwen3-32B_20250719_130703.json为例,gpqa为评测的数据集,Qwen3-32B为评测的大语言模型,20250719_130703为执行时的时间戳。

使用MME精度测评工具进行多模态模型精度评测

  1. MME数据集获取。

    请用户自行获取MME评估集,将MME评估集上传至llm_tools/llm_evaluation/mme_eval/data/eval/目录中。

  2. 获取精度测试代码。精度测试代码存放在代码包AscendCloud-LLM的llm_tools/llm_evaluation/mme_eval目录中,代码目录结构如下。
    mme_eval
    ├──metric.py        #MME精度测试脚本
    ├──MME.sh           #运行MME脚本
  3. 启动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

    参数说明:

    1. MODEL_PATH:模型权重路径,默认为空。
    2. MME_PATH:MME数据集路径,默认当前路径。
    3. MODEL_TYPE:模型类型。当前可选模型类型包括:llava、llava-next、minicpm、qwen-vl、internvl2、qwen2-vl、llava-onevision。
    4. OUTPUT_NAME:输出结果文件名称, 默认llava。
    5. ASCEND_RT_VISIBLE_DEVICES:表示支持多个模型服务实例,同时支持模型并行,如 0,1:2,3 默认0卡。
    6. QUANTIZATION:为量化选项,不传入默认为None即不启用量化;支持w4a16,需配套对应的权重使用。
    7. GPU_MEMORY_UTILIZATION:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。

    脚本运行完成后,测试结果输出在终端。

相关文档