更新时间:2024-11-12 GMT+08:00
推理精度测试
本章节介绍如何进行推理精度测试。
前提条件
确保容器可以访问公网。
Step1 配置精度测试环境
- 获取精度测试代码。精度测试代码存放在代码包AscendCloud-3rdLLM-xxx.zip的llm_tools/llm_evaluation(6.3.905版本)目录中。代码目录结构如下。精度测试使用到的mmlu和ceval数据集已经提前打包在代码中。
benchmark_eval ├──apig_sdk # ma校验包 ├──cpu_npu # 检测资源消耗 ├── 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 # 启动脚本,建立线程池发送请求,并汇总结果 ├── readme.md # 说明文档 ├── requirements.txt # 第三方依赖 ├── service_predict.py # 发送请求的服务
- 上传精度测试代码到推理容器中。如果在Step5 进入容器安装推理依赖软件步骤中已经上传过AscendCloud-3rdLLM-x.x.x.zip并解压,无需重复执行。
- 进入benchmark_eval目录下,执行如下命令安装性能测试的关依赖。
pip install -r requirements.txt
- 执行精度测试启动脚本eval_test.py,具体操作命令如下,可以根据参数说明修改参数。
python eval_test.py \ --max_workers=1 \ --service_name=llama2-13b-chat-test \ --eval_dataset=ceval \ --service_url=http://${docker_ip}:8080/v1/completions \ --few_shot=3 \ --is_devserver=True \ --model_name=llama2 \ --deploy_method=vllm \ --vllm_model=${model_path}
参数说明:
- max_workers:请求的最大线程数,默认为1。
- service_name:服务名称,保存评测结果时创建目录,示例为:llama2-13b-chat-test。
- eval_dataset:评测使用的评测集(枚举值),目前仅支持mmlu、ceval。
- service_url:成功部署推理服务后的服务预测地址,示例:http://${docker_ip}:8080/generate。此处的${docker_ip}替换为宿主机实际的IP地址,端口号8080来自前面配置的服务端口。
- few_shot:开启少量样本测试后添加示例样本的个数。默认为3,取值范围为0~5整数。
- is_devserver: 是否DevServer部署方式,True表示DevServer模式。False表示ModelArts Standard模式。
- model_name:评测模型名称,llama2。
- deploy_method:部署方法,不同的部署方式api参数输入、输出解析方式不同,目前支持tgi、ma_standard、vllm等方式。
- vllm_model:deploy_method为vllm时,服务以openai的方式启动,vllm_model为启动服务时传入的model_path。
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 # 保存推理结果,但是可能答非所问,无法判断是否正确,需要人工判断进行纠偏。