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

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...