推理服务精度评测
本章节介绍了3种精度测评方式,分别为OpenCompass、Simple-evals工具和MME工具。
- OpenCompass工具支持20+HuggingFace和API模型,70+数据集的模型评估方案,约40万个问题,支持对各类大语言模型进行一站式评测。
- Simple-evals是一个用于评估语言模型的轻量级库,可用来评估的数据集为MMLU、GPQA、DROP、MGSM 和 HumanEval。该工具为在线评测,默认使用openai接口进行评测。
- MME工具适用于多模态模型的精度测试。目前支持模型:qwen2-vl-2B、qwen2-vl-7B、qwen2-vl-72B、qwen2.5-vl-7B、qwen2.5-vl-32B、qwen2.5-vl-72B、internvl2.5-26B、InternVL2-Llama3-76B-AWQ、gemma3-27B。
使用OpenCompass精度测评工具进行大语言模型精度评测
使用OpenCompass进行在线服务精度评估。
- 使用Conda准备OpenCompass 运行环境(推荐)
conda create --name opencompass python=3.10 -y conda activate opencompass
- 安装OpenCompass
git clone https://github.com/open-compass/opencompass cd opencompass pip install -e .
- 已支持数据集下载
# 下载数据集到 data/ 处 wget https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip unzip OpenCompassData-core-20240207.zip
也通过以下命令查询支持的模型与数据集
python tools/list_configs.py [PATTERN1] [PATTERN2] [...]
若运行时不加任何参数,则默认列出所有在 configs/models 和 configs/dataset 下的模型配置。
用户同样可以传入任意数量的参数,脚本会列出所有跟传入字符串相关的配置,支持模糊搜索及 * 号匹配。如下面的命令会列出所有跟 mmlu 和 llama 相关的配置:
python tools/list_configs.py mmlu llama
- 构建配置文件
OpenCompass允许用户在配置文件中编写实验的完整配置,并通过 run.py 直接运行它。配置文件是以 Python 格式组织的,并且必须包括 datasets 和models 字段。
在 opencompass/examples/ 下新建example.py文件 。此配置通过继承机制引入所需的数据集和模型配置,并以所需格式组合 datasets 和 models 字段。
from mmengine.config import read_base from opencompass.models import OpenAI with read_base(): from opencompass.configs.datasets.gsm8k.gsm8k_gen import gsm8k_datasets datasets = gsm8k_datasets models = [dict( abbr='Qwen3-32B-W8A8', type=OpenAI, path='Qwen3-32B-W8A8', tokenizer_path='/Qwen/Qwen3-32B-W8A8', key='EMPTY', openai_api_base='http://127.0.0.1:8091/v1/chat/completions', temperature=0.6, query_per_second=1, max_out_len=31744, max_seq_len=31744, batch_size=8 )]
部分生成式数据集存在默认max_out_len=512默认配置,可能截取的结果还未生成答案,导致得分过低。可在example.py配置文件中更新datasets参数配置。
例:
gsm8k_datasets[0]["infer_cfg"]["inferencer"].pop("max_out_len")
参数说明:
- abbr:模型简称
- type:模型类型
- path:注册的模型名称
- tokenizer_path:tokenizer目录,不配置默认使用path参数
- key:模型访问密钥
- openai_api_base:模型服务地址
- temperature:生成温度
- query_per_second:服务请求速率
- max_out_len:最大输出长度
- max_seq_len:最大输入长度
- batch_size:批处理大小
- 运行精度测试任务
python run.py examples/example.py -w ./outputs/demo
run.py 中更多的参数说明
以下是与评估相关的一些参数,可以帮助您根据环境配置更有效的推理任务
- -w outputs/demo:保存评估日志和结果的工作目录。在这种情况下,实验结果将保存到 outputs/demo/{TIMESTAMP}。
- -r {TIMESTAMP/latest}:重用现有的推理结果,并跳过已完成的任务。如果后面跟随时间戳,将重用工作空间路径下该时间戳的结果;若给定 latest 或干脆不指定,将重用指定工作空间路径下的最新结果。
- --mode all:指定任务的特定阶段。
- all:(默认)执行完整评估,包括推理和评估。
- infer:在每个数据集上执行推理。
- eval:根据推理结果进行评估。
- viz:仅显示评估结果。
- --max-num-workers:并行任务的最大数量。
- --debug:运行debug模式,任务将按顺序执行,并实时打印输出,帮助检查问题,适用于第一次运行任务。
- 评估结果
脚本运行完成后,测试结果输出在终端。同时所有运行输出将定向到outputs/demo/ 目录,结构如下:
outputs/default/ ├── 20250220_120000 ├── 20250220_183030 # 每个实验一个文件夹 │ ├── configs # 用于记录的已转储的配置文件。如果在同一个实验文件夹中重新运行了不同的实验,可能会保留多个配置 │ ├── logs # 推理和评估阶段的日志文件 │ │ ├── eval │ │ └── infer │ ├── predictions # 每个任务的推理结果 │ ├── 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。
脚本运行完成后,测试结果输出在终端。