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

推理服务精度评测

本章节介绍了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进行在线服务精度评估。

  1. 使用Conda准备OpenCompass 运行环境(推荐)
    conda create --name opencompass python=3.10 -y
    conda activate opencompass
  2. 安装OpenCompass
    git clone https://github.com/open-compass/opencompass
    cd opencompass
    pip install -e .
  3. 已支持数据集下载
    # 下载数据集到 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
  4. 构建配置文件

    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:批处理大小
  5. 运行精度测试任务
    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模式,任务将按顺序执行,并实时打印输出,帮助检查问题,适用于第一次运行任务。
  6. 评估结果

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

    outputs/default/
    ├── 20250220_120000
    ├── 20250220_183030     # 每个实验一个文件夹
    │   ├── configs         # 用于记录的已转储的配置文件。如果在同一个实验文件夹中重新运行了不同的实验,可能会保留多个配置
    │   ├── logs            # 推理和评估阶段的日志文件
    │   │   ├── eval
    │   │   └── infer
    │   ├── predictions   # 每个任务的推理结果
    │   ├── 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。

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

相关文档