TensorRT安装及使用教程「建议收藏」

TensorRT安装方法

大家好,又见面了,我是你们的朋友全栈君。

参考:TensorRT(1)-介绍-使用-安装 | arleyzhang

1 什么是TensorRT

一般的深度学习项目,训练时为了加快速度,会使用多 GPU 分布式训练。但在部署推理时,为了降低成本,往往使用单个 GPU 机器甚至嵌入式平台(比如 NVIDIA Jetson)进行部署,部署端也要有与训练时相同的深度学习环境,如 caffe,TensorFlow 等。由于训练的网络模型可能会很大(比如,inception,resnet 等),参数很多,而且部署端的机器性能存在差异,就会导致推理速度慢,延迟高。这对于那些高实时性的应用场合是致命的,比如自动驾驶要求实时目标检测,目标追踪等。所以为了提高部署推理的速度,出现了很多轻量级神经网络,比如 squeezenet,mobilenet,shufflenet 等。基本做法都是基于现有的经典模型提出一种新的模型结构,然后用这些改造过的模型重新训练,再重新部署。

而 TensorRT 则是对训练好的模型进行优化。 TensorRT 就只是推理优化器。当你的网络训练完之后,可以将训练模型文件直接丢进 TensorRT中,而不再需要依赖深度学习框架(Caffe,TensorFlow 等),如下:

TensorRT安装及使用教程「建议收藏」

TensorRT安装及使用教程「建议收藏」

可以认为 TensorRT 是一个只有前向传播的深度学习框架,这个框架可以将  Caffe,TensorFlow 的网络模型解析,然后与 TensorRT 中对应的层进行一一映射,把其他框架的模型统一全部转换到 TensorRT 中,然后在 TensorRT 中可以针对 NVIDIA 自家 GPU 实施优化策略,并进行部署加速。

如果想了解更多关于 TensorRT 的介绍,可参考官网介绍

2 TensorRT安装

TensorRT 的安装方式很简单,只需要注意一些环境的依赖关系就可以,我们以 TensorRT 5.0.4 版本为例,参考官网安装教程,这里简单总结一下步骤

TensorRT 支持的环境和 Python 版本如表所示(来源

TensorRT安装及使用教程「建议收藏」

2.1 环境确认

  • 确认 CUDA 版本是 9.0 或者 10.0,可通过运行 nvcc -V 指令来查看 CUDA,如果不是 9.0 以上,则需要先把 CUDA 版本更新一下
  • cudnn 版本是 7.3.1,如果不满足要求,按照《Linux之cudnn升级方法》进行升级
  • 需安装有 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,这样可以自行选择安装位置)

TensorRT安装及使用教程「建议收藏」

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 测试,导入模块不报错就表明安装正确

TensorRT安装及使用教程「建议收藏」

注意:导入 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 文件

TensorRT安装及使用教程「建议收藏」

需要注意的是:该转化过程只支持在 x86 平台上实现,如果想在 TX2 等嵌入式平台上使用 TensorRT ,需要先在 x86 平台上将 pb 模型转化为 uff 文件,然后再拷贝到 TX2 上使用

3.4 运行文件

运行 sample.py 文件,得到如下输出,表明可完整的使用 TensorRT

TensorRT安装及使用教程「建议收藏」
4 使用自己的模型

前边 3 步相当于是环境的配置,当然还不够,我们需要的是可以转化并运行我们自己的模型,达到加速的效果,因此接下来对相关的工作进行总结,具体转换参考《TX2之TensorRT加速TensorFlow目标检测模型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128721.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Postman安装教程_postman需要联网吗

    Postman安装教程_postman需要联网吗1.官网安装(别看)打开官网,https://www.getpostman.com安装很麻烦还很容易安装失败(先请擦掉眼泪,不要忧伤,我们依然可以好好的)2.非官网安装这是一种直接通过打包已经安装的扩展程序的方式,来进行我认为的「非法安装」,但没办法,只能这样。我会给你一个安装包,见附件。你应该下载下来,解压缩到你喜欢的位置。(解压的位置自己要记得)安装包(Postman4.1.2下载地址:http://files.cnblogs.com/files/mafly/postman-4

    2025年12月16日
    5
  • vim命令大全(最全)

    此文为转载学习链接:vim命令大全http://blog.csdn.net/scaleqiao/article/details/45153379vim命令小技巧http://www.codeceo.com/article/useful-vim-command.html1.关于Vimvim是我最喜欢的编辑器,也是linux下第二强大的编辑器。虽然emacs是公认的世界第一,我认为使…

    2022年4月10日
    51
  • 剑指 Offer 56 – I. 数组中数字出现的次数

    剑指 Offer 56 – I. 数组中数字出现的次数一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2] 限制:2 <= nums.length <= 10000a ^ a = 0,异或满足交换律所有class Solution {publi

    2022年8月8日
    6
  • datagrip在线激活码[最新免费获取]

    (datagrip在线激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html2JTX0APX6F-eyJsa…

    2022年3月29日
    96
  • Oracle创建表空间「建议收藏」

    Oracle创建表空间「建议收藏」临时表空间和表空间的区别,不想理解可略过表空间此空间是用来进行数据存储的(表、function、存储过程等),所以是实际物理存储区域。临时表空间主要用途是在数据库进行排序运算[如创建索引、or

    2022年7月4日
    37
  • C++ 中的左值和右值

    一、前言一直以来,我都对C++中左值(lvalue)和右值(lvalue)的概念模糊不清。我认为是时候好好理解他们了,因为这些概念随着C++语言的进化变得越来越重要。二、左值和右值——一个友好的定义首先,让我们避开那些正式的定义。在C++中,一个左值是指向一个指定内存的东西。另一方面,右值就是不指向任何地方的东西。通常来说,右值是暂时和短命的,而左值则活的很久,因为他们以变量的形式(v…

    2022年4月7日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号