Skip to content

Commit cddff20

Browse files
authored
Merge pull request #13802 from NHZlX/add_trt_lib_release1.0
cherry-pick from develop add trt lib to paddle_fluid
2 parents b85ac93 + e42a332 commit cddff20

File tree

5 files changed

+105
-27
lines changed

5 files changed

+105
-27
lines changed

paddle/fluid/inference/CMakeLists.txt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,26 @@ cc_library(paddle_fluid_origin DEPS ${fluid_modules} paddle_fluid_api)
1919

2020
add_subdirectory(api)
2121

22+
set(STATIC_INFERENCE_APIS paddle_fluid_api paddle_inference_api analysis_predictor)
23+
set(SHARED_INFERENCE_SRCS
24+
io.cc ${CMAKE_CURRENT_SOURCE_DIR}/api/api.cc ${CMAKE_CURRENT_SOURCE_DIR}/api/api_impl.cc
25+
${CMAKE_CURRENT_SOURCE_DIR}/api/analysis_predictor.cc )
26+
if (WITH_GPU AND TENSORRT_FOUND)
27+
set(STATIC_INFERENCE_APIS ${STATIC_INFERENCE_APIS} paddle_inference_tensorrt_subgraph_engine)
28+
set(SHARED_INFERENCE_SRCS ${SHARED_INFERENCE_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/api/api_tensorrt_subgraph_engine.cc)
29+
endif()
30+
2231
# Create static library
23-
cc_library(paddle_fluid DEPS ${fluid_modules} paddle_fluid_api paddle_inference_api analysis_predictor)
32+
cc_library(paddle_fluid DEPS ${fluid_modules} ${STATIC_INFERENCE_APIS} )
33+
2434
if(NOT APPLE)
2535
# TODO(liuyiqu: Temporarily disable the link flag because it is not support on Mac.
2636
set(LINK_FLAGS "-Wl,--retain-symbols-file ${CMAKE_CURRENT_SOURCE_DIR}/paddle_fluid.sym")
2737
set_target_properties(paddle_fluid PROPERTIES LINK_FLAGS "${LINK_FLAGS}")
2838
endif()
2939

3040
# Create shared library
31-
cc_library(paddle_fluid_shared SHARED
32-
SRCS io.cc ${CMAKE_CURRENT_SOURCE_DIR}/api/api.cc ${CMAKE_CURRENT_SOURCE_DIR}/api/api_impl.cc
33-
${CMAKE_CURRENT_SOURCE_DIR}/api/analysis_predictor.cc
41+
cc_library(paddle_fluid_shared SHARED SRCS ${SHARED_INFERENCE_SRCS}
3442
DEPS ${fluid_modules} paddle_fluid_api)
3543

3644
set_target_properties(paddle_fluid_shared PROPERTIES OUTPUT_NAME paddle_fluid)

paddle/fluid/inference/api/demo_ci/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ project(cpp_inference_demo CXX C)
33
option(WITH_MKL "Compile demo with MKL/OpenBlas support, default use MKL." ON)
44
option(WITH_GPU "Compile demo with GPU/CPU, default use CPU." OFF)
55
option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static." ON)
6+
option(USE_TENSORRT "Compile demo with TensorRT." OFF)
67

78
macro(safe_set_static_flag)
89
foreach(flag_var
@@ -60,6 +61,13 @@ endif(NOT WIN32)
6061
include_directories("${PADDLE_LIB}/third_party/boost")
6162
include_directories("${PADDLE_LIB}/third_party/eigen3")
6263

64+
if (NOT WIN32)
65+
if (USE_TENSORRT AND WITH_GPU)
66+
include_directories("${TENSORRT_INCLUDE_DIR}")
67+
link_directories("${TENSORRT_LIB_DIR}")
68+
endif()
69+
endif(NOT WIN32)
70+
6371
if (NOT WIN32)
6472
link_directories("${PADDLE_LIB}/third_party/install/snappy/lib")
6573
link_directories("${PADDLE_LIB}/third_party/install/snappystream/lib")
@@ -112,6 +120,10 @@ endif(NOT WIN32)
112120

113121
if(WITH_GPU)
114122
if(NOT WIN32)
123+
if (USE_TENSORRT)
124+
set(DEPS ${DEPS} ${TENSORRT_LIB_DIR}/libnvinfer${CMAKE_STATIC_LIBRARY_SUFFIX})
125+
set(DEPS ${DEPS} ${TENSORRT_LIB_DIR}/libnvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX})
126+
endif()
115127
set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
116128
else()
117129
set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )

paddle/fluid/inference/api/demo_ci/run.sh

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ set -x
22
PADDLE_ROOT=$1
33
TURN_ON_MKL=$2 # use MKL or Openblas
44
TEST_GPU_CPU=$3 # test both GPU/CPU mode or only CPU mode
5+
DATA_DIR=$4 # dataset
6+
TENSORRT_INCLUDE_DIR=$5 # TensorRT header file dir, defalut to /usr/local/TensorRT/include
7+
TENSORRT_LIB_DIR=$6 # TensorRT lib file dir, default to /usr/local/TensorRT/lib
8+
9+
cd `dirname $0`
10+
current_dir=`pwd`
511
if [ $2 == ON ]; then
612
# You can export yourself if move the install path
713
MKL_LIB=${PADDLE_ROOT}/build/fluid_install_dir/third_party/install/mklml/lib
@@ -13,6 +19,11 @@ else
1319
use_gpu_list='false'
1420
fi
1521

22+
USE_TENSORRT=OFF
23+
if [ [-d"$TENSORRT_INCLUDE_DIR"] -a [-d"$TENSORRT_LIB_DIR"] ]; then
24+
USE_TENSORRT=ON
25+
fi
26+
1627
PREFIX=inference-vis-demos%2F
1728
URL_ROOT=http://paddlemodels.cdn.bcebos.com/${PREFIX}
1829

@@ -29,15 +40,15 @@ function download() {
2940
fi
3041
cd ..
3142
}
32-
mkdir -p data
33-
cd data
43+
mkdir -p $DATA_DIR
44+
cd $DATA_DIR
3445
vis_demo_list='se_resnext50 ocr mobilenet'
3546
for vis_demo_name in $vis_demo_list; do
3647
download $vis_demo_name
3748
done
38-
cd ..
3949

4050
# compile and test the demo
51+
cd $current_dir
4152
mkdir -p build
4253
cd build
4354

@@ -73,15 +84,35 @@ for WITH_STATIC_LIB in ON OFF; do
7384
for use_gpu in $use_gpu_list; do
7485
for vis_demo_name in $vis_demo_list; do
7586
./vis_demo \
76-
--modeldir=../data/$vis_demo_name/model \
77-
--data=../data/$vis_demo_name/data.txt \
78-
--refer=../data/$vis_demo_name/result.txt \
87+
--modeldir=$DATA_DIR/$vis_demo_name/model \
88+
--data=$DATA_DIR/$vis_demo_name/data.txt \
89+
--refer=$DATA_DIR/$vis_demo_name/result.txt \
7990
--use_gpu=$use_gpu
8091
if [ $? -ne 0 ]; then
8192
echo "vis demo $vis_demo_name runs fail."
8293
exit 1
8394
fi
8495
done
8596
done
97+
98+
# --------tensorrt mobilenet------
99+
if [ $USE_TENSORRT == ON -a $TEST_GPU_CPU == ON ]; then
100+
rm -rf *
101+
cmake .. -DPADDLE_LIB=${PADDLE_ROOT}/build/fluid_install_dir/ \
102+
-DWITH_MKL=$TURN_ON_MKL \
103+
-DDEMO_NAME=vis_demo \
104+
-DWITH_GPU=$TEST_GPU_CPU \
105+
-DWITH_STATIC_LIB=$WITH_STATIC_LIB \
106+
-DUSE_TENSORRT=$USE_TENSORRT \
107+
-DTENSORRT_INCLUDE_DIR=$TENSORRT_INCLUDE_DIR \
108+
-DTENSORRT_LIB_DIR=$TENSORRT_LIB_DIR
109+
make -j
110+
./vis_demo \
111+
--modeldir=$DATA_DIR/mobilenet/model \
112+
--data=$DATA_DIR/mobilenet/data.txt \
113+
--refer=$DATA_DIR/mobilenet/result.txt \
114+
--use_gpu=true \
115+
--use_trt=true
116+
fi
86117
done
87118
set +x

paddle/fluid/inference/api/demo_ci/vis_demo.cc

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ DEFINE_string(
3333
"path of data; each line is a record, format is "
3434
"'<space splitted floats as data>\t<space splitted ints as shape'");
3535
DEFINE_bool(use_gpu, false, "Whether use gpu.");
36+
DEFINE_bool(use_trt, false, "Whether use trt.");
3637

3738
namespace paddle {
3839
namespace demo {
@@ -100,20 +101,32 @@ void CheckOutput(const std::string& referfile, const PaddleTensor& output) {
100101
/*
101102
* Use the native fluid engine to inference the demo.
102103
*/
103-
void Main(bool use_gpu) {
104-
NativeConfig config;
105-
config.param_file = FLAGS_modeldir + "/__params__";
106-
config.prog_file = FLAGS_modeldir + "/__model__";
107-
config.use_gpu = use_gpu;
108-
config.device = 0;
109-
if (FLAGS_use_gpu) {
104+
void Main(bool use_gpu, bool use_trt) {
105+
std::unique_ptr<PaddlePredictor> predictor;
106+
if (!use_trt) {
107+
NativeConfig config;
108+
config.param_file = FLAGS_modeldir + "/__params__";
109+
config.prog_file = FLAGS_modeldir + "/__model__";
110+
config.use_gpu = use_gpu;
111+
config.device = 0;
112+
if (FLAGS_use_gpu) {
113+
config.fraction_of_gpu_memory = 0.1; // set by yourself
114+
}
115+
116+
VLOG(3) << "init predictor";
117+
predictor =
118+
CreatePaddlePredictor<NativeConfig, PaddleEngineKind::kNative>(config);
119+
} else {
120+
paddle::contrib::MixedRTConfig config;
121+
config.param_file = FLAGS_modeldir + "/__params__";
122+
config.prog_file = FLAGS_modeldir + "/__model__";
123+
config.use_gpu = true;
124+
config.device = 0;
125+
config.max_batch_size = 1;
110126
config.fraction_of_gpu_memory = 0.1; // set by yourself
127+
predictor = CreatePaddlePredictor<paddle::contrib::MixedRTConfig>(config);
111128
}
112129

113-
VLOG(3) << "init predictor";
114-
auto predictor =
115-
CreatePaddlePredictor<NativeConfig, PaddleEngineKind::kNative>(config);
116-
117130
VLOG(3) << "begin to process data";
118131
// Just a single batch of data.
119132
std::string line;
@@ -131,7 +144,7 @@ void Main(bool use_gpu) {
131144

132145
VLOG(3) << "run executor";
133146
std::vector<PaddleTensor> output;
134-
predictor->Run({input}, &output);
147+
predictor->Run({input}, &output, 1);
135148

136149
VLOG(3) << "output.size " << output.size();
137150
auto& tensor = output.front();
@@ -146,9 +159,12 @@ void Main(bool use_gpu) {
146159

147160
int main(int argc, char** argv) {
148161
google::ParseCommandLineFlags(&argc, &argv, true);
149-
paddle::demo::Main(false /* use_gpu*/);
150-
if (FLAGS_use_gpu) {
151-
paddle::demo::Main(true /*use_gpu*/);
162+
if (FLAGS_use_gpu && FLAGS_use_trt) {
163+
paddle::demo::Main(true /*use_gpu*/, true);
164+
} else if (FLAGS_use_gpu) {
165+
paddle::demo::Main(true /*use_gpu*/, false);
166+
} else {
167+
paddle::demo::Main(false /*use_gpu*/, false /*use_tensorrt*/);
152168
}
153169
return 0;
154170
}

paddle/scripts/paddle_build.sh

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -654,11 +654,21 @@ function gen_fluid_inference_lib() {
654654
if [[ ${WITH_C_API:-OFF} == "OFF" && ${WITH_INFERENCE:-ON} == "ON" ]] ; then
655655
cat <<EOF
656656
========================================
657-
Deploying fluid inference library ...
657+
Generating fluid inference library ...
658658
========================================
659659
EOF
660660
cmake .. -DWITH_DISTRIBUTE=OFF
661661
make -j `nproc` inference_lib_dist
662+
fi
663+
}
664+
665+
function tar_fluid_inference_lib() {
666+
if [[ ${WITH_C_API:-OFF} == "OFF" && ${WITH_INFERENCE:-ON} == "ON" ]] ; then
667+
cat <<EOF
668+
========================================
669+
Taring fluid inference library ...
670+
========================================
671+
EOF
662672
cd ${PADDLE_ROOT}/build
663673
cp -r fluid_install_dir fluid
664674
tar -czf fluid.tgz fluid
@@ -673,7 +683,7 @@ function test_fluid_inference_lib() {
673683
========================================
674684
EOF
675685
cd ${PADDLE_ROOT}/paddle/fluid/inference/api/demo_ci
676-
./run.sh ${PADDLE_ROOT} ${WITH_MKL:-ON} ${WITH_GPU:-OFF}
686+
./run.sh ${PADDLE_ROOT} ${WITH_MKL:-ON} ${WITH_GPU:-OFF} ${INFERENCE_DEMO_INSTALL_DIR} ${TENSORRT_INCLUDE_DIR:-/usr/local/TensorRT/include} ${TENSORRT_LIB_DIR:-/usr/local/TensorRT/lib}
677687
./clean.sh
678688
fi
679689
}
@@ -722,6 +732,7 @@ function main() {
722732
fluid_inference_lib)
723733
cmake_gen ${PYTHON_ABI:-""}
724734
gen_fluid_inference_lib
735+
tar_fluid_inference_lib
725736
test_fluid_inference_lib
726737
;;
727738
check_style)

0 commit comments

Comments
 (0)