更新时间:2024-08-17 GMT+08:00
分享

推理精度测试

本章节介绍如何进行推理精度测试,建议在Notebook的JupyterLab中另起一个Terminal,进行推理精度测试。若需要在生产环境中进行推理精度测试,请通过调用接口的方式进行测试。

Step1 执行精度测试

精度测试需要数据集进行测试。推荐公共数据集mmlu和ceval。AscendCloud-3rdLLM-6.3.905-xxx.zip代码包已包含数据集。

精度测试使用的是openai接口,部署服务的时候请使用openai-api启动,暂不支持vllm-api接口。

  1. 获取精度测试代码。精度测试代码存放在代码包AscendCloud-3rdLLM的/llm_evaluation目录中,代码目录结构如下:
    benchmark_eval
    ├── config
    │   ├── config.json  # 服务的配置模板,已配置了ma-standard,tgi示例
    │   ├── mmlu_subject_mapping.json  # mmlu数据集学科信息
    │   ├── ceval_subject_mapping.json  # ceval数据集学科信息
    ├── evaluators
    │   ├── evaluator.py # 数据集数据预处理方法集
    │   ├── chatglm.py  # 处理请求相应模块, 一般和chatglm的官方评测数据集ceval搭配
    │   ├── llama.py  # 处理请求相应模块, 一般和llama的评测数据集mmlu搭配
    ├── mmlu-exam, mmlu数据集
    ├── ceval-exam, ceval数据集
    ├── eval_test.py  # 启动脚本,建立线程池发送请求,并汇总结果
    ├── service_predict.py  # 发送请求的服务
  2. 执行精度测试启动脚本eval_test.py,具体操作命令如下,可以根据参数说明修改参数。
    python eval_test.py \
      --max_workers=1 \
      --service_name=qwen-14b-test \
      --eval_dataset=ceval \
      --service_url=${API接口公网地址}/v1/completions \
      --few_shot=3 \
      --is_devserver=False \
      --vllm_model=${model_path} \
      --deploy_method=vllm

    参数说明:

    • max_workers:请求的最大线程数,默认为1。
    • service_name:服务名称,保存评测结果时创建目录,示例为:qwen-14b-test。
    • eval_dataset:评测使用的评测集(枚举值),目前仅支持mmlu、ceval。
    • service_url:服务接口地址,若服务部署在notebook中,该地址为"http://127.0.0.1:${port}/v1/completions";若服务部署在生产环境中,该地址由API接口公网地址与"/v1/completions"拼接而成,部署成功后的在线服务详情页中可查看API接口公网地址。
      图1 API接口公网地址
    • few_shot:开启少量样本测试后添加示例样本的个数。默认为3,取值范围为0~5整数。
    • is_devserver: 是否devserver部署方式,True表示DevServer模式。False表示ModelArts Standard模式。
    • vllm_model:对应Step4 部署并启动推理服务中的模型地址参数model,模型格式是Huggingface的目录格式。
    • deploy_method:部署方法,不同的部署方式api参数输入、输出解析方式不同,目前支持tgi、vllm等方式,本案例使用vllm部署方式。

    若要在生产环境中进行精度测试,还需修改benchmark_eval/config/config.json中app_code,app_code获取方式见访问在线服务(APP认证)

Step2 查看精度测试结果

默认情况下,评测结果会按照result/{service_name}/{eval_dataset}-{timestamp} 的目录结果保存到对应的测试工程。执行多少次,则会在{service_name}下生成多少次结果。

单独的评测结果如下:

{eval_dataset}-{timestamp}  # 例如: mmlu-20240205093257 
├── accuracy   
│   ├── evaluation_accuracy.xlsx  # 测试的评分结果,包含各个学科数据集的评分和总和评分。 
├── infer_info 
│   ├── xxx1.csv # 单个数据集的评测结果 
│   ├── ...... 
│   ├── xxxn.csv # 单个数据集的评测结果 
├── summary_result 
│   ├── answer_correct.xlsx  # 回答正确的结果 
│   ├── answer_error.xlsx  # 保存回答了问题的选项,但是回答结果错误 
│   ├── answer_result_unknow.xlsx  # 保存未推理出结果的问题,例如超时、系统错误 
│   ├── system_error.xlsx  # 保存推理结果,但是可能答非所问,无法判断是否正确,需要人工判断进行纠偏。

相关文档