PaadleInference源码编译操作流程
创始人
2024-02-07 22:20:18
0

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分钟。

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...