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

推理服务精度评测

本章节介绍了2种精度测评方式,分别为Lm-eval工具和MME工具。

  • lm-eval工具适用于语言模型的推理精度测试,数据集包含mmlu、ARC_Challenge、GSM_8k、Hellaswag、Winogrande、TruthfulQA等,该工具为离线测评,不需要启动推理服务。
  • MME工具适用于多模态模型的精度测试。目前支持模型:llava(llava-1.5系列模型)、llava-next(llava-v1.6系列模型)、minicpm、qwen-vl、internvl2、qwen2-vl、llava-onevision、qwen2.5-vl、gemma3。该工具为离线测评,不需要启动推理服务。

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

使用lm-eval工具暂不支持pipeline_parallel方式,也不支持qwen-7b、qwen-14b、qwen-72b、chatglm2-6b、chatglm3-6b模型。

  1. 安装精度评测工具。在启动推理服务的环境,进入到一个固定目录下,执行如下命令。
    rm -rf lm-evaluation-harness/  
    git clone https://github.com/EleutherAI/lm-evaluation-harness.git
    cd lm-evaluation-harness
    git checkout 383bbd54bc621086e05aa1b030d8d4d5635b25e6
    pip install -e .
  2. 执行如下精度测试命令,可以根据参数说明修改参数。
    lm_eval --model vllm   --model_args pretrained=${vllm_path},dtype=auto,tensor_parallel_size=${tensor_parallel_size},gpu_memory_utilization=${gpu_memory_utilization},add_bos_token=True,max_model_len=${max_model_len},quantization=${quantization},distributed_executor_backend='ray' \
    --tasks ${task}  --batch_size ${batch_size}   --log_samples  --cache_requests true  --trust_remote_code --output_path ${output_path}
    参数说明:
    • model_args:标志向模型构造函数提供额外参数,比如指定运行模型的数据类型;
      • vllm_path是模型权重路径;
      • max_model_len是最大模型长度,默认设置为4096;
      • gpu_memory_utilization是gpu利用率,如果模型出现oom报错,调小参数;
      • tensor_parallel_size是使用的卡数;
      • quantization是量化参数,使用非量化权重,去掉quantization参数;如果使用awq、smoothquant或者gptq加载的量化权重,根据量化方式选择对应参数,可选awq,smoothquant,gptq。
      • distributed_executor_backend是开启多进程服务方式,选择ray开启。
    • model:模型启动模式,可选vllm,openai或hf,hf代表huggingface。
    • tasks:评测数据集任务,比如openllm。
    • batch_size:输入的batch_size大小,不影响精度,只影响得到结果速度,默认使用auto,代表自动选择batch大小。
    • output_path:结果保存路径。
    以Qwen3-0.6b模型的权重为例,在加载非量化场景下使用lm-eval,参考命令如下。
    lm_eval --model vllm   --model_args pretrained="/data/nfs/benchmark/tokenizer/Qwen3-0.6B/",dtype=auto,tensor_parallel_size=1,gpu_memory_utilization=0.7,add_bos_token=True,max_model_len=4096,distributed_executor_backend='ray' \
    --tasks openllm   --batch_size auto   --log_samples  --cache_requests true  --trust_remote_code --output_path ./
    以Qwen2.5-72b模型的权重为例,在compress-tensor量化场景下使用lm-eval,参考命令如下。参数quantization="compress-tensor"表示使用llm-compressor工具量化,可以根据实际量化场景替换为awq等。
    lm_eval --model vllm   --model_args pretrained="/data/nfs/benchmark/tokenizer_w8a8/Qwen3-72B/",dtype=auto,tensor_parallel_size=4,gpu_memory_utilization=0.7,add_bos_token=True,max_model_len=4096,quantization="compress-tensor",distributed_executor_backend='ray' \
    --tasks openllm   --batch_size auto   --log_samples  --cache_requests true  --trust_remote_code --output_path ./
    lm-eval可以验证multi-lora的精度,参考命令如下:
    lm_eval --model vllm --model_args pretrained=${vllm_path},dtype=auto,tensor_parallel_size=${tensor_parallel_size},gpu_memory_utilization=${gpu_memory_utilization},max_model_len=${max_model_len},lora_local_path=${lora_local_path},distributed_executor_backend='ray',enable_lora=True \
    --tasks ${task}  --batch_size ${batch_size}   --log_samples  --cache_requests true  --trust_remote_code --output_path ${output_path} --device cuda

    参数说明:

    • enable_lora=True表示开启multi-lora的精度验证。如果不开启multi-lora的精度验证,不体现enable_lora参数即可。
    • lora_local_path=${lora_local_path}是挂载适配器对应路径,取值可取Lora Adapters中的参数

      --lora-modules中的一个{path}的值。

使用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、gemma3。
    4. MAX_MODEL_LEN:模型上下文长度,默认设置为8192。
    5. MAX_NUM_BATCHED_TOKENS:一个推理阶段中LLMEngine最多能处理的token数量,和MAX_MODEL_LEN对齐,默认为8192。
    6. DTYPE:数据类型。默认为bfloat16。
    7. OUTPUT_NAME:输出结果文件名称, 默认llava。
    8. ASCEND_RT_VISIBLE_DEVICES:表示支持多个模型服务实例,同时支持模型并行,如 0,1:2,3,以冒号切分,表示0卡和1卡跑一个模型服务实例,2卡和3卡跑一个模型服务实例。默认为0卡只跑一个模型服务实例。
    9. QUANTIZATION:为量化选项,不传入默认为None即不启用量化;支持w4a16,需配套对应的权重使用。
    10. GPU_MEMORY_UTILIZATION:NPU使用的显存比例,复用原vLLM的入参名称,默认为0.9。
    11. DISTRIBUTED_EXECUTOR_BACKEND:分布式服务使用的后端,默认为 None,表示"mp"(多进程)。可设为"ray"。

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

相关文档