未验证 提交 6f8726fc 编写于 作者: M MissPenguin 提交者: GitHub

Tipc (#5380)

* add tipc doc for cpp infer

* add images

* fix

* fix

* fix

* update

* update

* update

* update

* update

* update
上级 d2152f49
# tipc 文档 # 飞桨训推一体认证(TIPC)开发文档
## 1. TIPC简介
飞桨除了基本的模型训练和预测,还提供了支持多端多平台的高性能推理部署工具。飞桨训推一体认证(TIPC)旨在为用户提供所有飞桨模型的训练推理部署打通情况,即TIPC认证信息,同时提供一套自动化测试工具,方便用户进行一键测试。本文主要介绍了TIPC测试的接入规范。
<div align="center">
<img src="tipc_guide.png" width="1000">
</div>
## 2. 接入TIPC
对于已完成训练推理功能开发的模型,可以按照本教程接入TIPC测试。模型训练推理功能开发,请参考[飞桨官方文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/index_cn.html)。TIPC接入流程一般分为`开发测试工具``撰写测试文档`两步。
### 2.1 开发测试工具
参考样板间和开发文档完成测试工具开发:
- 测试工具样板间:https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/test_tipc
- 测试工具开发文档:
- [基础训练预测](./development_specification_docs/train_infer_python.md)
- [多机多卡训练]
- [混合精度训练]
- [c++预测](./development_specification_docs/inference_cpp.md)
- [Serving](./development_specification_docs/serving.md)
- [Lite ARM CPU](./development_specification_docs/Lite_arm_cpu_cpp_infer.md)
- [Lite OpenCL ARM GPU](./development_specification_docs/Lite_arm_gpu_opencl_cpp_infer.md)
- [Lite Metal ARM GPU]
- [Paddle2ONNX](./development_specification_docs/paddle2onnx.md)
- [Paddle.js]
- [XPU]
- [XPU2]
- [DCU]
- [NPU]
- [Jetson]
- [Windows]
- [MacOS]
### 2.2 撰写测试文档
参考测试文档样板间撰写测试文档:
- 测试文档样板间:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/readme.md
...@@ -56,7 +56,7 @@ C++预测测试工具位于PaddleOCR dygraph分支下的[test_tipc目录](https: ...@@ -56,7 +56,7 @@ C++预测测试工具位于PaddleOCR dygraph分支下的[test_tipc目录](https:
``` ```
test_tipc/ test_tipc/
├── configs/ # 配置文件目录 ├── configs/ # 配置文件目录
├── ppocr_det_mobile # ppocr_det_mobile模型的测试配置文件目录 ├── ch_ppocr_mobile_v2.0_det # ch_ppocr_mobile_v2.0_det模型的测试配置文件目录
├── model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt # 测试Linux上c++预测的配置文件 ├── model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt # 测试Linux上c++预测的配置文件
├── results/ # 预先保存的预测结果,用于和实际预测结果进行精读比对 ├── results/ # 预先保存的预测结果,用于和实际预测结果进行精读比对
├── cpp_ppocr_det_mobile_results_fp32.txt # 预存的mobile版ppocr检测模型c++预测的fp32精度的结果 ├── cpp_ppocr_det_mobile_results_fp32.txt # 预存的mobile版ppocr检测模型c++预测的fp32精度的结果
......
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
## 1.2 TIPC自动化测试 ## 1.2 TIPC自动化测试
本规范测试的链条如下(其中相邻两个模块之间是两两组合关系),可以根据套件需要,适当删减链条。 本规范测试的链条如下(其中相邻两个模块之间是两两组合关系),可以根据套件需要,适当删减链条。
![pipline](./imgs/pipline.png) ![pipline](./images/pipline.png)
上图各模块具体测试点如下: 上图各模块具体测试点如下:
...@@ -295,7 +295,7 @@ pip3 install ./dist/auto_log-1.0.0-py3-none-any.whl ...@@ -295,7 +295,7 @@ pip3 install ./dist/auto_log-1.0.0-py3-none-any.whl
使用AutoLog 实现自动化日志输出的功能可以参考PR:https://github.com/PaddlePaddle/PaddleOCR/pull/3182 使用AutoLog 实现自动化日志输出的功能可以参考PR:https://github.com/PaddlePaddle/PaddleOCR/pull/3182
代码修改有四步,分别是: 代码修改有四步,分别是:
![图片](./imgs/autolog_example.png) ![图片](./images/autolog_example.png)
1). 初始化auto_log类:如上图代码所示(参考[PR](https://github.com/PaddlePaddle/PaddleOCR/pull/3182)),调用了auto_log 实现,初始化一个AutoLogger类,传入参数有模型名称、模型精度,batch_size, 输入shape,日志保存路径,inference配置(self.config),pid号和进程名字可选或设置为None,GPU号gpuid; 1). 初始化auto_log类:如上图代码所示(参考[PR](https://github.com/PaddlePaddle/PaddleOCR/pull/3182)),调用了auto_log 实现,初始化一个AutoLogger类,传入参数有模型名称、模型精度,batch_size, 输入shape,日志保存路径,inference配置(self.config),pid号和进程名字可选或设置为None,GPU号gpuid;
AutoLogger的初始化参数: AutoLogger的初始化参数:
``` ```
...@@ -314,13 +314,13 @@ logger: # 用于打印日志的logger,如果设置为None,在类中会自动 ...@@ -314,13 +314,13 @@ logger: # 用于打印日志的logger,如果设置为None,在类中会自动
``` ```
2). 预测耗时打点:在模型预测中,统计前处理,预测,后处理时间,传入AutoLogger的preprocess_time, inference_time, postprocess_time中; 2). 预测耗时打点:在模型预测中,统计前处理,预测,后处理时间,传入AutoLogger的preprocess_time, inference_time, postprocess_time中;
![图片](./imgs/autolog_time.png) ![图片](./images/autolog_time.png)
3). 打印输出信息:在完成循环预测后,调用AutoLogger的report函数输出log信息。report函数是必须要调用的,否则,统计内存和显存占用的子进程不会关闭。 3). 打印输出信息:在完成循环预测后,调用AutoLogger的report函数输出log信息。report函数是必须要调用的,否则,统计内存和显存占用的子进程不会关闭。
其中,text_detector.auto_log.report()实际调用了AutoLogger.report()函数,根据输入的model信息和统计的时间、内存占用信息,规范化输出日志,输入日志格式如下: 其中,text_detector.auto_log.report()实际调用了AutoLogger.report()函数,根据输入的model信息和统计的时间、内存占用信息,规范化输出日志,输入日志格式如下:
![图片](./imgs/autolog_results.png) ![图片](./images/autolog_results.png)
4). 预测结果正确性校验 4). 预测结果正确性校验
...@@ -334,10 +334,10 @@ python_ppocr_det_mobile_results_fp16.txt ...@@ -334,10 +334,10 @@ python_ppocr_det_mobile_results_fp16.txt
python_ppocr_det_mobile_results_fp32.txt python_ppocr_det_mobile_results_fp32.txt
``` ```
假设在不同配置下可以得到一系列日志文件: 假设在不同配置下可以得到一系列日志文件:
![图片](./imgs/tipc_log_list.png) ![图片](./images/tipc_log_list.png)
配置文件中存放的有不同输入的预测结果: 配置文件中存放的有不同输入的预测结果:
![图片](./imgs/tipc_log_results.png) ![图片](./images/tipc_log_results.png)
因此,可以分别读取预测日志文件中的预测结果和保存在txt文件中的预测结果,验证两个结果是否是一致的。 因此,可以分别读取预测日志文件中的预测结果和保存在txt文件中的预测结果,验证两个结果是否是一致的。
...@@ -388,7 +388,7 @@ python版本 运行脚本和配置文件 参数1 参数2 参数3 ...@@ -388,7 +388,7 @@ python版本 运行脚本和配置文件 参数1 参数2 参数3
实际上,params.txt 中完成以上参数的设置,test_train_inference_python.sh 脚本根据params.txt中的配置组建出一条完整的运行命令。 实际上,params.txt 中完成以上参数的设置,test_train_inference_python.sh 脚本根据params.txt中的配置组建出一条完整的运行命令。
以文本检测样板间[ppocr_det_mobile/train_infer_python.txt](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/configs/ppocr_det_mobile_params.txt)为例,文件中前22行为训练相关的参数,如下图: 以文本检测样板间[ppocr_det_mobile/train_infer_python.txt](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/configs/ppocr_det_mobile_params.txt)为例,文件中前22行为训练相关的参数,如下图:
![图片](./imgs/train_infer_params.png) ![图片](./images/train_infer_params.png)
|行号 | 参数 | 参数介绍 | 对应PaddleSeg参数设置 | |行号 | 参数 | 参数介绍 | 对应PaddleSeg参数设置 |
|---|---|---|---| |---|---|---|---|
...@@ -438,7 +438,7 @@ null:null ...@@ -438,7 +438,7 @@ null:null
### 3.3 inference预测接入自动化测试 ### 3.3 inference预测接入自动化测试
inference 相关的参数在params.txt中的第27行到51行,如下图: inference 相关的参数在params.txt中的第27行到51行,如下图:
![](./imgs/train_infer_params_infer.png) ![](./images/train_infer_params_infer.png)
各行参数介绍和修改方式如下: 各行参数介绍和修改方式如下:
...@@ -523,7 +523,7 @@ status_check() 状态检查函数,获取上条指令运行的状态,如果 ...@@ -523,7 +523,7 @@ status_check() 状态检查函数,获取上条指令运行的状态,如果
``` ```
同一个模型要测试的组合可以通过一个txt文件管理,如下,构建了一个test_tipc/configs/ppocr_det_mobile/train_infer_python.txt文件 用于管理训练配置。 同一个模型要测试的组合可以通过一个txt文件管理,如下,构建了一个test_tipc/configs/ppocr_det_mobile/train_infer_python.txt文件 用于管理训练配置。
![](./imgs/train_infer_params_train.png) ![](./images/train_infer_params_train.png)
上述部分是test_train_inference_python.sh运行所需要的参数部分,包含正常训练脚本(第16行),量化训练执行脚本(17行),训练所需配置的参数(第4-10行) 上述部分是test_train_inference_python.sh运行所需要的参数部分,包含正常训练脚本(第16行),量化训练执行脚本(17行),训练所需配置的参数(第4-10行)
在执行test_train_inference_python.sh脚本执行的时候,会解析对应行的参数,如下: 在执行test_train_inference_python.sh脚本执行的时候,会解析对应行的参数,如下:
...@@ -575,14 +575,14 @@ echo $set_batchsize ...@@ -575,14 +575,14 @@ echo $set_batchsize
如果value为空格,或者null,则`func_set_params`返回的结果为空格,在组建命令的时候,这个参数就不会生效,因此,如果不希望设置某个参数,可以把参数设置为null。 如果value为空格,或者null,则`func_set_params`返回的结果为空格,在组建命令的时候,这个参数就不会生效,因此,如果不希望设置某个参数,可以把参数设置为null。
最终,所有参数可以组合出一个完整的命令,组合方式: 最终,所有参数可以组合出一个完整的命令,组合方式:
![](./imgs/train_infer_params_train_run.png) ![](./images/train_infer_params_train_run.png)
上图中273行即是组合出的命令,python对应python3.7, run_train 可以是`ppocr_det_mobile_params.txt`中的`norm_train``quant_train`参数后的执行脚本,即要执行正常训练的脚本还是执行量化训练的脚本等等。 上图中273行即是组合出的命令,python对应python3.7, run_train 可以是`ppocr_det_mobile_params.txt`中的`norm_train``quant_train`参数后的执行脚本,即要执行正常训练的脚本还是执行量化训练的脚本等等。
### 4.2 params.txt参数介绍汇总 ### 4.2 params.txt参数介绍汇总
文件链接 https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/configs/ppocr_det_mobile_params.txt 文件链接 https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/configs/ppocr_det_mobile_params.txt
![](./imgs/train_infer_params1.png) ![](./images/train_infer_params1.png)
![](./imgs/train_infer_params2.png) ![](./images/train_infer_params2.png)
![](./imgs/train_infer_params3.png) ![](./images/train_infer_params3.png)
### 4.4 Mac端接入TIPC测试 ### 4.4 Mac端接入TIPC测试
...@@ -598,7 +598,7 @@ echo $set_batchsize ...@@ -598,7 +598,7 @@ echo $set_batchsize
训练参数配置参考[链接](https://github.com/PaddlePaddle/PaddleOCR/blob/bc95e05de88dc7484bc2ed1bb11069455c49ec94/test_tipc/configs/ppocr_det_mobile/train_linux_cpu_normal_normal_infer_python_mac_cpu.txt?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L1-L26),如下: 训练参数配置参考[链接](https://github.com/PaddlePaddle/PaddleOCR/blob/bc95e05de88dc7484bc2ed1bb11069455c49ec94/test_tipc/configs/ppocr_det_mobile/train_linux_cpu_normal_normal_infer_python_mac_cpu.txt?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L1-L26),如下:
![图片](./imgs/mac_train_params.png) ![图片](./images/mac_train_params.png)
可以对比[Linux端参数配置](https://github.com/PaddlePaddle/PaddleOCR/blob/bc95e05de88dc7484bc2ed1bb11069455c49ec94/test_tipc/configs/ppocr_det_mobile/train_infer_python.txt?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L1-L26)发现二者的区别。 可以对比[Linux端参数配置](https://github.com/PaddlePaddle/PaddleOCR/blob/bc95e05de88dc7484bc2ed1bb11069455c49ec94/test_tipc/configs/ppocr_det_mobile/train_infer_python.txt?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L1-L26)发现二者的区别。
......
# 背景
基础训练文档对应Lite\_arm\_cpp预测功能测试,主程序为`test_inference_cpp.sh`, 可以在ARM上基于Lite预测库测试模型的C++推理功能。本文介绍Lite\_arm\_cpp预测功能测试文档的撰写规范。
# 文档规范
本文档和[基础训练预测文档]()大体结构类似,主要去掉了训练相关的部分,文档目录结构如下:
# 目录
- [1.测试结论汇总](#测试结论汇总)
- [2.测试流程](#测试流程)
- [2.1 功能测试](#功能测试)
- [2.1.1 基于ARM_CPU测试](#基于ARM_CPU测试)
- [2.1.1 基于ARM_GPU_OPENCL测试](#基于ARM_GPU_OPENCL测试)
- [2.2 运行结果](#运行结果)
- [3.更多教程](#更多教程)
<a name="测试结论汇总"></a>
## 1. 测试结论汇总
目前Lite端的样本间支持以方式的组合:
**字段说明:**
- 模型类型:包括正常模型(FP32)和量化模型(INT8)
- batch-size:包括1和4
- threads:包括1和4
- predictor数量:包括单predictor预测和多predictor预测
- 预测库来源:包括下载方式和编译方式
- 测试硬件:ARM\_CPU/ARM\_GPU_OPENCL
| 模型类型 | batch-size | threads | predictor数量 | 预测库来源 | 测试硬件 |
| :----: | :----: | :----: | :----: | :----: | :----: |
| 正常模型/量化模型 | 1 | 1/4 | 单/多 | 下载方式 | ARM\_CPU/ARM\_GPU_OPENCL |
<a name="测试流程"></a>
## 2. 测试流程
运行环境配置请参考[文档](./install.md)的内容配置TIPC的运行环境。
<a name="功能测试"></a>
### 2.1 功能测试
先运行`prepare_lite_cpp.sh`,运行后会在当前路径下生成`test_lite.tar`,其中包含了测试数据、测试模型和用于预测的可执行文件。将`test_lite.tar`上传到被测试的手机上,在手机的终端解压该文件,进入`test_lite`目录中,然后运行`test_lite_arm_cpp.sh`进行测试,最终在`test_lite/output`目录下生成`lite_*.log`后缀的日志文件。
<a name="基于ARM_CPU测试"></a>
#### 2.1.1 基于ARM\_CPU测试
```shell
# 数据和模型准备
bash test_tipc/prepare_lite_cpp.sh ./test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt
# 手机端测试:
bash test_lite_arm_cpp.sh model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt
```
<a name="基于ARM_GPU_OPENCL测试"></a>
#### 2.1.2 基于ARM\_GPU\_OPENCL测试
```shell
# 数据和模型准备
bash test_tipc/prepare_lite_cpp.sh ./test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_lite_cpp_arm_gpu_opencl.txt
# 手机端测试:
bash test_lite_arm_cpp.sh model_linux_gpu_normal_normal_lite_cpp_arm_gpu_opencl.txt
```
**注意**
1.由于运行该项目需要bash等命令,传统的adb方式不能很好的安装。所以此处推荐通在手机上开启虚拟终端的方式连接电脑,连接方式可以参考[安卓手机通过termux连接电脑](.https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/docs/termux_for_android.md)
2.如果测试文本检测和识别完整的pipeline,在执行`prepare_lite_cpp.sh`时,配置文件需替换为`test_tipc/configs/ppocr_system_mobile/model_linux_gpu_normal_normal_lite_cpp_arm_cpu.txt`。在手机端测试阶段,配置文件同样修改为该文件。
<a name="运行结果"></a>
### 2.2 运行结果
各测试的运行情况会打印在 `./output/` 中:
运行成功时会输出:
```
Run successfully with command - ./ocr_db_crnn det ch_PP-OCRv2_det_infer_opt.nb ARM_CPU FP32 1 1 ./test_data/icdar2015_lite/text_localization/ch4_test_images/ ./config.txt True > ./output/lite_ch_PP-OCRv2_det_infer_opt.nb_runtime_device_ARM_CPU_precision_FP32_batchsize_1_threads_1.log 2>&1!
Run successfully with command xxx
...
```
运行失败时会输出:
```
Run failed with command - ./ocr_db_crnn det ch_PP-OCRv2_det_infer_opt.nb ARM_CPU FP32 1 1 ./test_data/icdar2015_lite/text_localization/ch4_test_images/ ./config.txt True > ./output/lite_ch_PP-OCRv2_det_infer_opt.nb_runtime_device_ARM_CPU_precision_FP32_batchsize_1_threads_1.log 2>&1!
Run failed with command xxx
...
```
在./output/文件夹下,会存在如下日志,每一个日志都是不同配置下的log结果:
<img src="images/lite_log.png" width="1000">
在每一个log中,都会调用autolog打印如下信息:
<img src="images/lite_auto_log.png" width="1000">
<a name="更多教程"></a>
## 3. 更多教程
本文档为功能测试用,更详细的Lite端预测使用教程请参考:[Lite端部署](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/lite/readme.md)
# 目录
- [1.背景](#背景)
- [2.目录与命名规范](#目录与命名规范)
- [3.文档规范](#文档规范)
- [3.1 主文档规范](#主文档规范)
- [3.2 子文档规范](#子文档规范)
<a name="背景"></a>
# 1. 背景
各代码仓库完成TIPC训推一体认证工具开发后,同时需要提供相应的**TIPC测试文档**,方便用户查阅每种模型的推理部署打通情况,并可以按照教程进行一键测试。
本文将**TIPC测试文档**的书写格式进行规范化,分为`目录规范``文档规范`两部分。
<a name="目录与命名规范"></a>
# 2. 目录与命名规范
**训推一体认证(Training and Inference Pipeline Certification(TIPC))工具目录统一命名为`test_tipc`**,位于代码仓库根目录下,下面以[PaddleOCR样板间](https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/test_tipc)为例说明目录结构规范。
```
test_tipc/
├── configs/ # 配置文件目录
├── ppocr_det_mobile # ppocr_det_mobile模型的测试配置文件目录
├── det_mv3_db.yml # 测试mobile版ppocr检测模型训练的yml文件
├── train_infer_python.txt.txt # 测试Linux上python训练预测(基础训练预测)的配置文件
├── model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt # 测试Linux上c++预测的配置文件
├── model_linux_gpu_normal_normal_infer_python_jetson.txt # 测试Jetson上python预测的配置文件
├── train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt # 测试Linux上多机多卡、混合精度训练和python预测的配置文件
├── ...
├── ppocr_det_server # ppocr_det_server模型的测试配置文件目录
├── ...
├── ppocr_rec_mobile # ppocr_rec_mobile模型的测试配置文件目录
├── ...
├── ppocr_rec_server # ppocr_rec_server模型的测试配置文件目录
├── ...
├── ...
├── results/ # 预先保存的预测结果,用于和实际预测结果进行精读比对
├── python_ppocr_det_mobile_results_fp32.txt # 预存的mobile版ppocr检测模型python预测fp32精度的结果
├── python_ppocr_det_mobile_results_fp16.txt # 预存的mobile版ppocr检测模型python预测fp16精度的结果
├── cpp_ppocr_det_mobile_results_fp32.txt # 预存的mobile版ppocr检测模型c++预测的fp32精度的结果
├── cpp_ppocr_det_mobile_results_fp16.txt # 预存的mobile版ppocr检测模型c++预测的fp16精度的结果
├── ...
├── prepare.sh # 完成test_*.sh运行所需要的数据和模型下载
├── test_train_inference_python.sh # 测试python训练预测的主程序
├── test_inference_cpp.sh # 测试c++预测的主程序
├── test_serving.sh # 测试serving部署预测的主程序
├── test_lite_arm_cpu_cpp.sh # 测试lite在arm_cpu上部署的C++预测的主程序
├── compare_results.py # 用于对比log中的预测结果与results中的预存结果精度误差是否在限定范围内
└── readme.md # 使用文档
```
主要关注:
1. 所有工具位于`test_tipc`目录下,`test_tipc`目录位于代码仓库根目录下;
2. `results`目录存放精度测试所需的gt文件;
3. `doc`目录存放readme.md以外的其他子文档;
4. `prepare.sh`用于准备测试所需的模型、数据等;
5. `test_*.sh`为测试主程序,按照功能分为多个文件,命名格式为`test_[功能]_[语言].sh`
6. `configs`目录存放测试所需的所有配置文件,该目录下,按模型名称划分为子目录,子目录中存放所有该模型测试需要用到的配置文件,配置文件的命名遵循如下规范:
- 基础训练预测配置简单命名为:`train_infer_python.txt`,表示**Linux环境下单机、不使用混合精度训练+python预测**,其完整命名对应`train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt`,由于本配置文件使用频率较高,这里进行了名称简化。
- 其他带训练配置命名格式为:`train_训练硬件环境(linux_gpu/linux_dcu/…)_是否多机(fleet/normal)_是否混合精度(amp/normal)_预测模式(infer/lite/serving/js)_语言(cpp/python/java)_预测硬件环境(linux_gpu/mac/jetson/opencl_arm_gpu/...).txt`。如,linux gpu下多机多卡+混合精度链条测试对应配置 `train_linux_gpu_fleet_amp_infer_python_linux_gpu_cpu.txt`,linux dcu下基础训练预测对应配置 `train_linux_dcu_normal_normal_infer_python_dcu.txt`
- 仅预测的配置(如serving、lite等)命名格式:`model_训练硬件环境(linux_gpu/linux_dcu/…)_是否多机(fleet/normal)_是否混合精度(amp/normal)_(infer/lite/serving/js)_语言(cpp/python/java)_预测硬件环境(linux_gpu/mac/jetson/opencl_arm_gpu/...).txt`,即,与2相比,仅第一个字段从train换为model,测试时模型直接下载获取,这里的“训练硬件环境”表示所测试的模型是在哪种环境下训练得到的。
<a name="文档规范"></a>
# 3. 文档规范
<a name="主文档规范"></a>
## 3.1 主文档规范
文档按以下格式进行撰写:
**推理部署导航**
**1. 简介**
- 内容:主要说明背景,各代码仓库应该差异不大。
- 示例:![](images/tipc_guide.png)
**2. 汇总信息**
- 内容:给出代码仓库所有模型的预测部署打通情况汇总信息,表格形式呈现,须包含`算法论文``模型名称``基础训练预测``更多训练方式``模型压缩``其他预测部署`这6个必选字段。
- 算法论文:该模型对应的算法,可以是算法简称;
- 模型名称:与代码仓库提供模型的名称对应;
- 基础训练预测:基础功能的支持情况,包括模型训练、Paddle Inference Python预测的支持情况,是所有代码仓库所有模型必须支持的功能。本字段有`"支持"``空缺`两种取值。
- 更多训练方式:包括多机多卡、混合精度。
- 模型压缩:包括裁剪、离线/在线量化、蒸馏。
- 其他预测部署:补充功能的支持情况,包括Paddle Inference C++预测、Paddle Serving部署、Paddle-Lite部署等,是各代码仓库可选支持的功能。填入已支持的功能,尚未支持的不填即可。支持的功能后注明硬件(lite相关)、语言等信息。
- 示例:![](images/tipc_table.png)
- **注意**:表格内填“支持“或填入了信息均表示可以使用本工具进行一键测试,代码仓库已支持但尚未接入测试的,都算还不支持,不应填写。
**3. 一键测试工具使用**
目录介绍:测试工具树状图,介绍各目录/文件的功能,示例:
![图片](images/tipc_dir_tree.png)
测试流程:测试流程整体说明,可参考[PaddleOCR样板间](https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/test_tipc#%E6%B5%8B%E8%AF%95%E6%B5%81%E7%A8%8B)
![图片](images/tipc_test_pipeline.png)
**最后需给出跳转链接,到每个test_*.sh的子文档**,如:
![图片](images/tipc_more_tutorial.png)
<a name="子文档规范"></a>
## 3.2 子文档规范
请参考子文档规范文档:
- [基础训练预测测试文档规范]()
- [cpp预测测试文档规范]()
- [serving测试文档规范]()
- [lite测试文档规范]()
# 背景
基础训练文档对应C++预测功能测试,主程序为`test_inference_cpp.sh`。本文介绍C++预测功能测试文档的撰写规范。
# 文档规范
本文档和[基础训练预测文档]()大体结构类似,主要去掉了训练相关的部分,文档目录结构如下:
### 1.测试结论汇总
内容:基于训练是否使用量化,可以将训练产出的模型可以分为`正常模型``量化模型`,表格形式给出这两类模型对应的预测功能汇总情况,包含`模型类型``device``batchsize``tensorrt``mkldnn``cpu多线程`这6个字段。
- 模型类型:“正常模型”或“量化模型”;
- device:CPU或GPU,其他字段取值对应本字段指定的环境;
- batchsize:一般包括1、6两种batchsize,根据实际支持情况填写。
- tensorrt:开启tensorrt支持的精度,包括`fp32``fp16``int8`三种,当device为CPU时,本字段填`-`
- mkldnn:开启mkldnn支持的精度,包括`fp32``fp16``int8`三种,当device为GPU时,本字段填`-`
- cpu多线程:支持时填`支持`,不支持时留空即可,当device为GPU时,本字段填`-`
示例:
![](images/tipc_cpp_infer_table.png)
### 2.测试流程
#### 2.1 功能测试
内容1:给出C++预测具体测试命令。
示例:
![](images/tipc_cpp_infer_shell.png)
内容2:给出预测log的解读指引。
示例:
![](images/tipc_cpp_infer_output.png)
#### 2.2 精度测试
内容:给出精度测试的具体命令和运行结果示例。
示例:
![](images/tipc_infer_compare_results.png)
### 3.更多教程
内容:给出代码仓库中基础训练预测的具体教程链接。
示例:
![](images/tipc_cpp_infer_more.png)
## 背景
Paddle2ONNX 预测功能测试的主程序为 `test_paddle2onnx.sh`,可以测试基于 Paddle2ONNX 的部署功能。本文介绍 Paddle2ONNX 预测功能测试文档的撰写规范。
## 文档规范
本文档和[基础训练预测文档](todo:add_basic_link)大体结构类似,主要去掉了训练相关的部分,文档目录结构如下:
### 1.测试结论汇总
内容:基于训练是否使用量化,可以将训练产出的模型可以分为`正常模型``量化模型`,表格形式给出这两类模型对应的预测功能汇总情况,包含`模型类型``device`这2个字段。
- device:CPU 或 GPU,其他字段取值对应本字段指定的环境;
示例:
| 模型类型 |device |
| ---- | ---- |
| 正常模型 | GPU |
| 正常模型 | CPU |
| 量化模型 | GPU |
| 量化模型 | CPU |
### 2.测试流程
#### 2.1 功能测试
内容:给出 Paddle2ONNX 预测具体测试命令。
示例:
先运行`prepare.sh`准备数据和模型,然后运行`test_paddle2onnx.sh`进行测试,最终在```test_tipc/output```目录下生成`paddle2onnx_infer_*.log`后缀的日志文件。
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_paddle2onnx_python_linux_cpu.txt "paddle2onnx_infer"
# 用法:
bash test_tipc/test_paddle2onnx.sh ./test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_paddle2onnx_python_linux_cpu.txt
```
#### 运行结果
各测试的运行情况会打印在 `test_tipc/output/results_paddle2onnx.log` 中:
运行成功时会输出:
```
Run successfully with command - paddle2onnx --model_dir=./inference/ch_ppocr_mobile_v2.0_det_infer/ --model_filename=inference.pdmodel --params_filename=inference.pdiparams --save_file=./inference/det_mobile_onnx/model.onnx --opset_version=10 --enable_onnx_checker=True!
Run successfully with command - python test_tipc/onnx_inference/predict_det.py --use_gpu=False --image_dir=./inference/ch_det_data_50/all-sum-510/ --det_model_dir=./inference/det_mobile_onnx/model.onnx 2>&1 !
```
运行失败时会输出:
```
Run failed with command - paddle2onnx --model_dir=./inference/ch_ppocr_mobile_v2.0_det_infer/ --model_filename=inference.pdmodel --params_filename=inference.pdiparams --save_file=./inference/det_mobile_onnx/model.onnx --opset_version=10 --enable_onnx_checker=True!
...
```
#### 2.2 精度测试
由于 Paddle2ONNX 调用了 onnx 预测,因此不做精度对比。
# 背景
基础训练文档对应基础训练预测功能测试,主程序为`test_train_inference_python.sh`。本文介绍基础训练预测在Linux端,Mac端,Windows端,Jeston端的使用方法。
# 文档规范
本文档为TIPC的基础训练预测功能测试文档。包含linux端,Mac端,Windows端,jeston端的测试方法。
### 1.基础训练预测规范
基础训练预测工具测试的功能包括训练和Python预测两部分,汇总结论也分为`训练相关``预测相关`两部分。
下面以[PaddleOCR样板间](https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/test_tipc)为例说明目录结构规范。
```shell
test_tipc/
├── configs/ # 配置文件目录
├── ppocr_det_mobile/ # ppocr检测模型mobile版本的配置文件和参数文件夹
├── det_mv3_db.yml # 测试mobile版ppocr检测模型训练的yml文件
├── train_infer_python.txt. # 测试mobile版ppocr检测模型训练+预测的参数配置文件
├── train_linux_cpu_normal_normal_infer_python_mac.txt # Mac端测试mobile版ppocr检测模型的参数配置文件
├── train_linux_gpu_normal_normal_infer_python_windows.txt # Windows端测试mobile版ppocr检测模型的参数配置文件
├── model_linux_gpu_normal_normal_infer_python_jetson.txt # Jeston端测试mobile版ppocr检测模型的参数配置文件
├── ...
├── results/ # 预先保存的预测结果,用于和实际预测结果进行精读比对
├── python_ppocr_det_mobile_results_fp32.txt # 预存的mobile版ppocr检测模型python预测fp32精度的结果
├── python_ppocr_det_mobile_results_fp16.txt # 预存的mobile版ppocr检测模型python预测fp16精度的结果
├── cpp_ppocr_det_mobile_results_fp32.txt # 预存的mobile版ppocr检测模型c++预测的fp32精度的结果
├── cpp_ppocr_det_mobile_results_fp16.txt # 预存的mobile版ppocr检测模型c++预测的fp16精度的结果
├── ...
├── prepare.sh # 完成test_*.sh运行所需要的数据和模型下载
├── test_train_inference_python.sh # 测试python训练预测的主程序
├── test_inference_cpp.sh # 测试c++预测的主程序
├── test_serving.sh # 测试serving部署预测的主程序
├── test_lite.sh # 测试lite部署预测的主程序
├── compare_results.py # 用于对比log中的预测结果与results中的预存结果精度误差是否在限定范围内
└── readme.md # 使用文档
```
主要关注:
1. 所有工具位于`test_tipc`目录下,`test_tipc`目录位于套件根目录下;
2. `configs`目录存放测试所需的所有配置文件;
2. `results`目录存放精度测试所需的gt文件;
3. `doc`目录存放readme.md以外的其他子文档;
4. `prepare.sh`用于准备测试所需的模型、数据等;
5. `test_*.sh`为测试主程序,按照功能分为多个文件,命名格式为`test_[功能]_[语言].sh`
(1)训练相关
内容:给出套件所有模型的基础训练预测打通情况汇总信息,表格形式呈现,须包含`算法名称``模型名称``单机单卡``单机多卡``多机多卡``模型压缩(单机多卡)`这6个字段。
- 算法名称:该模型对应的算法,可以是算法简称;
- 模型名称:与套件提供模型的名称对应;
- 单机单卡:单机单卡训练的支持情况,包括`正常训练``混合精度`两种模式,支持哪种模式就填写哪种。
- 单机多卡:同上。
- 多机多卡:同上。
- 模型压缩(单机多卡):单机多卡模式下,支持的模型压缩算法,分别给出`正常训练``混合精度``离线量化`三种情况的模型压缩算法支持情况。
示例:
| 算法名称 | 模型名称 | 单机单卡 | 单机多卡 | 多机多卡 | 模型压缩(单机多卡) |
| :---- | :---- | :---- | :---- | :---- | :---- |
| DB | ch_ppocr_mobile_v2.0_det| 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练:FPGM裁剪、PACT量化 <br> 离线量化(无需训练) |
| DB | ch_ppocr_server_v2.0_det| 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练:FPGM裁剪、PACT量化 <br> 离线量化(无需训练) |
| CRNN | ch_ppocr_mobile_v2.0_rec| 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练:PACT量化 <br> 离线量化(无需训练) |
| CRNN | ch_ppocr_server_v2.0_rec| 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练:PACT量化 <br> 离线量化(无需训练) |
|PP-OCR| ch_ppocr_mobile_v2.0| 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | - |
|PP-OCR| ch_ppocr_server_v2.0| 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | - |
|PP-OCRv2| ch_PP-OCRv2 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | 正常训练 <br> 混合精度 | - |
(2)预测相关
内容:基于训练是否使用量化,可以将训练产出的模型可以分为`正常模型``量化模型`,表格形式给出这两类模型对应的预测功能汇总情况,包含`模型类型``device``batchsize``tensorrt``mkldnn``cpu多线程`这6个字段。
- 算法名称:该模型对应的算法,可以是算法简称;
- device:CPU或GPU,其他字段取值对应本字段指定的环境;
- batchsize:一般包括1、6两种batchsize,根据实际支持情况填写。
- tensorrt:开启tensorrt支持的精度,包括`fp32``fp16``int8`三种,当device为CPU时,本字段填`-`
- mkldnn:开启mkldnn支持的精度,包括`fp32``fp16``int8`三种,当device为GPU时,本字段填`-`
- cpu多线程:支持时填`支持`,不支持时留空即可,当device为GPU时,本字段填`-`
基于训练是否使用量化,可以将训练产出的模型可以分为`正常模型``量化模型`,这两类模型对应的预测功能汇总如下:
| 模型类型 |device | batchsize | tensorrt | mkldnn | cpu多线程 |
| ---- | ---- | ---- | :----: | :----: | :----: |
| 正常模型 | GPU | 1/6 | fp32/fp16 | - | - |
| 正常模型 | CPU | 1/6 | - | fp32/fp16 | 支持 |
| 量化模型 | GPU | 1/6 | int8 | - | - |
| 量化模型 | CPU | 1/6 | - | int8 | 支持 |
### 2.测试流程
#### 2.1 安装依赖
安装测试本功能所需的依赖,包括`autolog`工具和PaddleSlim。
[autolog](https://github.com/LDOUBLEV/AutoLog)是一个辅助工具,用户规范化打印inference的输出结果。
autolog安装方式如下,参考文档:https://github.com/LDOUBLEV/AutoLog
```
git clone https://github.com/LDOUBLEV/AutoLog
pip3 install -r requirements.txt
python3 setup.py bdist_wheel
pip3 install ./dist/auto_log-1.0.0-py3-none-any.whl
```
PaddleSlim安装方式如下,参考文档https://github.com/PaddlePaddle/PaddleSlim:
```
pip3 install paddleslim
```
#### 2.2 Linux端功能测试
内容:分别给出5种模式下的具体测试命令。
参考文档:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/docs/test_train_inference_python.md#22-%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95
示例:
先运行`prepare.sh`准备数据和模型,然后运行`test_train_inference_python.sh`进行测试,最终在```test_tipc/output```目录下生成`python_infer_*.log`格式的日志文件。
`test_train_inference_python.sh`包含5种运行模式,每种模式的运行数据不同,分别用于测试速度和精度,分别是:
- 模式1:lite_train_lite_infer,使用少量数据训练,用于快速验证训练到预测的走通流程,不验证精度和速度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'lite_train_lite_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'lite_train_lite_infer'
```
- 模式2:lite_train_whole_infer,使用少量数据训练,一定量数据预测,用于验证训练后的模型执行预测,预测速度是否合理;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'lite_train_whole_infer'
bash test_tipc/test_train_inference_python.sh ../test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'lite_train_whole_infer'
```
- 模式3:whole_infer,不训练,全量数据预测,走通开源模型评估、动转静,检查inference model预测时间和精度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'whole_infer'
# 用法1:
bash test_tipc/test_train_inference_python.sh ../test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'whole_infer'
# 用法2: 指定GPU卡预测,第三个传入参数为GPU卡号
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'whole_infer' '1'
```
- 模式4:whole_train_whole_infer,CE: 全量数据训练,全量数据预测,验证模型训练精度,预测精度,预测速度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'whole_train_whole_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'whole_train_whole_infer'
```
- 模式5:klquant_whole_infer,测试离线量化;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'klquant_whole_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_infer_python.txt 'klquant_whole_infer'
```
运行相应指令后,在`test_tipc/output`文件夹下自动会保存运行日志。如'lite_train_lite_infer'模式下,会运行训练+inference的链条,因此,在`test_tipc/output`文件夹有以下文件:
```
test_tipc/output/
|- results_python.log # 运行指令状态的日志
|- norm_train_gpus_0_autocast_null/ # GPU 0号卡上正常训练的训练日志和模型保存文件夹
|- pact_train_gpus_0_autocast_null/ # GPU 0号卡上量化训练的训练日志和模型保存文件夹
......
|- python_infer_cpu_usemkldnn_True_threads_1_batchsize_1.log # CPU上开启Mkldnn线程数设置为1,测试batch_size=1条件下的预测运行日志
|- python_infer_gpu_usetrt_True_precision_fp16_batchsize_1.log # GPU上开启TensorRT,测试batch_size=1的半精度预测日志
......
```
#### 2.3. MAC端功能测试
Mac端不包含GPU,并且CPU不支持mkldnn预测,因此在Mac端无需测试tipc中关于GPU和mkldnn相关的部分。
为了方便Mac端功能测试,把需要测试的功能拆分为了新的参数文件`./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt`
除了修改配置文件之外,其余测试方法同2.1节的功能测试方法:
先运行`prepare.sh`准备数据和模型,然后运行`test_train_inference_python.sh`进行测试,最终在```test_tipc/output```目录下生成`python_infer_*.log`格式的日志文件。
`test_train_inference_python.sh`包含5种运行模式,每种模式的运行数据不同,分别用于测试速度和精度,分别是:
- 模式1:lite_train_lite_infer,使用少量数据训练,用于快速验证训练到预测的走通流程,不验证精度和速度;
```shell
# 同linux端运行不同的是,Mac端测试使用新的配置文件mac_ppocr_det_mobile_params.txt,
# 配置文件中默认去掉了GPU和mkldnn相关的测试链条
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'lite_train_lite_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'lite_train_lite_infer'
```
- 模式2:lite_train_whole_infer,使用少量数据训练,一定量数据预测,用于验证训练后的模型执行预测,预测速度是否合理;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'lite_train_whole_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'lite_train_whole_infer'
```
- 模式3:whole_infer,不训练,全量数据预测,走通开源模型评估、动转静,检查inference model预测时间和精度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'whole_infer'
# 用法1:
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'whole_infer'
# 用法2: 指定GPU卡预测,第三个传入参数为GPU卡号
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'whole_infer' '1'
```
- 模式4:whole_train_whole_infer,CE: 全量数据训练,全量数据预测,验证模型训练精度,预测精度,预测速度;(Mac端不建议运行此模式)
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'whole_train_whole_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'whole_train_whole_infer'
```
- 模式5:klquant_whole_infer,测试离线量化;
```shell
bash test_tipc/prepare.sh ./test_tipc/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'klquant_whole_infer'
bash test_tipc/test_train_inference_python.sh test_tipc/configs/ppocr_det_mobile/train_mac_cpu_normal_normal_infer_python_mac_cpu.txt 'klquant_whole_infer'
```
#### 2.4 Windows端功能测试
windows端的功能测试同Linux端,为了方便区分Windows端功能测试,把需要测试的功能拆分为了新的参数文件`./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt`
除了修改配置文件之外,其余测试方法同2.1节的功能测试方法。
先运行`prepare.sh`准备数据和模型,然后运行`test_train_inference_python.sh`进行测试,最终在```test_tipc/output```目录下生成`python_infer_*.log`格式的日志文件。
`test_train_inference_python.sh`包含5种运行模式,每种模式的运行数据不同,分别用于测试速度和精度,分别是:
- 模式1:lite_train_lite_infer,使用少量数据训练,用于快速验证训练到预测的走通流程,不验证精度和速度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'lite_train_lite_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'lite_train_lite_infer'
```
- 模式2:lite_train_whole_infer,使用少量数据训练,一定量数据预测,用于验证训练后的模型执行预测,预测速度是否合理;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'lite_train_whole_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'lite_train_whole_infer'
```
- 模式3:whole_infer,不训练,全量数据预测,走通开源模型评估、动转静,检查inference model预测时间和精度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'whole_infer'
# 用法1:
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'whole_infer'
# 用法2: 指定GPU卡预测,第三个传入参数为GPU卡号
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'whole_infer' '1'
```
- 模式4:whole_train_whole_infer,CE: 全量数据训练,全量数据预测,验证模型训练精度,预测精度,预测速度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'whole_train_whole_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'whole_train_whole_infer'
```
- 模式5:klquant_whole_infer,测试离线量化;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'klquant_whole_infer'
bash test_tipc/test_train_inference_python.sh test_tipc/configs/ppocr_det_mobile/train_windows_gpu_normal_normal_infer_python_windows_cpu_gpu.txt 'klquant_whole_infer'
```
#### 2.5 Jeston端功能测试
Jeston产品是Nvidia推出的开发者套件,用于部署AI模型。Jeston系列的产品有Jeston Nano, TX,NX等等。本节以PaddleOCR检测模型和JestonNX为例,介绍如何在Jeston上接入TIPC预测推理的测试。
Jeston的CPU性能远差于笔记本或者台式机,因此在Jeston上,只需要测试GPU上预测相关的链条即可,包括GPU预测,GPU+TensorRT(fp32),GPU+TensorRT(fp16)预测。
Jeston上无需测试TIPC训练部分,仅需要测试预测推理部分即可,因此,仅需要测试inferenc部分。
jeston 的测试脚本为`test_inference_jeston.sh`,测试方法如下:
- 模式3:whole_infer,不训练,全量数据预测,走通开源模型评估、动转静,检查inference model预测时间和精度;
```shell
bash test_tipc/prepare.sh ./test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_infer_python_jetson.txt 'whole_infer'
# 用法1:
bash test_tipc/test_inference_jeston.sh ./test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_infer_python_jetson.txt 'whole_infer'
```
#### 2.6 精度测试
使用compare_results.py脚本比较模型预测的结果是否符合预期,主要步骤包括:
- 提取日志中的预测坐标;
- 从本地文件中提取保存好的坐标结果;
- 比较上述两个结果是否符合精度预期,误差大于设置阈值时会报错。
运行命令:
```shell
python3.7 test_tipc/compare_results.py --gt_file=./test_tipc/results/python_*.txt --log_file=./test_tipc/output/python_*.log --atol=1e-3 --rtol=1e-3
```
参数介绍:
- gt_file: 指向事先保存好的预测结果路径,支持*.txt 结尾,会自动索引*.txt格式的文件,文件默认保存在test_tipc/result/ 文件夹下
- log_file: 指向运行test_tipc/test_train_inference_python.sh 脚本的infer模式保存的预测日志,预测日志中打印的有预测结果,比如:文本框,预测文本,类别等等,同样支持python_infer_*.log格式传入
- atol: 设置的绝对误差
- rtol: 设置的相对误差
运行结果:
正常运行效果如下:
```
Assert allclose passed! The results of python_infer_cpu_usemkldnn_False_threads_1_batchsize_1.log and ./test_tipc/results/python_ppocr_det_mobile_results_fp32.txt are consistent!
```
出现不一致结果时的运行输出:
```
......
Traceback (most recent call last):
File "test_tipc/compare_results.py", line 140, in <module>
format(filename, gt_filename))
ValueError: The results of python_infer_cpu_usemkldnn_False_threads_1_batchsize_1.log and the results of ./test_tipc/results/python_ppocr_det_mobile_results_fp32.txt are inconsistent!
```
**目录**
- [背景](#--)
- [文档规范](#----)
* [1.测试结论汇总](#1------)
* [2.测试流程](#2----)
+ [2.1 功能测试](#21-----)
+ [2.2 精度测试](#22-----)
# 背景
PaddleServing 预测功能测试的主程序为 `test_serving.sh`,可以测试基于 PaddleServing 的部署功能。本文介绍 PaddleServing 预测功能测试文档的撰写规范。
# 文档规范
本文档和基础训练预测文档大体结构类似,主要去掉了训练相关的部分。
## 1.测试结论汇总
内容:基于训练是否使用量化,可以将训练产出的模型可以分为`正常模型``量化模型`,表格形式给出这两类模型对应的预测功能汇总情况,包含`模型类型``device``batchsize``tensorrt``mkldnn``cpu多线程`这6个字段。
- 算法名称:该模型对应的算法,可以是算法简称;
- device:CPU 或 GPU,其他字段取值对应本字段指定的环境;
- batchsize:一般包括1、6两种 batchsize,根据实际支持情况填写。
- tensorrt:开启 tensorrt 支持的精度,包括`fp32``fp16``int8`三种,当 device 为 CPU 时,本字段填`-`
- mkldnn:开启 mkldnn 支持的精度,包括`fp32``fp16``int8`三种,当 device 为 GPU 时,本字段填`-`
- cpu多线程:支持时填`支持`,不支持时留空即可,当 device 为 GPU 时,本字段填`-`
示例:
| 模型类型 |device | batchsize | tensorrt | mkldnn | cpu多线程 |
| ---- | ---- | ---- | :----: | :----: | :----: |
| 正常模型 | GPU | 1/6 | fp32/fp16 | - | - |
| 正常模型 | CPU | 1/6 | - | fp32 | 支持 |
| 量化模型 | GPU | 1/6 | int8 | - | - |
| 量化模型 | CPU | 1/6 | - | int8 | 支持 |
## 2.测试流程
### 2.1 功能测试
内容:给出 PaddleServing 预测具体测试命令。
示例:
![图片](images/tipc_serving_model.jpg)
### 2.2 精度测试
由于 PaddleServing 调用了 python inference 预测,因此不做精度对比。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册