TensorRT安装及使⽤教程
参考:
1 什么是TensorRT
⼀般的深度学习项⽬,训练时为了加快速度,会使⽤多 GPU 分布式训练。但在部署推理时,为了降低成本,往往使⽤单个 GPU 机器甚⾄嵌⼊式平台(⽐如 NVIDIA Jetson)进⾏部署,部署端也要有与训练时相同的深度学习环境,如 caffe,TensorFlow 等。由于训练的⽹络模型可能会很⼤(⽐如,inception,resnet 等),参数很多,⽽且部署端的机器性能存在差异,就会导致推理速度慢,延迟⾼。这对于那些⾼实时性的应⽤场合是致命的,⽐如⾃动驾驶要求实时⽬标检测,⽬标追踪等。所以为了提⾼部署推理的速度,出现了很多轻量级神经⽹络,⽐如 squeezenet,mobilenet,shufflenet 等。基本做法都是基于现有的经典模型提出⼀种新的模型结构,然后⽤这些改造过的模型重新训练,再重新部署。
⽽ TensorRT 则是对训练好的模型进⾏优化。 TensorRT 就只是推理优化器。当你的⽹络训练完之后,可以将训练模型⽂件直接丢进TensorRT中,⽽不再需要依赖深度学习框架(Caffe,TensorFlow 等),如下:
可以认为 TensorRT 是⼀个只有前向传播的深度学习框架,这个框架可以将 Caffe,TensorFlow 的⽹络模型解析,然后与 TensorRT 中对应的层进⾏⼀⼀映射,把其他框架的模型统⼀全部转换到 TensorRT 中,然后在 TensorRT 中可以针对 NVIDIA ⾃家 GPU 实施优化策略,并进⾏部署加速。
如果想了解更多关于 TensorRT 的介绍,可参考
2 TensorRT安装
TensorRT 的安装⽅式很简单,只需要注意⼀些环境的依赖关系就可以,我们以 TensorRT 5.0.4 版本为例,参考,这⾥简单总结⼀下步骤
TensorRT ⽀持的环境和 Python 版本如表所⽰()
2.1 环境确认
确认 CUDA 版本是 9.0 或者 10.0,可通过运⾏ nvcc -V 指令来查看 CUDA,如果不是 9.0 以上,则需要先把 CUDA 版本更新⼀下cudnn 版本是 7.3.1,如果不满⾜要求,按照《》进⾏升级
需安装有 TensorFlow,uff模块需要
2.2 安装 pycuda
如果要使⽤ Python 接⼝的 TensorRT,则需要安装 Pycuda
pip install 'pycuda>=2017.1.1'
我在 ubuntu 16.04 上安装时报错如下
ERROR: Could not build wheels for pycuda which use PEP 517 and cannot be installed directly
⽬前还没到解决⽅法,但在 ubuntu18.04 上安装时没问题
2.3 下载安装包
1. 进⼊
2. 点击 Download Now(需要登录英伟达账号,没有的注册⼀个)
3. 选择下载的版本
4. 完成问卷调查
5. 选择同意协议
6. 根据⾃⼰的系统版本和 CUDA 版本,选择安装包,如图所⽰(如果是完整安装,建议选择Tar File Install Packages,这样可以⾃⾏
选择安装位置)
2.4 安装指令
安装时只需要把压缩⽂件解压,相应的库⽂件拷贝到系统路径下即可
#在home下新建⽂件夹,命名为tensorrt_tar,然后将下载的压缩⽂件拷贝进来解压
tar xzvf TensorRT-5.0.2.6.Ubuntu-16.04.4.x86_64-gnu.cuda-9.0.cudnn7.3.tar
#解压得到TensorRT-5.0.2.6的⽂件夹,将⾥边的lib绝对路径添加到环境变量中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lthpc/tensorrt_tar/TensorRT-5.0.2.6/lib
为了避免其它软件不到 TensorRT 的库,建议把 TensorRT 的库和头⽂件添加到系统路径下
# TensorRT路径下
sudo cp -r ./lib/* /usr/lib
sudo cp -r ./include/* /usr/include
如果要使⽤ python 版本,则使⽤ pip 安装,执⾏下边的指令
# 安装TensorRT
cd TensorRT-5.0.2.6/python
pip install tensorrt-5.0.2.6-py2.py3-none-any.whl
# 安装UFF,⽀持tensorflow模型转化
cd TensorRT-5.0.2.6/uff
pip install uff-0.5.5-py2.py3-none-any.whl
# 安装graphsurgeon,⽀持⾃定义结构
cd TensorRT-5.0.2.6/graphsurgeon
pip install graphsurgeon-0.3.2-py2.py3-none-any.whl
很多⼈安装某些版本的时候会报错,⽐如
ERROR: tensorrt-6.0.1.5-cp36-none-linux_x86_64.whl is not a supported wheel on this platform.
这个是因为⾃⼰ python 版本不对,输⼊ pip --version 来查看 python 版本是否是⾃⼰想象中的版本,不对的话切换⼀下 ============= 20200618更新 ===============
为了避免安装时各种问题,我们也可以使⽤ deb 包的⽅式安装,即在 2.3 步骤中选择⾃⼰系统对应的版本,然后使⽤如下指令安装
# ⾸先根据⾃⼰下载的版本填写os和tag变量
# 我下载的版本是 nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.0.0.11-ga-20191216_1-1_amd64.deb
# 得到如下值
os="ubuntu1804"
tag="cuda10.2-trt7.0.0.11-ga-20191216"
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-${tag}/7fa2af80.pub
sudo apt-get update
sudo apt-get install tensorrt
sudo apt-get install python-libnvinfer-dev # for python2
sudo apt-get install python3-libnvinfer-dev # for python3
sudo apt-get install uff-converter-tf # for tensorflow
安装完之后运⾏下边指令
dpkg -l | grep TensorRT
输出如下,表明安装成功
ii graphsurgeon-tf 7.1.0-1+cuda10.2 amd64 GraphSurgeon for TensorRT package
ii libnvinfer-bin 7.1.0-1+cuda10.2 amd64 TensorRT binaries下载安装
ii libnvinfer-dev 7.1.0-1+cuda10.2 amd64 TensorRT development libraries and headers
ii libnvinfer-doc 7.1.0-1+cuda10.2 all TensorRT documentation
ii libnvinfer-plugin-dev 7.1.0-1+cuda10.2 amd64 TensorRT plugin libraries
ii libnvinfer-plugin7 7.1.0-1+cuda10.2 amd64 TensorRT plugin libraries
ii libnvinfer-samples 7.1.0-1+cuda10.2 all TensorRT samples
ii libnvinfer7 7.1.0-1+cuda10.2 amd64 TensorRT runtime libraries
ii libnvonnxparsers-dev 7.1.0-1+cuda10.2 amd64 TensorRT ONNX libraries
ii libnvonnxparsers7 7.1.0-1+cuda10.2 amd64 TensorRT ONNX libraries
ii libnvparsers-dev 7.1.0-1+cuda10.2 amd64 TensorRT parsers libraries
ii libnvparsers7 7.1.0-1+cuda10.2 amd64 TensorRT parsers libraries
ii python-libnvinfer 7.1.0-1+cuda10.2 amd64 Python bindings for TensorRT
ii python-libnvinfer-dev 7.1.0-1+cuda10.2 amd64 Python development package for TensorRT
ii python3-libnvinfer 7.1.0-1+cuda10.2 amd64 Python 3 bindings for TensorRT
ii python3-libnvinfer-dev 7.1.0-1+cuda10.2 amd64 Python 3 development package for TensorRT
ii tensorrt 7.1.0.x-1+cuda10.2 amd64 Meta package of TensorRT
ii uff-converter-tf 7.1.0-1+cuda10.2 amd64 UFF converter for TensorRT package
2.5 环境测试
运⾏ python 测试,导⼊模块不报错就表明安装正确
注意:导⼊ uff 的时候需要安装 tensorflow 模块,tensorflow 版本要与 cuda 版本对应,⽐如 cuda9 要对应 tensorflow1.12 及以下版本,以上版本需要 cuda10,具体参考
如果导⼊ TensorRT 报错如下,则是因为 python 版本不对,应根据 2.1 节上边的那个表调整⾃⼰的 python 版本
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/xxx/anaconda3/lib/python3.6/site-packages/tensorrt/__init__.py", line 1, in <module>
from .tensorrt import *
ImportError: /home/xxx/anaconda3/lib/python3.6/site-packages/tensorrt/tensorrt.so: undefined symbol:
_Py_ZeroStruct
安装后会在 /usr/src ⽬录下⽣成⼀个 TensorRT ⽂件夹,⾥⾯包含 bin,data,python,samples 四个⽂件夹,samples ⽂件夹中是官⽅例程的源码;data,python ⽂件中存放官⽅例程⽤到的资源⽂件,⽐如 caffemodel ⽂件,TensorFlow 模型⽂件,⼀些图⽚等;bin ⽂件夹⽤于存放编译后的⼆进制⽂件。
============= 20200618更新 ===============
也可以使⽤如下⽅法测试
sudo cp -r /usr/src/tensorrt/ ~/
cd ~/tensorrt/samples
sudo make
cd ../bin
./sample_int8 mnist
3 使⽤流程
在 /TensoRT-5.0.2.6/samples/python ⽂件夹下有很多 python 的例⼦,我们以第⼀个 end_to_end_tensorflow_mnist 的例⼦为例,描述 TensorRT 的使⽤流程,在 README.md ⽂件⾥也说得很明⽩了
3.1 安装依赖
需要安装好 numpy、Pillow、pycuda、tensorflow 等环境,如果都有可以跳过
3.2 ⽣成pb⽂件
mkdir models
python model.py
运⾏ model.py 后,会下载数据 mnist.npz,并开始训练,完成后在 models ⽂件夹下⽣成 lenet5.pb ⽂
件,如果⾃⼰已经训练得到 pb ⽂件,上述过程可以跳过
3.3 格式转化
要将 tensorflow 的 pb ⽂件转化为 uff 格式的⽂件,⾸先到 convert_to_uff ⽂件,看⾃⼰⽤的是哪个版本的 python,如果是
python3,则在 /usr/lib/python3.5/dist-packages/uff/bin ⽂件夹下,如果是 python2,则在 /usr/lib/python2.7/dist-
packages/uff/bin ⽂件夹下
我们在终端中进⼊ end_to_end_tensorflow_mnist,运⾏以下指令
python3.5 /usr/lib/python3.5/dist-packages/uff/bin/convert_to_uff.py --input_file models/lenet5.pb
则会在 models ⽂件夹中⽣成 lenet5.uff ⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论