Tensorrt-Plugin-OSS的安装方法

Tensorrt-Plugin-OSS的安装方法

在学习使用deepstream以及Tensorrt的过程当中,发现Tensorrt对一些现在常见网络如Retinanet,YOLOV3,YOLOV4,SSD的一些层无法解析,因此需要下载编译Tensorrt自己实现的一些Plugin层,这些层的实现作为插件是不会添加在常规的Tensorrt下载中的,因此本教程旨在提供OSS插件的下载编译手段。(本教程建议配合Deepstream5. 0一起食用更佳哦!)

依托环境

Ubuntu 18.04.3 LTS
cuda-10.2
cuDNN 7.6.5
TensorRT 7.0.0.11

step1-git-lfs的安装

git-lfs提供了使用git-clone下载大于5MB的手段,方便我们后续直接用命令行的方式下载模型等内容,可能报错,解决方法:无法添加gitlfs

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install

step2-CMAKE的编译安装

根据官网要求(TensorRT OSS requires cmake >= v3.13, so install cmake 3.13 if your cmake version is lower than 3.13)因此我们需要卸载安装过的CMAKE同时安装对应的版本。

#从git上下载安装包
sudo apt remove --purge --auto-remove cmake
wget https://github.com/Kitware/CMake/releases/download/v3.13.5/cmake-3.13.5.tar.gz
tar xvf cmake-3.13.5.tar.gz
cd cmake-3.13.5/
#接下来这步非常关键,因为CMAKE默认采用SSH的方式去下载包,因为在后续OSS的编译过程当中会存在某一些包下载不下来,导致编译失败,解决办法就是采用下列代码
sudo apt-get install curl
sudo apt-get install libssl-dev libcurl4-openssl-dev
./bootstrap --system-curl 
make -j$(nproc)
sudo make install
sudo ln -s /usr/local/bin/cmake /usr/bin/cmake

上述建立软连接时,可能存在失败的原因,具体原因我遇到的是因为之前的软连接没有删掉,只需要sudo rm 就解决了。
这一步后续我在装其他电脑时遇见了找不到 libGL.so的问题,经过查询应该是软连接没有设置好,解决方法是solution1 solution2

step3-OSS插件的编译

  1. 首先是插件包的下载
git clone -b release/7.0 https://github.com/nvidia/TensorRT
cd TensorRT/
git submodule update --init --recursive
export TRT_SOURCE=`pwd`
cd $TRT_SOURCE
mkdir -p build && cd build
  1. cmake
    这里主要讲几个参数的填写
    DGPU_ARCHS:是根据GPU算力来决定的,1050ti对应的是61的算力,2080ti对应的是75的算力,具体的算力可以自己去查。
    DTRT_LIB_DIR:这个参数填写的是正常下载Tensorrt解压包的对应的lib的位置,例如在我电脑上位置为
    /home/xxx/download/TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6/TensorRT-7.0.0.11/lib
    DTRT_BIN_DIR:这个参数对应的是编译生成的新的Tensorrt-lib的位置,在make过后会在out文件夹下新的Tensorrt的lib文件,在后续的使用中直接在环境变量链接该out文件夹就可以使用最新的Tensorrt-lib。
cmake .. -DGPU_ARCHS=xy  -DTRT_LIB_DIR=/usr/lib/aarch64-linux-gnu/ -DCMAKE_C_COMPILER=/usr/bin/gcc -DTRT_BIN_DIR=`pwd`/out
  1. 编译OSS插件
make nvinfer_plugin -j$(nproc)

安装所有插件

这一步非常的坑,常规情况下进行到这一步只需要将对应的.so文件拷贝到usr/lib中就可以了,但是不清楚为什么拷贝后仍然插件不可用,因此按照我这种步骤虽然繁琐,但是确实可用,欢迎提出建议。

#在build文件夹下执行命令
sudo make install

ps:这一步遇到了一个

/bin/sh: python: not found

的问题,这个是因为python没有链接,解决办法solution
正常来讲这一步过后就应该在out文件夹下产生了很多很多个与之前下载的Tensorrt/lib下一样的生成的文件,尚不清楚这些与正常下载的有何不同,但是可以确定的libnvinfer_plugin相关的so一定是最新的,这也是后续我使用该out文件夹作为后续lib的替代的原因。

接下来需要进行一些拷贝和删除工作,首先需要将usr/lib文件夹下所有和libnvinfer_plugin有关的文件删掉,然后将out文件夹下的libnvinfer_plugin.so,libnvinfer_plugin.so.7.0.0,libnvinfer_plugin_static.a拷贝到/usr/lib/x86_64-linux-gnu下,并设定环境变量,代码如下:

sudo cp libnvinfer_plugin.so /usr/lib/x86_64-linux-gnu/libnvinfer_plugin.so.7
sudo cp libnvinfer_plugin.so.7.0.0 /usr/lib/x86_64-linux-gnu/libnvinfer_plugin.so.7.0.0
sudo cp libnvinfer_plugin_static.a /usr/lib/x86_64-linux-gnu/libnvinfer_plugin_static.a
sudo ldconfig
#将原Tensorrt下的libnvinfer_plugin.so.7拷贝到out文件夹下,这样就确定可以将out当作新的lib库使用了
sudo cp /原Tensorrt/lib/libnvinfer_plugin.so out/libnvinfer_plugin.so

环境变量的设定

sudo gedit .bashrc
##打开后添加环境变量,将Tensorrt的lib库连接到out文件夹,就可以使用最新的lib库了
export LD_LIBRARY_PATH=/home/xxx/download/deepstream_tlt_apps-master/TRT-OSS/x86/TensorRT/build/out:$LD_LIBRARY_PATH

deepstream5.0插件解析层的编译

进行到上一步的时候其实已经解决了OSS插件的编译,后续是因为项目需要,需要再编译deepstream的插件

git clone https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps.git
#进入下载好的目录
cd deepstream_tlt_apps/
export DS_SRC_PATH=你的deepstream的存放位置      // e.g. /opt/nvidia/deepstream/deepstream
export CUDA_VER=cuda版本                                      // e.g. 10.2
make

你可能感兴趣的:(deepstream,Tensorrt-0SS,深度学习)