【玩转PointPillars】Ubuntu16.04虚拟环境中安装onnx-tensorrt

    之所以安装onnx-tensorrt,是因为PointPillars用Pytorch训练的模型在转onnx后,我们借助onnx-tensorrt使用tensorrt进行模型推理,以达到模型加速的目的。

    凡是不申明自己环境的软件部署都是耍流氓,我在尝试了多个不同的软件环境(包括操作系统,Python,CUDA等)后,在以下环境中成功了。

  • ubuntu 16.04
  • cuda 10.2
  • python 3.6
  • TensorRT 7.1.3.4
  • protobuf 3.14.0
  • cmake 3.16.8
  • onnx-tensorrt 7.1

1.创建python虚拟环境

    这里主要还是参考了项目SmallMunich/nutonomy_pointpillars对虚拟环境的配置说明。因为此文的重点不在于PointPillars项目的使用,关于项目本身依赖的软件安装请参考SmallMunich/nutonomy_pointpillars

(base) ➜  ~ conda create -n pointpillars python=3.6 anaconda
(base) ➜  ~ conda activate pointpillars

注:后续操作都是在虚拟环境中进行。

2.安装TensorRT

    这一步比较简单,从nvidia官网下载TensorRT的tar包(TensorRT-7.1.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz),解压放到合适的位置(如:/opt/nvidia/目录)。放置好后便有了tensorrt的库文件,但是要通过python调用tensorrt还需要安装其python包。

(pointpillars) ➜  python pwd
/opt/nvidia/TensorRT-7.1.3.4/python

(pointpillars) ➜  python ll
总用量 2.5M
-rw-r--r-- 1 zw zw 502K 6月  17  2020 tensorrt-7.1.3.4-cp27-none-linux_x86_64.whl
-rw-r--r-- 1 zw zw 495K 6月  17  2020 tensorrt-7.1.3.4-cp34-none-linux_x86_64.whl
-rw-r--r-- 1 zw zw 496K 6月  17  2020 tensorrt-7.1.3.4-cp35-none-linux_x86_64.whl
-rw-r--r-- 1 zw zw 496K 6月  17  2020 tensorrt-7.1.3.4-cp36-none-linux_x86_64.whl
-rw-r--r-- 1 zw zw 497K 6月  17  2020 tensorrt-7.1.3.4-cp37-none-linux_x86_64.whl

这里根据所用的python版本选择相应的whl文件。

(pointpillars) ➜  python #pip install tensorrt-7.1.3.4-cp36-none-linux_x86_64.whl

如此,你应该可以正确地导入tensorrt模块了。

(pointpillars) ➜  python ipython
Python 3.6.10 |Anaconda, Inc.| (default, May  8 2020, 02:54:21) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.16.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import tensorrt                                                                                                                                                   

In [2]: tensorrt                                                                                                                                                             
Out[2]: <module 'tensorrt' from '/home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/tensorrt/__init__.py'>

我们可以看看导入的tensorrt模块实际上调用了那些库。

(pointpillars) ➜  python cd /home/zw/.conda/envs/second.pytorch/lib/python3.6/site-packages/tensorrt/           
(pointpillars) ➜  tensorrt ll
总用量 2.2M
-rw-rw-r-- 1 zw zw 5.6K 6月  30 23:09 __init__.py
drwxrwsr-x 2 zw zw 4.0K 6月  30 23:09 __pycache__
-rwxrwxr-x 1 zw zw 2.2M 6月  30 23:09 tensorrt.so
(pointpillars) ➜  tensorrt ldd tensorrt.so 
    linux-vdso.so.1 (0x00007fff81394000)
    libnvinfer.so.7 => /opt/nvidia/TensorRT-7.1.3.4/lib/libnvinfer.so.7 (0x00007f6cd8e71000)
    libnvonnxparser.so.7 => /opt/nvidia/TensorRT-7.1.3.4/lib/libnvonnxparser.so.7 (0x00007f6cd8a00000)
    libnvparsers.so.7 => /opt/nvidia/TensorRT-7.1.3.4/lib/libnvparsers.so.7 (0x00007f6cd84ce000)
    libnvinfer_plugin.so.7 => /opt/nvidia/TensorRT-7.1.3.4/lib/libnvinfer_plugin.so.7 (0x00007f6cd7b4d000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6cd77c4000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6cd75ac000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6cd71bb000)
    libcublas.so.10 => /usr/lib/x86_64-linux-gnu/libcublas.so.10 (0x00007f6cd2f05000)
    libcudnn.so.8 => /usr/local/cuda/lib64/libcudnn.so.8 (0x00007f6cd2cdc000)
    libmyelin.so.1 => /opt/nvidia/TensorRT-7.1.3.4/lib/libmyelin.so.1 (0x00007f6cd24b7000)
    libnvrtc.so.10.2 => /usr/local/cuda/lib64/libnvrtc.so.10.2 (0x00007f6cd0d0a000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f6cd0b02000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6cd08fe000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6cd0560000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6ce850b000)
    libcublasLt.so.10 => /usr/lib/x86_64-linux-gnu/libcublasLt.so.10 (0x00007f6cce6cd000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f6cce4ae000)
 

3.安装onnx-tensorrt

https://github.com/onnx/onnx-tensorrt

(pointpillars) -> git clone --recursive -b 7.1  https://github.com/onnx/onnx-tensorrt.git  onnx_tensorrt

注意git clone的时候要加上--recursive选项,它会顺便自动克隆所依赖的第三方库(onnx),否则后面编译的时候会报third_party/onnx不存在之类的错误。

(pointpillars) -> cd onnx_tensorrt #进入下载目录
(pointpillars) -> mkdir build #创建cmake编译用的build文件夹
(pointpillars) -> cd build/

(pointpillars) -> cmake .. -DTENSORRT_ROOT=/opt/nvidia/TensorRT-7.1.3.4 #cmake的时候要通过TENSORRT_ROOT选项指定之前安装的tensorrt的路径
(pointpillars) -> make -j8 #编译吧,皮卡丘
......

ml.pb.h:10:40: fatal error: google/protobuf/port_def.inc: No such file or directory
compilation terminated.

....
make: *** [all] Error 2

哎哟,报错了。按照下面的方式可以解决,感谢这位大侠。

重新make一下,库文件就生成好了。要在python中使用onnx-tensorrt包还需要还要安装onnx-tensorrt的python包。

4. 安装onnx-tensorrt python package

        在正式安装onnx_tensorrt的python包之前,需要在setup.py中为pycuda指定安装版本,否则会下载最新版本(2021),存在兼容性问题。对于ubuntu16.04+python3.6,我指定的是2020.1版本。我不知道ubuntu18.04是不是不需要这么设置,至少在16.04上是要设置的。

96 setup(name='onnx_tensorrt',
 97       version=__version__,
 98       description='TensorRT backend for ONNX',
 99       author='NVIDIA Corporation',
100       author_email='bbarsdell@nvidia.com',
101       url='https://github.com/onnx/onnx-tensorrt',
102       packages=find_packages(),
103       ext_modules=[nv_onnx_parser_module],
104       install_requires=[
105           "numpy>=1.8.1",
106           "tensorrt>=3.0.0",
107           "onnx>=1.0.1",
108           "pycuda==2020.1",
109       ])                        

后面的就好办了。

(pointpillars) onnx-tensorrt$ python setup.py build

.....
nv_onnx_parser_bindings.i
unable to execute 'swig': No such file or directory
error: command 'swig' failed with exit status 1

又有一个小错误,缺少swig。不要担心,使用apt或者cond安装它就好了。

#(pointpillars) onnx-tensorrt$ sudo apt-get install swig
(pointpillars) onnx-tensorrt$ conda install swig

ok,继续。

(pointpillars) onnx-tensorrt$ python setup.py build
(pointpillars) onnx-tensorrt$ python setup.py install

【补充】

> TensorRT几个核心库之间的关系

核心库1:https://github.com/NVIDIA/TensorRT
这是github上的TensorRT的一个项目库,它包含了NVIDIA TensorRT的开源软件(OSS)组件,包括TensoRT插件和解析器(Caffe和ONNX)的源代码,以及演示TensorRT平台的用法和功能的样例应用程序。

核心库2:https://developer.nvidia.com/nvidia-tensorrt-7x-download
TensorRT的核心库文件,这个需要根据对应的平台和CUDA版本下载对应的库即可。编译核心库1中的文件需要依赖该库。

核心库3:https://github.com/onnx/onnx-tensorrt
将onnx模型转换成TensorRT模型的一个库。

【参考文献】

https://github.com/onnx/onnx-tensorrt/issues/350

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值