2021-06-23 08:58:10 +08:00

81 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PaddleDetection 预测部署
训练得到一个满足要求的模型后,如果想要将该模型部署到已选择的平台上,需要通过`tools/export_model.py`将模型导出预测部署的模型和配置文件。
并在同一文件夹下导出预测时使用的配置文件,配置文件名为`infer_cfg.yml`
## 1、`PaddleDetection`目前支持的部署方式按照部署设备可以分为:
- 在本机`python`语言部署,支持在有`python paddle`(支持`CPU``GPU`)环境下部署,有两种方式:
- 使用`tools/infer.py`,此种方式依赖`PaddleDetection`代码库。
- 将模型导出,使用`deploy/python/infer.py`,此种方式不依赖`PaddleDetection`代码库,可以单个`python`文件部署。
- 在本机`C++`语言使用`paddle inference`预测库部署,支持在`Linux``Windows`系统下部署。请参考文档[C++部署](cpp/README.md)。
- 在服务器端以服务形式部署,使用[PaddleServing](./serving/README.md)部署。
- 在手机移动端部署,使用[Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite) 在手机移动端部署。
常见模型部署Demo请参考[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo) 。
- `NV Jetson`嵌入式设备上部署
- `TensorRT`加速请参考文档[TensorRT预测部署教程](TENSOR_RT.md)
## 2、模型导出
使用`tools/export_model.py`脚本导出模型已经部署时使用的配置文件,配置文件名字为`infer_cfg.yml`。模型导出脚本如下:
```bash
# 导出YOLOv3模型
python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml -o weights=weights/yolov3_darknet53_270e_coco.pdparams
```
预测模型会导出到`output_inference/yolov3_darknet53_270e_coco`目录下,分别为`infer_cfg.yml`, `model.pdiparams`, `model.pdiparams.info`, `model.pdmodel`
如果需要导出`PaddleServing`格式的模型,需要设置`export_serving_model=True`:
```buildoutcfg
python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml -o weights=weights/yolov3_darknet53_270e_coco.pdparams --export_serving_model=True
```
预测模型会导出到`output_inference/yolov3_darknet53_270e_coco`目录下,分别为`infer_cfg.yml`, `model.pdiparams`, `model.pdiparams.info`, `model.pdmodel`, `serving_client/`文件夹, `serving_server/`文件夹。
模型导出具体请参考文档[PaddleDetection模型导出教程](EXPORT_MODEL.md)。
## 3、如何选择部署时依赖库的版本
### 1CUDA、cuDNN、TensorRT版本选择
由于CUDA、cuDNN、TENSORRT不一定都是向前兼容的需要使用与编译Paddle预测库使用的环境完全一致的环境进行部署。
### 2部署时预测库版本、预测引擎版本选择
- Linux、Windows平台下C++部署需要使用Paddle预测库进行部署。
1Paddle官网提供在不同平台、不同环境下编译好的预测库您可以直接使用请在这里[Paddle预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/build_and_install_lib_cn.html) 选择。
2如果您将要部署的平台环境Paddle官网上没有提供已编译好的预测库您可以自行编译编译过程请参考[Paddle源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/compile/linux-compile.html)。
**注意:** Paddle预测库版本需要>=2.0
- Python语言部署需要在对应平台上安装Paddle Python包。如果Paddle官网上没有提供该平台下的Paddle Python包您可以自行编译编译过程请参考[Paddle源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/compile/linux-compile.html)。
- PaddleServing部署
PaddleServing 0.4.0是基于Paddle 1.8.4开发PaddleServing 0.5.0是基于Paddle2.0开发。
- Paddle-Lite部署
Paddle-Lite支持OP列表请参考[Paddle-Lite支持的OP列表](https://paddle-lite.readthedocs.io/zh/latest/source_compile/library.html) 请跟进所部署模型中使用到的op选择Paddle-Lite版本。
- NV Jetson部署
Paddle官网提供在NV Jetson平台上已经编译好的预测库[Paddle NV Jetson预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/build_and_install_lib_cn.html) 。
若列表中没有您需要的预测库,您可以在您的平台上自行编译,编译过程请参考[Paddle源码编译](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/compile/linux-compile.html)。
## 4、部署
- C++部署,先使用跨平台编译工具`CMake`根据`CMakeLists.txt`生成`Makefile`,支持`Windows、Linux、NV Jetson`平台,然后进行编译产出可执行文件。可以直接使用`cpp/scripts/build.sh`脚本编译:
```buildoutcfg
cd cpp
sh scripts/build.sh
```
- Python部署可以使用使用`tools/infer.py`以来PaddleDetection源码部署或者使用`deploy/python/infer.py`单文件部署
- PaddleServing部署请参考[PaddleServing部署](./serving/README.md)部署。
- 手机移动端部署,请参考[Paddle-Lite-Demo](https://github.com/PaddlePaddle/Paddle-Lite-Demo)部署。
## 5、常见问题QA
- 1、`Paddle 1.8.4`训练的模型,可以用`Paddle2.0`部署吗?
Paddle 2.0是兼容Paddle 1.8.4的,因此是可以的。但是部分模型(如SOLOv2)使用到了Paddle 2.0中新增OP这类模型不可以。
- 2、Windows编译时预测库是VS2015编译的选择VS2017或VS2019会有问题吗
关于VS兼容性问题请参考[C++Visual Studio 2015、2017和2019之间的二进制兼容性](https://docs.microsoft.com/zh-cn/cpp/porting/binary-compat-2015-2017?view=msvc-160)
- 3、cuDNN 8.0.4连续预测会发生内存泄漏吗?
经QA测试发现cuDNN 8系列连续预测时都有内存泄漏问题且cuDNN 8性能差于cuDNN 7推荐使用CUDA + cuDNN7.6.4的方式进行部署。