Benchmark Test


测试模型:深度学习模型

测试对象:运行时

测试目的:测试运行时的推理性能

 

功能:

根据用户指定的深度学习模型(可以是自己提供的,也可以是现有测试模型中已有的)和想要测试的运行时,测试运行时的推理性能,主要包括:推理结果,推理速度,推理每张图片的延迟时间。

 

原有非自动化测试:

  • 手动安装运行时需要的安装包
  • 手动编译运行时需要的环境
  • 手动下载编译模型需要的依赖包和其他依赖包
  • 手动编译模型
  • 手动起运行时服务
  • 手动进行推理
  • 推理结束后手动将运行时服务关闭
  • 得到推理过程的日志
  • 运行分析测试结果的脚本,手动进行分析
  • 得到分析结果

 

现自动化测试:

  • 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.jsonAdlik/model_compiler/src/model_compiler/config_schema.jsonserving_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测试运行时,则需要执行以下步骤:

 

  1. 下载Adlik代码。
  2. 安装docker
  3. 准备json(编译模型所需)训练后的模型,模型文件的格式可以为:.pb.h5.ckpt, .onnx,建议将模型和serving_model.json放在Adlik / benchmark / test / test_model目录下。
  4. json的编写可以参考Adlik/benchmark/test/test_model目录下各模型文件夹中的serving_model.jsonAdlik/model_compiler/src/model_compiler/config_schema.jsonserving_model.json主要配置编译的运行时类型、模型文件、编译好的模型的输出地址、模型的输入输出信息、最大batch size等信息,在模型编译的时候使用。
  5. 如果Adlik/benchmark/test/client目录中没有必需的推理代码,则需要编写推理代码
  6. 指定测试运行时的类型和版本号(如果需要,例如:OpenVINOTensorRT)。
  7. 明确测试是否需要GPU
  8. 运行代码的环境已安装7或更高版本。
  9. 根据测试的运行时类型,在Adlik/benchmark/test目录下选择测试所需的dockerfile,运行时脚本和编译脚本。
  10. 配置测试参数,例如在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

 

 

注意事项:

  1. 如果测试tensorrt运行时,需要用户自己在tensorrt的官网上注册并下载依赖包,下载完的依赖包建议放在Adlik目录下,

官网链接:https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html

  1. 如果用户在做镜像时不能使用外网,需要自行配置可以使用的apt源和pip源,并将命令行加入到Dockerfile中。
  2. 用户如果不能使用网络代理拉取bazel build时的依赖包,可以将bazel build需要的安装包提前下载好, 在bazel build时使用 --distdir指令。
  3. 为防止在bazel build时占用过多的内核导致电脑卡顿,用户可根据电脑的配置,在bazel build时使用 --jobs 指定并发job数。