测试模型:深度学习模型
测试对象:运行时
测试目的:测试运行时的推理性能
功能:
根据用户指定的深度学习模型(可以是自己提供的,也可以是现有测试模型中已有的)和想要测试的运行时,测试运行时的推理性能,主要包括:推理结果,推理速度,推理每张图片的延迟时间。
原有非自动化测试:
- 手动安装运行时需要的安装包
- 手动编译运行时需要的环境
- 手动下载编译模型需要的依赖包和其他依赖包
- 手动编译模型
- 手动起运行时服务
- 手动进行推理
- 推理结束后手动将运行时服务关闭
- 得到推理过程的日志
- 运行分析测试结果的脚本,手动进行分析
- 得到分析结果
现自动化测试:
- python3 执行自动化测试脚本,配置所需参数
- 得到分析结果
目前支持的推理模型文件格式:
.pb,.h5,.ckpt, .onnx
目前支持的运行时:
openvino, tensorrt, tensorflow, tensorflow_gpu
推理端client的编写:
推理端client代码的编写可以参考Adlik/benchmark/tests/test_model/client下的代码,编写原则依据Adlik/adlik_serving/apis/predict.proto,用户根据自己的需求编写数据预处理部分以及模型的输入。
编译模型的serving_model.json的编写:
serving_model.json的编写可以参考Adlik/benchmark/test/test_model目录下各模型文件夹中的serving_model.json和Adlik/model_compiler/src/model_compiler/config_schema.json,serving_model.json主要配置编译的运行时类型、模型文件、编译好的模型的输出地址、模型的输入输出信息、最大batch size等信息,在模型编译的时候使用。
自动化测试总体框架:
操作手册:
参数说明:
简称 | 参数 | 类型 | 描述 | 默认值 |
-d | --docker-file-path | str | 测试运行时的dockerfile | |
-s | --serving-type | str | 测试的运行时类型 | choices=("openvino", "tensorrt", "tensorflow", "tensorflow_gpu") |
-b | --build-directory | str | 构建docker镜像的文件夹 | |
-a | --adlik-directory | str | Adlik文件夹 | Adlik |
-m | --model-name | str | 用来测试的模型名称 | |
-c | --client-script | str | 推理端脚本 | client_script.sh |
-ss | --serving-script | str | 运行时起服务脚本 | serving_script.sh |
-ov | --openvino-version | str | OpenVINO版本 | 2019.3.344 |
-tt | --tensorrt-tar | str | TensorRT压缩包 | TensorRT-7.0.0.11.Ubuntu<br>-18.04.x86_64-gnu.cuda-<br>10.0.cudnn7.6.tar.gz |
-tv | --tensorrt-version | str | TensorRT版本 | 7.0.0.11 |
-l | --log-path | str | 日志文件夹 | log |
-tm | --test-model-path | str | 测试模型地址 | |
-sj | --serving-json | str | 模型的json文件 | serving_model.json |
-cis | --client-inference-script | str | 推理脚本 | |
-i | --image-filename | str | 输入图片 | |
-gl | --gpu-label | int | GPU号 | None |
-cs | --compile-script | str | 编译模型的脚本 | compile_script.sh |
如果要使用automatic_test.py测试运行时,则需要执行以下步骤:
- 下载Adlik代码。
- 安装docker。
- 准备json(编译模型所需)训练后的模型,模型文件的格式可以为:.pb,.h5,.ckpt, .onnx,建议将模型和serving_model.json放在Adlik / benchmark / test / test_model目录下。
- json的编写可以参考Adlik/benchmark/test/test_model目录下各模型文件夹中的serving_model.json和Adlik/model_compiler/src/model_compiler/config_schema.json,serving_model.json主要配置编译的运行时类型、模型文件、编译好的模型的输出地址、模型的输入输出信息、最大batch size等信息,在模型编译的时候使用。
- 如果Adlik/benchmark/test/client目录中没有必需的推理代码,则需要编写推理代码
- 指定测试运行时的类型和版本号(如果需要,例如:OpenVINO和TensorRT)。
- 明确测试是否需要GPU。
- 运行代码的环境已安装7或更高版本。
- 根据测试的运行时类型,在Adlik/benchmark/test目录下选择测试所需的dockerfile,运行时脚本和编译脚本。
- 配置测试参数,例如在Adlik代码中运行以下脚本:
python3 benchmark/src/automatic_test.py -d benchmark/tests/docker_test/openvino.Dockerfile -s openvino -b . -a . -m mnist -c benchmark/tests/client_script/client_script.sh -ss benchmark/tests/serving_script/openvino_serving_script.sh -l log的绝对路径 -tm benchmark/tests/test_model/mnist_keras -cis mnist_client.py -i mnist.png -cs benchmark/tests/compile_script/compile_script.sh
注意事项:
- 如果测试tensorrt运行时,需要用户自己在tensorrt的官网上注册并下载依赖包,下载完的依赖包建议放在Adlik目录下,
官网链接:https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html。
- 如果用户在做镜像时不能使用外网,需要自行配置可以使用的apt源和pip源,并将命令行加入到Dockerfile中。
- 用户如果不能使用网络代理拉取bazel build时的依赖包,可以将bazel build需要的安装包提前下载好, 在bazel build时使用 --distdir指令。
- 为防止在bazel build时占用过多的内核导致电脑卡顿,用户可根据电脑的配置,在bazel build时使用 --jobs 指定并发job数。