From 38d1517fdadbcf9c19706deff2e0f8a95936ee88 Mon Sep 17 00:00:00 2001 From: channings Date: Wed, 13 May 2020 20:05:55 +0800 Subject: [PATCH] Make TensorRT dir settable (#658) --- deploy/README.md | 2 +- deploy/cpp/CMakeLists.txt | 11 +++++---- deploy/cpp/cmake/yaml-cpp.cmake | 1 + deploy/cpp/docs/linux_build.md | 30 ++++++++++++++++-------- deploy/cpp/scripts/bootstrap.sh | 9 ++++---- deploy/cpp/scripts/build.sh | 41 ++++++++++++++++++++++----------- 6 files changed, 59 insertions(+), 35 deletions(-) diff --git a/deploy/README.md b/deploy/README.md index a049ca3eb..da01063ed 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -5,7 +5,7 @@ ## 模型导出 训练得到一个满足要求的模型后,如果想要将该模型接入到C++预测库,需要通过`tools/export_model.py`导出该模型。 -- [导出教程](../docs/advanced_tutorials/inference/EXPORT_MODEL.md) +- [导出教程](../docs/advanced_tutorials/deploy/EXPORT_MODEL.md) 模型导出后, 目录结构如下(以`yolov3_darknet`为例): ``` diff --git a/deploy/cpp/CMakeLists.txt b/deploy/cpp/CMakeLists.txt index 5afe6bedc..e27cbf8cc 100644 --- a/deploy/cpp/CMakeLists.txt +++ b/deploy/cpp/CMakeLists.txt @@ -9,6 +9,7 @@ option(WITH_TENSORRT "Compile demo with TensorRT." OFF) 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(TENSORRT_DIR "" CACHE PATH "Compile demo with TensorRT") include(cmake/yaml-cpp.cmake) @@ -112,8 +113,8 @@ endif() if (NOT WIN32) if (WITH_TENSORRT AND WITH_GPU) - include_directories("${PADDLE_DIR}/third_party/install/tensorrt/include") - link_directories("${PADDLE_DIR}/third_party/install/tensorrt/lib") + include_directories("${TENSORRT_DIR}/include") + link_directories("${TENSORRT_DIR}/lib") endif() endif(NOT WIN32) @@ -195,15 +196,15 @@ endif(NOT WIN32) if(WITH_GPU) if(NOT WIN32) if (WITH_TENSORRT) - set(DEPS ${DEPS} ${PADDLE_DIR}/third_party/install/tensorrt/lib/libnvinfer${CMAKE_STATIC_LIBRARY_SUFFIX}) - set(DEPS ${DEPS} ${PADDLE_DIR}/third_party/install/tensorrt/lib/libnvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/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}) else() set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} ) set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} ) - set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(DEPS ${DEPS} ${CUDNN_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX}) endif() endif() diff --git a/deploy/cpp/cmake/yaml-cpp.cmake b/deploy/cpp/cmake/yaml-cpp.cmake index fc2e37f71..7bc7f34d4 100644 --- a/deploy/cpp/cmake/yaml-cpp.cmake +++ b/deploy/cpp/cmake/yaml-cpp.cmake @@ -26,4 +26,5 @@ ExternalProject_Add( # Disable install step INSTALL_COMMAND "" LOG_DOWNLOAD ON + LOG_BUILD 1 ) diff --git a/deploy/cpp/docs/linux_build.md b/deploy/cpp/docs/linux_build.md index 1882fdc27..bb70fc6d5 100644 --- a/deploy/cpp/docs/linux_build.md +++ b/deploy/cpp/docs/linux_build.md @@ -38,30 +38,40 @@ fluid_inference ### Step4: 编译 编译`cmake`的命令在`scripts/build.sh`中,请根据实际情况修改主要参数,其主要内容说明如下: -``` + # 是否使用GPU(即是否使用 CUDA) -WITH_GPU=ON +WITH_GPU=OFF +# 使用MKL or openblas +WITH_MKL=ON # 是否集成 TensorRT(仅WITH_GPU=ON 有效) WITH_TENSORRT=OFF -# 上一步下载的 Paddle 预测库路径 -PADDLE_DIR=/root/projects/deps/fluid_inference/ -# OPENCV 路径, 如果使用自带预编译版本可不设置 -OPENCV_DIR=$(pwd)/deps/opencv346/ +# TensorRT 的lib路径 +TENSORRT_DIR=/path/to/TensorRT/ +# Paddle 预测库路径 +PADDLE_DIR=/path/to/fluid_inference/ +# Paddle 的预测库是否使用静态库来编译 +# 使用TensorRT时,Paddle的预测库通常为动态库 +WITH_STATIC_LIB=OFF # CUDA 的 lib 路径 -CUDA_LIB=/usr/local/cuda/lib64/ +CUDA_LIB=/path/to/cuda/lib/ # CUDNN 的 lib 路径 -CUDNN_LIB=/usr/local/cuda/lib64/ +CUDNN_LIB=/path/to/cudnn/lib/ -# 以下无需改动 +# OPENCV 路径, 如果使用自带预编译版本可不修改 +sh $(pwd)/scripts/bootstrap.sh # 下载预编译版本的opencv +OPENCV_DIR=$(pwd)/deps/opencv3gcc4.8/ -sh $(pwd)/scripts/bootstrap.sh +# 以下无需改动 rm -rf build mkdir -p build cd build cmake .. \ -DWITH_GPU=${WITH_GPU} \ + -DWITH_MKL=${WITH_MKL} \ -DWITH_TENSORRT=${WITH_TENSORRT} \ + -DTENSORRT_DIR=${TENSORRT_DIR} \ -DPADDLE_DIR=${PADDLE_DIR} \ + -DWITH_STATIC_LIB=${WITH_STATIC_LIB} \ -DCUDA_LIB=${CUDA_LIB} \ -DCUDNN_LIB=${CUDNN_LIB} \ -DOPENCV_DIR=${OPENCV_DIR} diff --git a/deploy/cpp/scripts/bootstrap.sh b/deploy/cpp/scripts/bootstrap.sh index fc2bbb864..f9fc1d1ed 100644 --- a/deploy/cpp/scripts/bootstrap.sh +++ b/deploy/cpp/scripts/bootstrap.sh @@ -1,11 +1,10 @@ # download pre-compiled opencv lib -OPENCV_URL=https://paddleseg.bj.bcebos.com/deploy/deps/opencv346.tar.bz2 -if [ ! -d "./deps/opencv346" ]; then +OPENCV_URL=https://paddleseg.bj.bcebos.com/deploy/docker/opencv3gcc4.8.tar.bz2 +if [ ! -d "./deps/opencv3gcc4.8" ]; then mkdir -p deps cd deps wget -c ${OPENCV_URL} - tar xvfj opencv346.tar.bz2 - rm -rf opencv346.tar.bz2 + tar xvfj opencv3gcc4.8.tar.bz2 + rm -rf opencv3gcc4.8.tar.bz2 cd .. fi - diff --git a/deploy/cpp/scripts/build.sh b/deploy/cpp/scripts/build.sh index 6361b837f..72593c523 100644 --- a/deploy/cpp/scripts/build.sh +++ b/deploy/cpp/scripts/build.sh @@ -1,24 +1,37 @@ -# compile with cuda -WITH_GPU=ON -# compile with tensorrt +# 是否使用GPU(即是否使用 CUDA) +WITH_GPU=OFF +# 使用MKL or openblas +WITH_MKL=ON +# 是否集成 TensorRT(仅WITH_GPU=ON 有效) WITH_TENSORRT=OFF -# path to paddle inference lib -PADDLE_DIR=/root/projects/deps/fluid_inference/ -# path to opencv lib -OPENCV_DIR=$(pwd)/deps/opencv346/ -# path to cuda lib -CUDA_LIB=/usr/local/cuda/lib64/ +# TensorRT 的lib路径 +TENSORRT_DIR=/path/to/TensorRT/ +# Paddle 预测库路径 +PADDLE_DIR=/path/to/fluid_inference/ +# Paddle 的预测库是否使用静态库来编译 +# 使用TensorRT时,Paddle的预测库通常为动态库 +WITH_STATIC_LIB=OFF +# CUDA 的 lib 路径 +CUDA_LIB=/path/to/cuda/lib/ +# CUDNN 的 lib 路径 +CUDNN_LIB=/path/to/cudnn/lib/ -sh $(pwd)/scripts/bootstrap.sh +# OPENCV 路径, 如果使用自带预编译版本可不修改 +sh $(pwd)/scripts/bootstrap.sh # 下载预编译版本的opencv +OPENCV_DIR=$(pwd)/deps/opencv3gcc4.8/ +# 以下无需改动 rm -rf build mkdir -p build cd build cmake .. \ - -DWITH_GPU=OFF \ - -DWITH_TENSORRT=OFF \ + -DWITH_GPU=${WITH_GPU} \ + -DWITH_MKL=${WITH_MKL} \ + -DWITH_TENSORRT=${WITH_TENSORRT} \ + -DTENSORRT_DIR=${TENSORRT_DIR} \ -DPADDLE_DIR=${PADDLE_DIR} \ + -DWITH_STATIC_LIB=${WITH_STATIC_LIB} \ -DCUDA_LIB=${CUDA_LIB} \ - -DOPENCV_DIR=${OPENCV_DIR} \ - -DWITH_STATIC_LIB=OFF + -DCUDNN_LIB=${CUDNN_LIB} \ + -DOPENCV_DIR=${OPENCV_DIR} make -- GitLab