
# 推理服务精度评测
本章节介绍了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\[eval\]工具 安装acs-bench大语言精度工具，请参考以下步骤执行。
   1. 获取acs-bench工具的whl包。 whl包存放在软件包AscendCloud-LLMFramework-6.5.910-llm_tools.zip的llm_tools目录中。软件包获取路径：[Support-E](https://support.huawei.com/enterprise/zh/cloud-computing/modelarts-pid-23404305/software/)，在此路径中查找下载ModelArts 6.5.910.5版本。
      acs-bench工具需要安装在python\>=3.10的运行环境中，该环境可以访问待测试的推理服务即可。推荐安装在推理服务启动的容器中。
      
   
   2. 配置pip源，按实际需要配置pip源。(可选)
      ```
      mkdir -p ~/.pip
      vim ~/.pip/pip.conf
      ```
      配置文件填入如下内容，下述命令以华为源为例：
      ```
      [global]
      index-url = https://mirrors.huaweicloud.com/repository/pypi/simple
      trusted-host = mirrors.huaweicloud.com
      timeout = 120
      ```
      
   
   3. 在whl包所在文件夹中，执行如下命令安装acs-bench精度工具。
      ```
      pip install acs_bench-*-py3-none-any.whl[eval]
      ```
      
   
   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   使用上述命令安装时，acs_bench-\*-py3-none-any.whl中的 \`\*\` 需替换为实际版本号，如：pip install acs_bench-1.2.0-py3-none-any.whl
   若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工具
   ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/caution_3.0-zh-cn.png)
   若安装opencc失败，需指定opencc版本为1.1.9，或使用acs-bench 1.4.1及以上版本
   ```
   pip install acs_bench-x.x.x-py3-none-any.whl[eval] opencc==1.1.9
   ```
   
2. 配置provider.yaml acs-bench工具通过配置providers.yaml文件访问服务端，配置流程参考：[配置providers.yaml](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5910027.html#ZH-CN_TOPIC_0000002509726129__zh-cn_topic_0000002451298478_section1453423193120)
   
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  | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | cmmlu            | Chinese, Knowledge, MCQ | 否           | 11582 | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | gsm8k            | Math, Reasoning         | 否           | 1319  | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | humaneval        | Coding                  | 否           | 164   | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 该数据集不支持--limit参数命令。              |
   | math             | Math, Reasoning         | 否           | 5000  | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | math_prm800k_500 | Math, Reasoning         | 是           | 500   | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 该数据集仅支持裁判模型，裁判模型策略仅支持auto、llm模式。 |
   | math500          | Math, Reasoning         | 否           | 500   | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | mmlu             | Knowledge, MCQ          | 否           | 14042 | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | gpqa             | Knowledge, MCQ          | 否           | 198   | [数据集下载链接](https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip) 具体的数据集介绍请参考[此处](https://github.com/open-compass/opencompass/releases/tag/0.2.2.rc1)。 | 无                                |
   | livecodebench    | Coding                  | 否           | 879   | [code_generation_lite](https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/code_generation_lite.zip)                                                                                                                                          | 无                                |
   | aime2024         | Math, Reasoning         | 否           | 30    | [aime](https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/aime.zip)                                                                                                                                                                          | 无                                |
   | aime2025         | Math, Reasoning         | 是           | 30    | [aime2025](https://opencompass.oss-cn-shanghai.aliyuncs.com/datasets/data/aime2025.zip)                                                                                                                                                                  | 该数据集仅支持裁判模型，裁判模型策略仅支持auto、llm模式。 |
      
   
4. 运行精度测试任务 acs-bench工具支持使用CLI命令进行精度评测，也可将CLI命令和配置文件结合起来进行精度评测。
   1. 使用CLI命令进行精度评测，以数据集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
      ```
      ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
      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"}'
      ```
      ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
      ${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      | 否        | 最大并发数，默认是16                                                                             |
   | -nc/--num-process            | Int      | 否        | 并行处理的进程数，应该小于等于cpu数量，支持指定多组进程数，默认为4，表示同一时刻处理的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评估集](https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models/tree/Evaluation)，将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。
   
   
   脚本运行完成后，测试结果输出在终端。
   
 
