From 5edb9c6cb701e51ebab38e9368f0e90d4ab2e9e5 Mon Sep 17 00:00:00 2001 From: cnn Date: Tue, 17 Nov 2020 17:22:00 +0800 Subject: [PATCH] [doc] TX2 doc TensorRT 5-->TensorRT 6 (#1700) * update cpp build script * rename document and update script * set WITH_MKL=ON for pass CI * set WITH_GPU=OFF and WITH_TENSORRT=OFF for pass CI --- deploy/README.md | 1 + deploy/cpp/CMakeLists.txt | 16 ++++--- .../docs/{TX2_build.md => Jetson_build.md} | 44 ++++++++++++------- deploy/cpp/docs/linux_build.md | 14 +++--- deploy/cpp/scripts/build.sh | 34 +++++++++----- 5 files changed, 71 insertions(+), 38 deletions(-) rename deploy/cpp/docs/{TX2_build.md => Jetson_build.md} (70%) diff --git a/deploy/README.md b/deploy/README.md index 137afa02a..2f8818816 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -25,3 +25,4 @@ yolov3_darknet # 模型目录 - [2. C++预测(支持 Linux 和 Windows)](https://github.com/PaddlePaddle/PaddleDetection/blob/master/deploy/cpp) - [3. 在线服务化部署](./serving/README.md) - [4. 移动端部署](https://github.com/PaddlePaddle/Paddle-Lite-Demo) +- [5. Jetson设备部署](./cpp/docs/Jetson_build.md) diff --git a/deploy/cpp/CMakeLists.txt b/deploy/cpp/CMakeLists.txt index a5e892a80..de2f9fe66 100644 --- a/deploy/cpp/CMakeLists.txt +++ b/deploy/cpp/CMakeLists.txt @@ -10,7 +10,8 @@ SET(PADDLE_DIR "" CACHE PATH "Location of libraries") SET(OPENCV_DIR "" CACHE PATH "Location of libraries") SET(CUDA_LIB "" CACHE PATH "Location of libraries") SET(CUDNN_LIB "" CACHE PATH "Location of libraries") -SET(TENSORRT_DIR "" CACHE PATH "Compile demo with TensorRT") +SET(TENSORRT_INC_DIR "" CACHE PATH "Compile demo with TensorRT") +SET(TENSORRT_LIB_DIR "" CACHE PATH "Compile demo with TensorRT") include(cmake/yaml-cpp.cmake) @@ -112,8 +113,9 @@ endif() if (NOT WIN32) if (WITH_TENSORRT AND WITH_GPU) - include_directories("${TENSORRT_DIR}/include") - link_directories("${TENSORRT_DIR}/lib") + include_directories("${TENSORRT_INC_DIR}/include") + #link_directories("${TENSORRT_LIB_DIR}/lib") + link_directories("${TENSORRT_LIB_DIR}/") endif() endif(NOT WIN32) @@ -170,7 +172,7 @@ endif() if (NOT WIN32) set(DEPS ${DEPS} - ${MATH_LIB} ${MKLDNN_LIB} + ${MATH_LIB} ${MKLDNN_LIB} glog gflags protobuf z xxhash yaml-cpp ) if(EXISTS "${PADDLE_DIR}/third_party/install/snappystream/lib") @@ -195,8 +197,8 @@ endif(NOT WIN32) if(WITH_GPU) if(NOT WIN32) if (WITH_TENSORRT) - set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX}) - set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${TENSORRT_LIB_DIR}/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${TENSORRT_LIB_DIR}/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX}) endif() set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX}) set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX}) @@ -212,7 +214,7 @@ if (NOT WIN32) set(DEPS ${DEPS} ${EXTERNAL_LIB}) endif() -set(DEPS ${DEPS} ${OpenCV_LIBS}) +set(DEPS ${DEPS} ${OpenCV_LIBS}) add_executable(main src/main.cc src/preprocess_op.cc src/object_detector.cc) ADD_DEPENDENCIES(main ext-yaml-cpp) target_link_libraries(main ${DEPS}) diff --git a/deploy/cpp/docs/TX2_build.md b/deploy/cpp/docs/Jetson_build.md similarity index 70% rename from deploy/cpp/docs/TX2_build.md rename to deploy/cpp/docs/Jetson_build.md index a8f911d63..c5526cf31 100644 --- a/deploy/cpp/docs/TX2_build.md +++ b/deploy/cpp/docs/Jetson_build.md @@ -1,10 +1,14 @@ -# TX2平台编译指南 +# Jetson平台编译指南 ## 说明 -本文档在`TX2`平台上使用`jetpack 4.3`进行测试。`TX2`平台的开发指南请参考[NVIDIA Jetson Linux Developer Guide](https://docs.nvidia.com/jetson/l4t/index.html). +`NVIDIA Jetson`设备是具有`NVIDIA GPU`的嵌入式设备,可以将目标检测算法部署到该设备上。本文档是在`Jetson`硬件上部署`PaddleDetection`模型的教程。 -## TX2环境搭建 -`TX2`系统软件安装,请参考[NVIDIA Jetson Linux Developer Guide](https://docs.nvidia.com/jetson/l4t/index.html). +本文档以`Jetson TX2`硬件、`JetPack 4.3`版本为例进行说明。 + +`Jetson`平台的开发指南请参考[NVIDIA Jetson Linux Developer Guide](https://docs.nvidia.com/jetson/l4t/index.html). + +## Jetson环境搭建 +`Jetson`系统软件安装,请参考[NVIDIA Jetson Linux Developer Guide](https://docs.nvidia.com/jetson/l4t/index.html). * (1) 查看硬件系统的l4t的版本号 ``` @@ -12,12 +16,14 @@ cat /etc/nv_tegra_release ``` * (2) 根据硬件,选择硬件可安装的`JetPack`版本,硬件和`JetPack`版本对应关系请参考[jetpack-archive](https://developer.nvidia.com/embedded/jetpack-archive). -* (3) 下载`JetPack`,请参考[NVIDIA Jetson Linux Developer Guide](https://docs.nvidia.com/jetson/l4t/index.html)中的`Preparing a Jetson Developer Kit for Use`章节内容进行刷写系统镜像。 +* (3) 下载`JetPack`,请参考[NVIDIA Jetson Linux Developer Guide](https://docs.nvidia.com/jetson/l4t/index.html) 中的`Preparing a Jetson Developer Kit for Use`章节内容进行刷写系统镜像。 -## `Paddle`预测库 -本文档使用`Paddle`在`TX2`平台上预先编译好的预测库,下载地址[fluid_inference.tgz](https://paddle-inference-lib.bj.bcebos.com/1.8.4-nv-jetson-cuda10-cudnn7.5-trt5/fluid_inference.tgz), `Paddle`版本`1.8.4`,`CUDA`版本`10.0`,`CUDNN`版本`7.5`,`TensorRT`版本`5`。 +## 下载或编译`Paddle`预测库 +本文档使用`Paddle`在`JetPack4.3`上预先编译好的预测库,请根据硬件在[安装与编译 Linux 预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0-rc/guides/05_inference_deployment/inference/build_and_install_lib_cn.html) 中选择对应版本的`Paddle`预测库。 -若需要自己在`TX2`平台上编译`Paddle`,请参考文档[安装与编译 Linux 预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html) 的`NVIDIA Jetson嵌入式硬件预测库源码编译`部分内容。 +这里选择[nv_jetson_cuda10_cudnn7.6_trt6(jetpack4.3)](https://paddle-inference-lib.bj.bcebos.com/2.0.0-rc0-nv-jetson-cuda10-cudnn7.6-trt6/paddle_inference.tgz), `Paddle`版本`2.0.0-rc0`,`CUDA`版本`10.0`,`CUDNN`版本`7.6`,`TensorRT`版本`6`。 + +若需要自己在`Jetson`平台上自定义编译`Paddle`库,请参考文档[安装与编译 Linux 预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html) 的`NVIDIA Jetson嵌入式硬件预测库源码编译`部分内容。 ### Step1: 下载代码 @@ -28,7 +34,7 @@ cat /etc/nv_tegra_release ### Step2: 下载PaddlePaddle C++ 预测库 fluid_inference -PaddlePaddle C++ 预测库针对不同的硬件平台,针对不同`CUDA`版本提供了不同的预编译版本,请根据实际情况下载: [C++预测库下载列表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html) +解压下载的[nv_jetson_cuda10_cudnn7.6_trt6(jetpack4.3)](https://paddle-inference-lib.bj.bcebos.com/2.0.0-rc0-nv-jetson-cuda10-cudnn7.6-trt6/paddle_inference.tgz) 。 下载并解压后`/root/projects/fluid_inference`目录包含内容为: ``` @@ -40,7 +46,7 @@ fluid_inference └── version.txt # 版本和编译信息 ``` -**注意:** 预编译库`nv-jetson-cuda10-cudnn7.5-trt5`使用的`GCC`版本是`7.5.0`,其他都是使用`GCC 4.8.5`编译的。使用高版本的GCC可能存在`ABI`兼容性问题,建议降级或[自行编译预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html)。 +**注意:** 预编译库`nv-jetson-cuda10-cudnn7.6-trt6`使用的`GCC`版本是`7.5.0`,其他都是使用`GCC 4.8.5`编译的。使用高版本的GCC可能存在`ABI`兼容性问题,建议降级或[自行编译预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html)。 ### Step4: 编译 @@ -59,8 +65,11 @@ WITH_MKL=OFF # 是否集成 TensorRT(仅WITH_GPU=ON 有效) WITH_TENSORRT=ON +# TensorRT 的include路径 +TENSORRT_INC_DIR=/usr/include/aarch64-linux-gnu + # TensorRT 的lib路径 -TENSORRT_DIR=/path/to/TensorRT/ +TENSORRT_LIB_DIR=/usr/lib/aarch64-linux-gnu # Paddle 预测库路径 PADDLE_DIR=/path/to/fluid_inference/ @@ -70,10 +79,10 @@ PADDLE_DIR=/path/to/fluid_inference/ WITH_STATIC_LIB=OFF # CUDA 的 lib 路径 -CUDA_LIB=/path/to/cuda/lib/ +CUDA_LIB=/usr/local/cuda-10.0/lib64 # CUDNN 的 lib 路径 -CUDNN_LIB=/path/to/cudnn/lib/ +CUDNN_LIB=/usr/lib/aarch64-linux-gnu # OPENCV_DIR 的路径 # linux平台请下载:https://bj.bcebos.com/paddleseg/deploy/opencv3.4.6gcc4.8ffmpeg.tar.gz2,并解压到deps文件夹下 @@ -107,11 +116,14 @@ WITH_MKL=OFF # 是否集成 TensorRT(仅WITH_GPU=ON 有效) WITH_TENSORRT=OFF -# TensorRT 的路径 -TENSORRT_DIR=/home/nvidia/PaddleDetection_infer/tensorrt/ +# TensorRT 的include路径 +TENSORRT_INC_DIR=/usr/include/aarch64-linux-gnu + +# TensorRT 的lib路径 +TENSORRT_LIB_DIR=/usr/lib/aarch64-linux-gnu # Paddle 预测库路径 -PADDLE_DIR=/home/nvidia/PaddleDetection_infer/fluid_inference_1.8.4-_cuda10_cudnnv7.5_trt5_jetson_sm53_62_72/ +PADDLE_DIR=/home/nvidia/PaddleDetection_infer/fluid_inference/ # Paddle 的预测库是否使用静态库来编译 # 使用TensorRT时,Paddle的预测库通常为动态库 diff --git a/deploy/cpp/docs/linux_build.md b/deploy/cpp/docs/linux_build.md index 1eccde7ed..ba018e21d 100644 --- a/deploy/cpp/docs/linux_build.md +++ b/deploy/cpp/docs/linux_build.md @@ -49,21 +49,24 @@ WITH_MKL=ON # 是否集成 TensorRT(仅WITH_GPU=ON 有效) WITH_TENSORRT=OFF +# TensorRT 的include路径 +TENSORRT_LIB_DIR=/path/to/TensorRT/include + # TensorRT 的lib路径 -TENSORRT_DIR=/path/to/TensorRT/ +TENSORRT_LIB_DIR=/path/to/TensorRT/lib # Paddle 预测库路径 -PADDLE_DIR=/path/to/fluid_inference/ +PADDLE_DIR=/path/to/fluid_inference # Paddle 的预测库是否使用静态库来编译 # 使用TensorRT时,Paddle的预测库通常为动态库 WITH_STATIC_LIB=OFF # CUDA 的 lib 路径 -CUDA_LIB=/path/to/cuda/lib/ +CUDA_LIB=/path/to/cuda/lib # CUDNN 的 lib 路径 -CUDNN_LIB=/path/to/cudnn/lib/ +CUDNN_LIB=/path/to/cudnn/lib 修改脚本设置好主要参数后,执行`build`脚本: ```shell @@ -77,7 +80,8 @@ cmake .. \ -DWITH_GPU=${WITH_GPU} \ -DWITH_MKL=${WITH_MKL} \ -DWITH_TENSORRT=${WITH_TENSORRT} \ - -DTENSORRT_DIR=${TENSORRT_DIR} \ + -DTENSORRT_LIB_DIR=${TENSORRT_LIB_DIR} \ + -DTENSORRT_INC_DIR=${TENSORRT_INC_DIR} \ -DPADDLE_DIR=${PADDLE_DIR} \ -DWITH_STATIC_LIB=${WITH_STATIC_LIB} \ -DCUDA_LIB=${CUDA_LIB} \ diff --git a/deploy/cpp/scripts/build.sh b/deploy/cpp/scripts/build.sh index 8c2d9e4a0..ffc9a4ff2 100644 --- a/deploy/cpp/scripts/build.sh +++ b/deploy/cpp/scripts/build.sh @@ -1,14 +1,17 @@ # 是否使用GPU(即是否使用 CUDA) WITH_GPU=OFF -# 是否使用MKL or openblas +# 是否使用MKL or openblas,TX2需要设置为OFF WITH_MKL=ON # 是否集成 TensorRT(仅WITH_GPU=ON 有效) WITH_TENSORRT=OFF -# TensorRT 的路径 -TENSORRT_DIR=/path/to/TensorRT/ +# TensorRT 的include路径 +TENSORRT_INC_DIR=/path/to/tensorrt/lib + +# TensorRT 的lib路径 +TENSORRT_LIB_DIR=/path/to/tensorrt/include # Paddle 预测库路径 PADDLE_DIR=/path/to/fluid_inference/ @@ -18,13 +21,19 @@ PADDLE_DIR=/path/to/fluid_inference/ WITH_STATIC_LIB=OFF # CUDA 的 lib 路径 -CUDA_LIB=/path/to/cuda/lib/ +CUDA_LIB=/path/to/cuda/lib # CUDNN 的 lib 路径 -CUDNN_LIB=/path/to/cudnn/lib/ +CUDNN_LIB=/path/to/cudnn/lib + + +MACHINE_TYPE=`uname -m` +echo "MACHINE_TYPE: "${MACHINE_TYPE} + -# OPENCV 路径, 如果使用自带预编译版本可不修改 -if [ "$(uname -m)"=="x86_64" ]; then +if [ "$MACHINE_TYPE" = "x86_64" ] +then + echo "set OPENCV_DIR for x86_64" # linux系统通过以下命令下载预编译的opencv mkdir -p $(pwd)/deps && cd $(pwd)/deps wget -c https://bj.bcebos.com/paddleseg/deploy/opencv3.4.6gcc4.8ffmpeg.tar.gz2 @@ -33,7 +42,9 @@ if [ "$(uname -m)"=="x86_64" ]; then # set OPENCV_DIR OPENCV_DIR=$(pwd)/deps/opencv3.4.6gcc4.8ffmpeg/ -elif [ "$(uname -m)"=="aarch64" ];then +elif [ "$MACHINE_TYPE" = "aarch64" ] +then + echo "set OPENCV_DIR for aarch64" # TX2平台通过以下命令下载预编译的opencv mkdir -p $(pwd)/deps && cd $(pwd)/deps wget -c https://paddlemodels.bj.bcebos.com/TX2_JetPack4.3_opencv_3.4.10_gcc7.5.0.zip @@ -42,9 +53,11 @@ elif [ "$(uname -m)"=="aarch64" ];then # set OPENCV_DIR OPENCV_DIR=$(pwd)/deps/TX2_JetPack4.3_opencv_3.4.10_gcc7.5.0/ +else + echo "Please set OPENCV_DIR manually" fi -# 请检查以上各个路径是否正确 +echo "OPENCV_DIR: "$OPENCV_DIR # 以下无需改动 rm -rf build @@ -54,7 +67,8 @@ cmake .. \ -DWITH_GPU=${WITH_GPU} \ -DWITH_MKL=${WITH_MKL} \ -DWITH_TENSORRT=${WITH_TENSORRT} \ - -DTENSORRT_DIR=${TENSORRT_DIR} \ + -DTENSORRT_LIB_DIR=${TENSORRT_LIB_DIR} \ + -DTENSORRT_INC_DIR=${TENSORRT_INC_DIR} \ -DPADDLE_DIR=${PADDLE_DIR} \ -DWITH_STATIC_LIB=${WITH_STATIC_LIB} \ -DCUDA_LIB=${CUDA_LIB} \ -- GitLab