PaadleInference源码编译操作流程

1  编译环境

(1)操作系统:Ubuntu 18.04;

(2)处理器:I7-10750H;

(3)GPU:GTX 1650Ti Mobile

(4)GPU支持:CUDA10.2,cudnn7.6.5,tensorrt6.0.1;

(5)PaddlePaddle源码版本:2.3;

(6)GCC版本:8.4.0;

(7)cmake版本:3.25.0。

2  编译准备

参考PaddlePaddle官方编译指南。

(1)从gitee获取PaadlePaddle源码。

(2)使用apt安装libopenblas

apt install libopenblas

3  修改PaddlePaddle编译脚本

由于github访问问题,需要修改PaddlePaddle编译脚本,替换git地址为gitee的paddlemirror源。

https://gitee.com/paddle-mirror/

修改源码目录/cmake/external下面的脚本文件中的git源地址。

cryptopp;ctyptopp-cmake(包含在cryptopp的脚本文件);gflags;glog;gloo;lapack;protobuf;utf8proc;warpctc;xbyak;xxhash;zlib

4  编译

(1)配置

1)GPU不使用TensorRT

cmake .. -DPY_VERSION=3 \

        -DWITH_TESTING=OFF \

        -DWITH_GPU=ON \

        -DWITH_NCCL=OFF \

        -DON_INFER=ON \

-DWITH_MKL=OFF \

        -DWITH_PYTHON=OFF \

        -DCUDA_CUDART_LIBRARY=/usr/local/cuda/lib64/libcudart.so \

        -DCUDA_ARCHITECTURES=7.5 \

        ..

2)GPU使用TensorRT

cmake .. -DPY_VERSION=3 \

        -DWITH_TESTING=OFF \

        -DWITH_GPU=ON \

        -DWITH_NCCL=OFF \

        -DON_INFER=ON \

-DWITH_MKL=OFF \

        -DWITH_PYTHON=OFF \

        -DCUDA_CUDART_LIBRARY=/usr/local/cuda/lib64/libcudart.so \

        -DCUDA_ARCHITECTURES=7.5 \

-DWITH_TENSORRT=ON \

-DTENSORRT_ROOT=/usr \

        ..

(2)设置ulimit

sudo sh -c "ulimit -n 102400 && exec su $LOGNAME"

(3)编译

编译openblas需要进行如下配置:

export OPENBLAS_NUM_THREADS=4

export GOTO_NUM_THREADS=4

export OMP_NUM_THREADS=4

正式编译PaddlePaddle

make -j4 TARGET=SKYLAKEX DYNAMIC_ARCH=1

编译PaddleInference

make inference_lib_dist -j4

5  编译PaddleInference例程

使用PaddleDetection/deploy/cpp下的例程源码。复制出来一份。

(1)修改script/build.sh

# 是否使用GPU(即是否使用 CUDA)

WITH_GPU=ON

# 是否使用MKL or openblas,TX2需要设置为OFF

WITH_MKL=OFF

# TensorRT 的include路径

TENSORRT_INC_DIR=/usr/include/x86_64-linux-gnu

# TensorRT 的lib路径

TENSORRT_LIB_DIR=/usr/lib/x86_64-linux-gnu

# Paddle 预测库路径

PADDLE_DIR=~/Paddle-release-2.3/build_cuda/paddle_inference_install_dir

# CUDA 的 lib 路径

CUDA_LIB=/usr/local/cuda/lib64

# CUDNN 的 lib 路径

CUDNN_LIB=/usr/lib/x86_64-linux-gnu

#opencv路径

OPENCV_DIR=/usr/local/lib/cmake/opencv4

注意:由于我已经安装opencv4,PaddlePaddle官方默认下载使用opencv3,所以我把自动下载代码注释掉,直接设置OPENCV_DIR。

修改CMakeLists.txt

if (WIN32)

  include_directories("${PADDLE_DIR}/paddle/fluid/inference")

  include_directories("${PADDLE_DIR}/paddle/include")

  link_directories("${PADDLE_DIR}/paddle/fluid/inference")

  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR} NO_DEFAULT_PATH)

else ()

  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR} NO_DEFAULT_PATH)

 # find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)

  include_directories("${PADDLE_DIR}/paddle/include")

  link_directories("${PADDLE_DIR}/paddle/lib")

endif ()

include_directories(${OpenCV_INCLUDE_DIRS})

另一处是:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2 -fopenmp -std=c++11")

优化编译应使用大写字母“O”。

然后运行./scripts/build.sh进行编译。

编译报错,提示opencv3的一些宏未定义,引入opencv头文件,使用opencv4的宏。

预测video时,提示VideoWriter指定的视频编码类型有误。修改main.cc文件,将编码类型改为-1,运行时将打印支持的视频编码类型。使用支持的视频编码类型的ID即可。

如果需要使用摄像头,需要修改:

if (FLAGS_model_dir.empty() ||

(FLAGS_image_file.empty() && FLAGS_image_dir.empty() &&

(FLAGS_camera_id == -1) &&

FLAGS_video_file.empty()))

测试命令(摄像头)

./build/main --model_dir=/home/user/PaddleDetection/inference_model/yolov3_darknet53_270e_coco --camera_id=0 --device=GPU --run_mode=trt_int8

测试命令(视频文件)

./build/main --model_dir=/home/user/PaddleDetection/inference_model/yolov3_darknet53_270e_coco --video_file=/home/user/zhangchen/test_media/videos/VID_20220612_085102.mp4 --device=GPU --run_mode=trt_int8

测试命令(图片)

./build/main --model_dir=/home/user/PaddleDetection/inference_model/yolov3_darknet53_270e_coco --image_file=/home/user/zhangchen/test_media/images/heying.jpeg --device=GPU

经测试,使用trt_int8模式比默认的paddle模式(GPU)快50%左右。

识别1920×1080分辨率视频:

trt_int8模式推理每帧70±5ms,整体每帧90±5ms;

paddle(GPU)模式推理每帧110±5ms,整体每帧130±5ms。

trt缺点:启动慢,约1分钟。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值