本文以rangenet_lib的编译为例子,讲解如何通过tar file(而不是deb)来安装TensorRT, 这个segmentation库用到了TensorRT C++ bindings.
环境
OS: Ubuntu 16.04
NVIDIA-driver: 430.64
CUDA: 10.0
cuDNN: 7.6.5
TensorRT: 5.1.5.0
问题
由于之前CUDA是使用runfile安装的, 而不是用deb安装,因此与CUDA相关的一些依赖是没有办法通过dpkg来解决的,从而导致不能按照NVIDIA官网的要求来使用deb来安装tensorrt,这一点官网也有说明。
因此,我们只能使用官网的tar file来安装。这种方式严格上讲并不是安装,因为只是下载和解压了一个tar,而在后续的过程中,具体如何在CMake或其他构建工具中引入TensorRT的相关库,本文将进行详细说明。
1. 下载TensorRT的tar file
这里以TensorRT 5.1.X为例。
首先在官网下载对应CUDA版本和OS版本的tar file;
https://developer.nvidia.com/nvidia-tensorrt-5x-downloaddeveloper.nvidia.com然后解压,这里我们解压得到的路径是
/home/hvt/Downloads/TensorRT-5.1.5.0
目录里有以下内容
可以看到其中的inclue和lib等子目录,这个在后边配置CMake的时候会用到.
2. 建立软链接
需要将lib目录下的这几个动态库软链接到/usr/lib/x86_64-linux-gnu/下:
sudo ln -s /home/hvt/Downloads/TensorRT-5.1.5.0/lib/libnvinfer.so /usr/lib/x86_64-linux-gnu/
sudo ln -s /home/hvt/Downloads/TensorRT-5.1.5.0/lib/libnvinfer_plugin.so /usr/lib/x86_64-linux-gnu/
sudo ln -s /home/hvt/Downloads/TensorRT-5.1.5.0/lib/libnvparsers.so /usr/lib/x86_64-linux-gnu/
sudo ln -s /home/hvt/Downloads/TensorRT-5.1.5.0/lib/libnvonnxparser.so /usr/lib/x86_64-linux-gnu/
sudo ln -s /home/hvt/Downloads/TensorRT-5.1.5.0/lib/libnvonnxparser_runtime.so /usr/lib/x86_64-linux-gnu/
请根据你自己的解压路径调整源目录的位置;
如果不进行这一步的话,在后边某些应用使用到了TensorRT时, ld就会报下边的错误:
这应该是ld找不到上述几个动态库的位置导致的,我尝试过在LD_LIBRARY_PATH中加入/home/hvt/Downloads/TensorRT-5.1.5.0/lib/,但是没有解决问题,因此才使用了上述的软链接方法;如果有更优雅更干净的方法,欢迎指出。
3. Python Binding安装
按照官网的tar file部分的教程安装即可。
Deep Learning SDK Documentationdocs.nvidia.com4. 如何写CMakeList.txt
经过上述的过程TensorRT在理论上就安装完了,但是由于没有使用deb安装,在C++应用使用到TensorRT时,需要对CMakeList进行一些特殊的配置,否则仅使用find_package是找不到TensorRT的。
这里我们以rangenet_lib这个应用的编译为例,其他的应用大同小异。这个库默认是find_package能直接找到TensorRT,但这显然不适合我们的情况,需要进行以下修改:
PRBonn/rangenet_libgithub.com首先在rangenet_lib/cmake下边的tensorrt-config.cmake的最前边加上这几行:
set (TENSORRT_ROOT "/home/hvt/Downloads/TensorRT-5.1.5.0")
list(APPEND CMAKE_LIBRARY_PATH "${TENSORRT_ROOT}/lib")
file(GLOB TENSORRT_LIBRARIES "${TENSORRT_ROOT}/lib/*.so")
set(TENSORRT_INCLUDE_DIRS "${TENSORRT_ROOT}/include")
其中第一行,TENSORRT_ROOT后边的路径,改成你自己机器上在第1步解压之后得到的根目录。
然后再正常编译就可以了,find_package会直接找到TensorRT。
这里tensorrt-config.cmake和一般的FindTensorRT.cmake的作用是相同的,具体怎么添加上述几行语句要看你的应用是什么样的,直接加到CMakeLists里应该也是可行的。