diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/cpp\351\242\204\346\265\213\346\265\213\350\257\225\345\274\200\345\217\221\350\247\204\350\214\203.md" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/cpp\351\242\204\346\265\213\346\265\213\350\257\225\345\274\200\345\217\221\350\247\204\350\214\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..33a373141ec7625a81a5c56b7f516b814d8466ba --- /dev/null +++ "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/cpp\351\242\204\346\265\213\346\265\213\350\257\225\345\274\200\345\217\221\350\247\204\350\214\203.md" @@ -0,0 +1,225 @@ +# C++预测测试开发规范 + +## 目录 +- [0.概述](#概述) +- [1.总览](#总览) + - [1.1 全链条自动化测试](#全链条自动化测试) + - [1.2 文本检测样板间概览](#文本检测样板间概览) +- [2.全链条规范接入流程](#全链条规范接入流程) + - [2.1 规范化输出预测日志](#规范化输出预测日志) + - [2.2 准备测试模型和数据](#准备测试模型和数据) + - [2.3 编写自动化测试代码](#编写自动化测试代码) +- [3.附录:自动化测试脚本test_inference_cpp.sh 函数介绍](#附录) + + +## 0. 概述 +训推一体认证(TIPC)旨在监控框架代码更新可能导致的**模型训练、预测报错、性能下降**等问题。本文主要介绍TIPC中**C++预测测试**的接入规范和监测点,是在[基础测试]()上针对C++测试的补充说明。 + +主要监控的内容有: + +- 飞桨框架更新后,代码仓库模型的C++预测是否能正常走通;(比如API的不兼容升级) +- 飞桨框架更新后,代码仓库模型的C++预测速度是否合理; + +为了能监控上述问题,希望把代码仓库模型的C++预测测试加到飞桨框架的CI和CE中,提升PR合入的质量。因此,需要在代码仓库中加入运行脚本(不影响代码仓库正常运行),完成模型的自动化测试。 + +可以建立的CI/CE机制包括: + + 1. **全量数据走通开源模型C++预测,并验证模型预测速度和精度是否符合设定预期;(单模型30分钟内)** + a. 保证预测结果正确,预测速度符合预期(QA添加中) + +注:由于CI有时间限制,所以在测试的时候需要限制运行时间,所以需要构建一个很小的数据集完成测试。 + + +## 1. 总览 + +### 1.1 全链条自动化测试 + +本规范测试的链条如下(其中相邻两个模块之间是两两组合关系),可以根据代码仓库需要,适当删减链条。 +![](images/tipc_cpp_infer.png) + +上图各模块具体测试点如下: + +- slim模型选型方面: + - **非量化模型(必选)** + - 量化模型(可选) +- Paddle C++ inference 预测部署方面: + - **Linux GPU上不同batchsize,是否开启TensorRT,不同预测精度(FP32,FP16,INT8)的运行状态(必选)** + - **Linux CPU上不同batchsize,是否开启MKLDNN,不同预测精度(FP32,FP16,INT8)的运行状态(必选)** + - Win GPU,macOS CPU和Win CPU(可选) + +### 1.2 文本检测样板间概览 + +在PaddleOCR中,以文本检测为例,提供了本规范的样板间,可以完成概述部分提到的1种CI/CE机制。 + +C++预测测试工具位于PaddleOCR dygraph分支下的[test_tipc目录](https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/test_tipc),与C++预测样板间相关的主要文件如下: + +``` +test_tipc/ +├── configs/ # 配置文件目录 + ├── ppocr_det_mobile # ppocr_det_mobile模型的测试配置文件目录 + ├── model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt # 测试Linux上c++预测的配置文件 +├── results/ # 预先保存的预测结果,用于和实际预测结果进行精读比对 + ├── 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_inference_cpp.sh # 测试c++预测的主程序 +├── compare_results.py # 用于对比log中的预测结果与results中的预存结果精度误差是否在限定范围内 +└── readme.md # 使用文档 +``` + +不同代码仓库的`configs`和`results`目录下的内容可根据实际情况进行调整。 + +配置文件`model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt`需满足[TIPC配置文件命名规范](https://github.com/PaddlePaddle/PaddleOCR/tree/dygraph/test_tipc#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83)。 + + +## 2. C++预测接入TIPC流程 +C++预测接入TIPC包含如下三个步骤,接下来将依次介绍这三个部分。 + + - 规范化输出预测日志 + - 准备测试模型和数据 + - 编写自动化测试代码 + + + +### 2.1 规范化输出预测日志 +类似于python预测等基础测试,C++预测测试也需要规范不同代码仓库中Paddle Inference预测输出的格式,方便QA统一自动化测试。针对C++的预测log规范输出工具也已集成到[AutoLog工具包](https://github.com/LDOUBLEV/AutoLog)。 + +C++测试要求规范输出预测结果及以下信息: + +- 运行的硬件,CPU还是GPU +- 运行配置信息,是否开启了IR 优化、TRT、MKLDNN,以及具体使用的线程数 +- 运行的模型名称 +- 运行的数据信息,包括batch size,数据量 +- 性能信息,inference 各阶段平均预测时间 +- 单张图片的预测结果 + +代码主要修改有三步:编译中引入auto_log类,预测耗时打点和打印输出信息。 + +1.在`external-cmake`目录中引入日志打印工具[`autolog`](https://github.com/LDOUBLEV/AutoLog/blob/main/auto_log/autolog.h),并在`CMakeLists.txt`中进行配置。 + +`external-cmake/auto-log.cmake`内容如下,[查看完整源码](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/cpp_infer/external-cmake/auto-log.cmake): +``` +find_package(Git REQUIRED) +include(FetchContent) + +set(FETCHCONTENT_BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/third-party") + +FetchContent_Declare( + extern_Autolog + PREFIX autolog + GIT_REPOSITORY https://github.com/LDOUBLEV/AutoLog.git + GIT_TAG main +) +FetchContent_MakeAvailable(extern_Autolog) +``` + +在`CMakeLists.txt`中进行配置,[查看完整源码](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/cpp_infer/CMakeLists.txt#L210): +``` +include(FetchContent) +include(external-cmake/auto-log.cmake) +include_directories(${FETCHCONTENT_BASE_DIR}/extern_autolog-src) +``` + +2.添加预测耗时打点: + +(1)在模型预测中,统计前处理,预测,后处理时间,可参考[代码](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/cpp_infer/src/ocr_det.cpp#L171)。 +(2)在main函数中使用autolog工具打印日志,参考[代码](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/cpp_infer/src/main.cpp#L122)。主要包括: + +- 引入头文件: +``` +#include "auto_log/autolog.h" +``` + +- 调用AutoLogger类打印日志: +``` + if (FLAGS_benchmark) { + AutoLogger autolog("ocr_det", + FLAGS_use_gpu, + FLAGS_use_tensorrt, + FLAGS_enable_mkldnn, + FLAGS_cpu_threads, + 1, + "dynamic", + FLAGS_precision, + time_info, + cv_all_img_names.size()); + autolog.report(); + } +``` + +3.打印输出信息: +按照上述两步添加预测耗时打点和日志打印工具后,运行程序可打印出如下格式日志: +![](images/tipc_cpp_infer_log.png) + + +4.预测结果格式规范化: +(1)预先保存预测结果,作为校验预测结果是否正确的groundtruth。预测结果可以保存为两个,分别是FP32精度下预测的输入,和FP16预测精度下的输出结果。以OCR 为例,在`PaddleOCR/test_tipc/results`文件夹下存放了两个txt文件,分别是: +``` +cpp_ppocr_det_mobile_results_fp32.txt +cpp_ppocr_det_mobile_results_fp16.txt +``` +里面按行存储每张测试图片的预测结果,格式如下: +![](images/tipc_cpp_infer_gt.png) + +(2)在运行日志中打印预测结果,或者保存在txt文件中,确保可以用python加载到输出并和预先保存的预测的结果进行对比。以PP-OCR检测为例,日志中的预测结果打印格式如下: +![](images/tipc_cpp_infer_res.png) + +(3)预测精度比对。分别读取预测日志文件中的预测结果和预先保存在txt文件中的预测结果,验证两个结果是否是一致的。【验证是否一致的步骤可以在QA测试时完成,但是线下需要自测通过】 + +结果对比脚本可以参考代码:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/compare_results.py + + +### 2.2 准备测试模型和数据 +与python训练预测等基础测试方式类似,使用脚本`prepare.sh`可以下载测试所需推理模型和数据(可以直接使用python预测所准备的数据集)。`prepare.sh` 根据不同的运行模式,配合从配置文件中解析得到的模型区别性名称,下载不同的数据和训练模型用于完成后续测试。 +![](images/tipc_cpp_infer_prepare.png) + + +### 2.3 编写自动化测试代码 +C++预测的自动化测试代码在脚本[test_inference_cpp.sh](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/test_inference_cpp.sh)中,其中包含`编译opencv(可选)`、`编译可执行文件`、`运行测试`三个部分。 + +C++预测自动化测试的运行命令如下: +```shell +bash test_tipc/test_inference_cpp.sh test_tipc/configs/ppocr_det_mobile/model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt +``` + +理论上只需要修改配置文件和`prepare.sh`就可以完成自动化测试,本节将详细介绍如何修改配置文件,完成C++预测测试。运行脚本`test_inference_cpp.sh`将会在附录中详细介绍。 + +按如下方式在参数文件`model_linux_gpu_normal_normal_infer_cpp_linux_gpu_cpu.txt`中添加C++预测部分参数: +![](images/tipc_cpp_infer_params.png) + +参数说明: + +|行号 | 参数 | 参数介绍 | +|---|---|---| +|2 | model_name: ocr_det | 模型名称,该参数会在prepare.sh脚本中用到| +|3 | use_opencv: True/False | 表示是否使用use_opencv,如果代码仓库没有这个参数,可以设置为null。不需要opencv时,会跳过编译opencv的步骤| +|4 | infer_model: ./inference/ch_ppocr_mobile_v2.0_det_infer/ | 模型路径 | +|5 | infer_quant: True/False | 54行设置的模型路径是否是量化模型 | +|6 | inference: ./deploy/cpp_infer/build/ppocr det| C++预测命令| +|7 | --use_gpu:True|False | 设置GPU的参数,其他代码仓库可能是device参数,用于设置不同硬件的参数,作用类似。设置多个配置时,中间用|隔开,会分别运行不同配置下的预测 | --device:cpu|gpu| +|8 | --enable_mkldnn:True|False | 设置是否开启mkldnn | +|9 | --cpu_threads:1|6 | 设置CPU线程数,如果要测试CPU上不同线程下的预测速度和精度,可以设置多个值,不同值用|隔开 | +|10 | --rec_batch_num:1 | 设置batch_size 的参数 | +|11 | --use_tensorrt:False|True | 设置开启TRT的参数 | +|12 | --precision:fp32|fp16| 设置开启TRT后预测精度的参数 | --precision:fp32|int8|fp16 | +|13 | --det_model_dir: | 设置加载inference模型路径的参数,无需设置:后的部分 | null: | +|14 | --image_dir:./inference/ch_det_data_50/all-sum-510/ | 设置预测的数据路径 | +|15 | null:null | 预留位置,无需理会 | null:null:null | +|16 | --benchmark:True | 设置是否开启AutoLog的参数 | + + +## 3. 附录:C++预测自动化测试脚本test_inference_cpp.sh 函数介绍 +[C++预测核心函数](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/test_inference_cpp.sh#L43): + +- func_cpp_inference() :执行C++预测的函数,如果是GPU上,会测试是否开启TensorRT和不同精度,不同batch_size下的情况;如果是CPU,会测试是否开启mkldnn,不同CPU线程数,不同batch_size下的情况。另外,如果是量化模型,则仅测试CPU+mkldnn和GPU+TensorRT+int8的组合。 + +[编译opencv](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/test_inference_cpp.sh#L116): + +- 如果不需要opencv,如语音或nlp任务,删除本段代码即可。 +- 需要编译opencv时,首先检查是否已经存在指定版本的opencv,比较md5,如果已有,则跳过编译,避免多次测试时重复下载和编译。 + +[编译可执行文件](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/test_inference_cpp.sh#L158): + +- 可根据实际任务调整编译选项。 + + diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer.png" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer.png" new file mode 100644 index 0000000000000000000000000000000000000000..ef23e23e5f679f926a3f98762e5b470dd02ad999 Binary files /dev/null and "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer.png" differ diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_gt.png" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_gt.png" new file mode 100644 index 0000000000000000000000000000000000000000..e351894edd800025b75ff42e3c09bbf4171faa9c Binary files /dev/null and "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_gt.png" differ diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_log.png" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_log.png" new file mode 100644 index 0000000000000000000000000000000000000000..b64d87e8d802b94192a9ec15858991f01972cdad Binary files /dev/null and "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_log.png" differ diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_params.png" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_params.png" new file mode 100644 index 0000000000000000000000000000000000000000..3bc51cc13d0272a7812156419798dbab1ad0ed25 Binary files /dev/null and "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_params.png" differ diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_prepare.png" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_prepare.png" new file mode 100644 index 0000000000000000000000000000000000000000..d266fc0e7edeccfe85dc1603825c46086f9a0a9a Binary files /dev/null and "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_prepare.png" differ diff --git "a/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_res.png" "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_res.png" new file mode 100644 index 0000000000000000000000000000000000000000..27e222e3cb2512f0d8e814e039fe8a6ad35e0fc0 Binary files /dev/null and "b/docs/tipc_test/\345\274\200\345\217\221\346\226\207\346\241\243/images/tipc_cpp_infer_res.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/TIPC\346\265\213\350\257\225\346\226\207\346\241\243\350\247\204\350\214\203.md" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/TIPC\346\265\213\350\257\225\346\226\207\346\241\243\350\247\204\350\214\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..3015d1b16e4c6c288c116fbaf7df4fb71554ccf0 --- /dev/null +++ "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/TIPC\346\265\213\350\257\225\346\226\207\346\241\243\350\247\204\350\214\203.md" @@ -0,0 +1,102 @@ +# 目录 +- [1.背景](#背景) +- [2.目录与命名规范](#目录与命名规范) +- [3.文档规范](#文档规范) + - [3.1 主文档规范](#主文档规范) + - [3.2 子文档规范](#子文档规范) + + +# 1. 背景 +各代码仓库完成TIPC训推一体认证工具开发后,同时需要提供相应的**TIPC测试文档**,方便用户查阅每种模型的推理部署打通情况,并可以按照教程进行一键测试。 + +本文将**TIPC测试文档**的书写格式进行规范化,分为`目录规范`和`文档规范`两部分。 + + +# 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,测试时模型直接下载获取,这里的“训练硬件环境”表示所测试的模型是在哪种环境下训练得到的。 + + + +# 3. 文档规范 + +## 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) + + +## 3.2 子文档规范 +请参考子文档规范文档: +- [基础训练预测测试文档规范]() +- [cpp预测测试文档规范]() +- [serving测试文档规范]() +- [lite测试文档规范]() diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/cpp\351\242\204\346\265\213\346\265\213\350\257\225\346\226\207\346\241\243\350\247\204\350\214\203.md" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/cpp\351\242\204\346\265\213\346\265\213\350\257\225\346\226\207\346\241\243\350\247\204\350\214\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..25839b8b617cf5f730d18122d261b024918285a6 --- /dev/null +++ "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/cpp\351\242\204\346\265\213\346\265\213\350\257\225\346\226\207\346\241\243\350\247\204\350\214\203.md" @@ -0,0 +1,42 @@ +# 背景 + +基础训练文档对应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) diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/.ipynb_checkpoints/tipc_cpp_infer_output-checkpoint.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/.ipynb_checkpoints/tipc_cpp_infer_output-checkpoint.png" new file mode 100644 index 0000000000000000000000000000000000000000..b5df28639bcd17057904e30be4247dea59ef2e93 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/.ipynb_checkpoints/tipc_cpp_infer_output-checkpoint.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_more.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_more.png" new file mode 100644 index 0000000000000000000000000000000000000000..292bbe1f63fb03e6ad4c21cd8c3980308263b564 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_more.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_output.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_output.png" new file mode 100644 index 0000000000000000000000000000000000000000..b5df28639bcd17057904e30be4247dea59ef2e93 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_output.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_shell.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_shell.png" new file mode 100644 index 0000000000000000000000000000000000000000..61e7361fd4787a1ebe63e90f222904fac8e3b84e Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_shell.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_table.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_table.png" new file mode 100644 index 0000000000000000000000000000000000000000..60cf6fb64c27997978505da0c85f367b081dd54f Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_cpp_infer_table.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_dir_tree.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_dir_tree.png" new file mode 100644 index 0000000000000000000000000000000000000000..340895ec5063c470543074a45ae867637818fa12 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_dir_tree.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_guide.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_guide.png" new file mode 100644 index 0000000000000000000000000000000000000000..319ac819daff38ed77e84cdff2b122e8bc4a8e5f Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_guide.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_infer_compare_results.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_infer_compare_results.png" new file mode 100644 index 0000000000000000000000000000000000000000..244b8648fa91cfc409d0661669ef29f061d3bfa7 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_infer_compare_results.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_more_tutorial.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_more_tutorial.png" new file mode 100644 index 0000000000000000000000000000000000000000..e1e25d2745eb0589a59ee1a550381af456f05be0 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_more_tutorial.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_table.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_table.png" new file mode 100644 index 0000000000000000000000000000000000000000..9cc9147097e42adb1ea19c34df392b6cd2d119bb Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_table.png" differ diff --git "a/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_test_pipeline.png" "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_test_pipeline.png" new file mode 100644 index 0000000000000000000000000000000000000000..f99f23d7050eb61879cf317c0d7728ef14531b08 Binary files /dev/null and "b/docs/tipc_test/\346\265\213\350\257\225\346\226\207\346\241\243/images/tipc_test_pipeline.png" differ