TensorRT7.0版本在Linux环境安装,以及安装python API接口,测试TensorRT中的测试用例

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情


1 TensorRT 介绍

1.1. 认识TensorRT

TensorRT是NVIDIA开发的高性能的深度学习推理SDK,它包括深度学习推理优化器和运行时的低延时数据高吞吐量

TensorRT是有助于在NVIDIA图像处理单元(GPU)的高性能推理的C++库,旨在与TensorFlow、Caffe、Pytorch、MXNet等训练框架形成互补方式工作,从而使预训练的模型快速的在GPU上进行工作,生成结果。

在这里插入图片描述

TensorRT是基于NVIDIA并行编程模型CUDA构建的,TensorRT为深度学习推理的生产部署提供INT8FP6优化,例如视频流、语音识别、推荐和自然语言处理等,通过降低精度可以减少程序的延迟,这位许多实时服务嵌入式程序所必需的。

1.2 使用TensorRT的好处

训练神经网络之后,TensorRT可是使网络在运行时进行压缩、优化和部署,而无需框架的开销。

目前成功应用TensorRT的场景

  • 机器人
  • 自动驾驶
  • 科学计算
  • 深度学习巡礼那和部署框架
  • 视频分析
  • 自动语音识别

1.3 TensorRT是如何工作的

构建图层优化:

  • 消除不使用的输出图层
  • 消除一些无用的操作
  • 卷积、偏差、ReLU等操作的融合
  • 把特别相似的参数和相同源的张量进行融合

1.4 TensorRT提供哪些功能

TensorRT在所有平台提供C++实现,在x86、aarch64和ppc64le上提供python实现

TensorRT核心库中的关键接口:

  • 网络定义:网络定义接口为应用程序提供了指定网络定义的方法,更多参考
  • 优化配置文件:优化配置文件指定对动态尺寸的约束,更多参考
  • Builder配置::“构建器配置”界面指定用于创建引擎的详细信息。它允许应用程序指定优化配置文件,最大工作空间大小,最小可接受的精度水平,用于自动调整的定时迭代计数以及用于量化网络以8位精度运行的接口。更多参考
  • Builder:构建器接口允许根据网络定义和构建器配置创建优化的引擎。更多参考
  • 引擎Engine:Engine接口允许应用程序执行推理。它支持同步和异步执行,概要分析以及枚举和查询引擎输入和输出的绑定。单引擎可以具有多个执行上下文,从而允许将一组训练有素的参数用于同时执行多个批次,更多参考
  • Caffer解析器:该解析器可用于解析在BVLC Caffe或NVCaffe 0.16中创建的Caffe网络,关于C++ Caffe解析器更多详细信息参考,关于python Caffe解析器参考
  • UFF解析器:该解析器用于解析UFF格式的网络,关于C++ UFF解析器参考,关于python UFF解析器参考
  • ONNX解析器:该解析器用于解析ONNX模型,关于C++解析器参考,关于Python ONNX解析器参考

1.5 Tensor的优化和性能

1、权重和激活精度校准(Weight & Activation Precision Calibration)

通过将模型量化为INT8最大化吞吐量,同时保持精度

2、层和张量融合(Layer & Tensor Fusion)

通过融合内核中的节点优化CPU内存宽带的使用

3、内核自动调整(Kernel Auto-Tuning)

根据目标GPU平台选择最佳数据层和算法

4、动态张量内存(Dynamic Tensor Memory)

最大限度地减少内存占用,并有效地重用张量的内存

5、多流执行

可扩展设计,并行处理多个输入流

2 安装构建TensorRT

这里安装是以TensorRT7.1.3版本为例

2.1 安装前须知

  • 1)TensorRT的Windows zip软件包不提供python支持,未来可能会支持python
  • 2)在使用TensorRT Python APi的时候需要安装PyCUDA,关于安装PyCUDA参考。如果你在编译过程中遇到问题,可能需要重新编译。更多信息参考在Linux上安装PyCUDA
  • 3)确保你已经安装了CUDA工具包,支持10.211.0RC版本
  • 4)从TensorFlow到TensorRT模型导出需要TensorFlow1.15.2
  • 5)PyTorch实例已经在PyTorch1.4.0中进行了测试
  • 6)从TensorRT5.0开始,动态库libnvcaffe_parser.so链接指向libnvparsers.so,静态库libnvcaffe_parser.a链接指向libnvparsers_static.a

2.2 下载TenosrRT的安装包

1、下载TensorRTdeveloper.nvidia.com/tensorrt

2、进入下载之前需要有一个NVIDIA的账号登录之后才可以下载

我的账号:谷歌邮箱
密码:S...  大写字母 小写字母  数字组合
复制代码

在这里插入图片描述

3、点进去之后还需要填写一份问卷,之后就可以下载了

4、下载TensorRT,根据自己的系统环境下载指定的版本

  • 本人系统环境:Ubuntu18.04,使用cat /etc/issue命令查看系统版本
  • 本人系统安装cuda版本:CUDA10.2,使用 cat /usr/local/cuda/version.txt命令查看
  • 本人系统安装cudnn版本:cudnn7.6.5,使用cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2命令查看

我根据自己的系统环境,下载(如果下载的比较慢,就不要不要科学上网了,这个不需要外网也可以下载很快的): 在这里插入图片描述

可以看到上面有两种可选的安装包:

1、Debian和RPM安装包

DebianRPM安装会自动安装依赖,但要求:

  • 必须root权限安装
  • 无法灵活的将TensorRT安装到指定位置
  • 要求使用Debian或RPM软件包安装了CUDA Toolkit和cuDNN
  • 不允许同时安装多个版本的TensorRT

2、tar文件安装包提供了更大的灵活性

  • 可以同时安装多个TensorRT版本,但是必须要确保你已经安装了必要的依赖项,同时管理LD_LIBRARY_PATH,详细安装参考

3、zip文件安装包 ip文件是Windows当前唯一的选项。除了Windows,它不支持任何其他平台。确保您已经安装了必要的依赖项。有关更多信息,请参见Zip文件安装

TensorRT的版本控制信息如下: 在这里插入图片描述

下面介绍TensorRT的几种安装方法

2.3 Debian安装1

安装前确保:

  • Debian安装,要求系统时Ubuntu
  • 下面需要替换ubuntu1x04, cudax.x, trt7.x.x.x-gayyyymmdd为自己本机环境对应的版本

2.3.1 下载与自己Ubuntu版本匹配的TensorRT库包

我下载的TensorRT的版本如下

nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.1.3.4-ga-20200617_1-1_amd64.deb

2.3.2 从Debian本地仓库软件包中安装TensorRT


os="ubuntu1x04"
tag="cudax.x-trt7.1.3.4-ga-yyyymmdd"
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 cuda-nvrtc-x-y
复制代码

把上面的命令改成对应的版本,主要利用环境变量,替换安装包指定版本,对于cuda-nvrtc后的x-y替换成10-211-0和自己系统对应的cuda版本如下:


os="ubuntu1804"
tag="cuda10.2-trt7.1.3.4-ga-yyyymmdd"
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 cuda-nvrtc-10-2
复制代码

2.3.3 安装python

1、如果安装python2.7,使用如下命令:

sudo apt-get install python-libnvinfer-dev

安装python依赖包

python-libnvinfer

2、如果安装python3.x,使用如下命令:

sudo apt-get install python3-libnvinfer-dev

安装python依赖包

python3-libnvinfer

2.3.4 将TensorRT和TensorFlow结合使用

如果要将TensorRT和TensorFlow结合使用,需要安装如下库包

sudo apt-get install uff-converter-tf

2.3.5 验证是否安装成功

使用服下命令验证TensorRT安装是否成功

dpkg -l | grep TensorRT

安装成功之后会显示如下信息:

ii  graphsurgeon-tf	7.1.3-1+cuda11.0	amd64	GraphSurgeon for TensorRT package
ii  libnvinfer-bin		7.1.3-1+cuda11.0	amd64	TensorRT binaries
ii  libnvinfer-dev		7.1.3-1+cuda11.0	amd64	TensorRT development libraries and headers
ii  libnvinfer-doc		7.1.3-1+cuda11.0	all	TensorRT documentation
ii  libnvinfer-plugin-dev	7.1.3-1+cuda11.0	amd64	TensorRT plugin libraries
ii  libnvinfer-plugin7	7.1.3-1+cuda11.0	amd64	TensorRT plugin libraries
ii  libnvinfer-samples	7.1.3-1+cuda11.0	all	TensorRT samples
ii  libnvinfer7		7.1.3-1+cuda11.0	amd64	TensorRT runtime libraries
ii  libnvonnxparsers-dev		7.1.3-1+cuda11.0	amd64	TensorRT ONNX libraries
ii  libnvonnxparsers7	7.1.3-1+cuda11.0	amd64	TensorRT ONNX libraries
ii  libnvparsers-dev	7.1.3-1+cuda11.0	amd64	TensorRT parsers libraries
ii  libnvparsers7	7.1.3-1+cuda11.0	amd64	TensorRT parsers libraries
ii  python-libnvinfer	7.1.3-1+cuda11.0	amd64	Python bindings for TensorRT
ii  python-libnvinfer-dev	7.1.3-1+cuda11.0	amd64	Python development package for TensorRT
ii  python3-libnvinfer	7.1.3-1+cuda11.0	amd64	Python 3 bindings for TensorRT
ii  python3-libnvinfer-dev	7.1.3-1+cuda11.0	amd64	Python 3 development package for TensorRT
ii  tensorrt		7.1.3.x-1+cuda11.0 	amd64	Meta package of TensorRT
ii  uff-converter-tf	7.1.3-1+cuda11.0	amd64	UFF converter for TensorRT package
复制代码

2.3 Debian安装2

可以把这种方式理解为在线安装。上面的方式理解成离线安装,需要取官网先下载安装包。

该安装方法使用与已经熟悉TensorRT,并希望快速运行实现程序或设置自动化,例如(在使用容器时)的高级用户

2.3.1 安装NVIDIA CUDA网络仓库安装包

使用wget直接下载TensorRT安装库包,然后安装,命令如下:

os="ubuntu1x04"
cuda="x.y.z"
wget https://developer.download.nvidia.com/compute/cuda/repos/${os}/x86_64/cuda-repo-${os}_${cuda}-1_amd64.deb
sudo dpkg -i cuda-repo-*.deb
复制代码

注意:

  • 系统版本:Ubuntu1x04要么是1604,要么是1804
  • CUDA版本:x.y.z要么是10.2.89,要么是11.0.x

根据自己的系统环境,选择下载指定的TensorRT版本

2.3.2 安装NVIDIA 机器学习的网络仓库安装包

os="ubuntu1x04"
wget https://developer.download.nvidia.com/compute/machine-learning/repos/${os}/x86_64/nvidia-machine-learning-repo-${os}_1.0.0-1_amd64.deb

sudo dpkg -i nvidia-machine-learning-repo-*.deb
sudo apt-get update
复制代码

2.3.3 安装适合你需求的TensorRT软件包

1、对仅运行TensorRT C++的应用程序

sudo apt-get install libnvinfer7 libnvonnxparsers7 libnvparsers7 libnvinfer-plugin7 cuda-nvrtc-x-y

2、对于也构建TensorRT C++的应用程序

`sudo apt-get install libnvinfer-dev libnvonnxparsers-dev

libnvparsers-dev libnvinfer-plugin-dev`

3、对于运行TensorRT Python的应用程序

sudo apt-get install python-libnvinfer python3-libnvinfer

2.3.4 安装cuda的版本

使用NVIDIA机器学习网络仓库安装包时,Ubuntu默认安装TensorRT会获取最新的CUDA版本。使用以下命令安装指定的CUDA版本

version="7.x.x-1+cudax.x"
sudo apt-get install libnvinfer7=${version} libnvonnxparsers7=${version} libnvparsers7=${version} libnvinfer-plugin7=${version} libnvinfer-dev=${version} libnvonnxparsers-dev=${version} libnvparsers-dev=${version} libnvinfer-plugin-dev=${version} python-libnvinfer=${version} python3-libnvinfer=${version}

sudo apt-mark hold libnvinfer7 libnvonnxparsers7 libnvparsers7 libnvinfer-plugin7 libnvinfer-dev libnvonnxparsers-dev libnvparsers-dev libnvinfer-plugin-dev python-libnvinfer python3-libnvinfer
复制代码

如果想升级TensorRT的最新版本或CUDA最新版本,则可以使用unhold解开libnvinfer7,命令如下:

sudo apt-mark unhold libnvinfer7 libnvonnxparsers7 libnvparsers7 libnvinfer-plugin7 libnvinfer-dev libnvonnxparsers-dev libnvparsers-dev libnvinfer-plugin-dev python-libnvinfer python3-libnvinfer

2.4 RPM安装TensorRT

RPM安装包的安装系统环境必须是CentOS和RedHat系统

2.4.1 下载与你自己系统环境对应的TensorRT版本

2.4.2 从本地下载的TensorRT的RPM包安装TensorRT

安装命令如下(版本号同样需要替换,这里我就重复了):

tag="cudax.x-trt7.x.x.x-ga-yyyymmdd"
sudo rpm -Uvh nv-tensorrt-repo-rhel7-${tag}-1-1.x86_64.rpm
sudo yum clean expire-cache
复制代码

其他你可以选择的安装包如下:

graphsurgeon-tf.x86_64
libnvinfer-bin.x86_64
libnvinfer-devel.x86_64
libnvinfer-doc.x86_64
libnvinfer-plugin-devel.x86_64	
libnvinfer-plugin7.x86_64
libnvinfer-samples.x86_64
libnvinfer7.x86_64
libnvonnxparsers-devel.x86_64
libnvonnxparsers7.x86_64
libnvparsers-devel.x86_64
libnvparsers7.x86_64
python-libnvinfer.x86_64
python-libnvinfer-devel.x86_64	
python3-libnvinfer.x86_64
python3-libnvinfer-devel.x86_64
tensorrt.x86_64
uff-converter-tf.x86_64
复制代码

然后安装TensorRT

sudo yum install tensorrt cuda-nvrtc-x-y

注意:

  • 对于cuda-nvrtc后的x-y替换成10-211-0和自己系统对应的cuda版本

2.4.3 安装python

1、安装python2.7

sudo yum install python-libnvinfer-devel

安装python的依赖包

python-libnvinfer

2、安装python3

udo yum install python3-libnvinfer-devel

安装python依赖包

python3-libnvinfer

2.3.4 安装UFF转换器

当你需要把TensorRT和TensorFlow结合使用时,需要安装如下库包:

sudo yum install uff-converter-tf

2.3.5 验证TensorRT是否安装成功

1、验证方式1

rpm -qa | grep tensorrt

显示如下内容,表示安装成功

tensorrt-7.1.3.x-1.cuda11.0.x86_64

2、验证方式2

rpm -qa | grep -e libnvinfer -e libnv.*parsers

显示如下内容,表示安装成功

libnvinfer-doc-7.1.3-1.cuda11.0.x86_64
libnvinfer-plugin7-7.1.3-1.cuda11.0.x86_64
libnvinfer-devel-7.1.3-1.cuda11.0.x86_64
libnvinfer-bin-7.1.3-1.cuda11.0.x86_64
libnvinfer7-7.1.3-1.cuda11.0.x86_64
libnvinfer-samples-7.1.3-1.cuda11.0.x86_64
libnvinfer-plugin-devel-7.1.3-1.cuda11.0.x86_64
libnvonnxparsers7-7.1.3-1.cuda11.0.x86_64
libnvonnxparsers-devel-7.1.3-1.cuda11.0.x86_64
libnvparsers7-7.1.3-1.cuda11.0.x86_64
libnvparsers-devel-7.1.3-1.cuda11.0.x86_64
python3-libnvinfer-7.1.3-1.cuda11.0.x86_64
python3-libnvinfer-devel-7.1.3-1.cuda11.0.x86_64
python-libnvinfer-7.1.3-1.cuda11.0.x86_64
python-libnvinfer-devel-7.1.3-1.cuda11.0.x86_64

复制代码

3、验证方式3

rpm -qa | grep graphsurgeon-tf

显示如下内容,表示安装成功

graphsurgeon-tf-7.1.3-1.cuda11.0.x86_64

4、验证方式4

rpm -qa | grep uff-converter-tf

显示如下内容,表示安装成功

uff-converter-tf-7.1.3-1.cuda11.0.x86_64

2.4 RPM安装TensorRT——在线安装

可以把这种方式理解为在线安装。上面的方式理解成离线安装,需要取官网先下载安装包。

2.4.1 在线下载NVIDIA CUDA的网络仓库安装包

cuda="x.y.z"
wget https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-${cuda}-1.x86_64.rpm
sudo rpm -Uvh cuda-repo-*.rpm
复制代码

注意:

CUDA的版本x.y.z,要么是10.2.89,要么是11.0.x

2.4.2 安装NVIDIA 机器学习网络仓库安装包

wget https://developer.download.nvidia.com/compute/machine-learning/repos/rhel7/x86_64/nvidia-machine-learning-repo-rhel7-1.0.0-1.x86_64.rpm

sudo rpm -Uvh nvidia-machine-learning-repo-*.rpm
复制代码

2.4.3 安装适合你特定需求的TensorRT软件包

1、对仅运行TensorRT C++的应用程序

sudo yum install libnvinfer7 libnvparsers7 libnvonnxparsers7 libnvinfer-plugin7 cuda-nvrtc-x-y

注意:

  • 对于cuda-nvrtc后的x-y替换成10-211-0和自己系统对应的cuda版本

2、对于也构建TensorRT C++的应用程序

sudo yum install libnvinfer-devel libnvparsers-devel libnvonnxparsers-devel libnvinfer-plugin-devel

3、对于运行TensorRT Python的应用程序

sudo yum install python-libnvinfer python3-libnvinfer

2.4.4 使用NVIDIA机器学习默认安装包

使用NVIDIA机器学习网络仓库安装包时,RHEL默认安装TensorRT会获取最新的CUDA版本。使用以下命令安装指定的CUDA版本

version="7.x.x-1.cudax.x"
sudo yum downgrade libnvinfer7-${version} libnvparsers7-${version} libnvonnxparsers7-${version} libnvinfer-plugin7-${version} libnvinfer-devel-${version} libnvparsers-devel-${version} libnvonnxparsers-devel-${version} libnvinfer-plugin-devel-${version} python-libnvinfer-${version} python3-libnvinfer-${version}
 

sudo yum install yum-plugin-versionlock
sudo yum versionlock libnvinfer7 libnvparsers7 libnvonnxparsers7 libnvinfer-plugin7 libnvinfer-devel libnvparsers-devel libnvonnxparsers-devel libnvinfer-plugin-devel python-libnvinfer python3-libnvinfer
复制代码

如果想升级TensorRT的最新版本或CUDA最新版本,则可以使用unhold解开libnvinfer7,命令如下:

sudo yum versionlock delete libnvinfer7 libnvparsers7 libnvonnxparsers7 libnvinfer-plugin7 libnvinfer-devel libnvparsers-devel libnvonnxparsers-devel libnvinfer-plugin-devel python-libnvinfer python3-libnvinfer

2.5 Tar文件安装

2.5.1 安装依赖项

1、安装如下的依赖项

2.5.2 下载与自己Linux系统匹配的TensorRT tar文件

根据自己系统环境下载对应的版本,我下载如下:

TensorRT-7.1.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz

2.5.3 可指定TensorRT的安装位置

如果你选择TensorRT的安装位置,这个tar文件会将所有的安装内容都装到一个名为:TensorRT-7.xxx的目录下

2.5.4 解压tar文件

version="7.x.x.x"
os="<os>"
arch=$(uname -m)
cuda="cuda-x.x"
cudnn="cudnn8.x"
tar xzvf TensorRT-${version}.${os}.${arch}-gnu.${cuda}.${cudnn}.tar.gz
复制代码
  • 7.xxx是你的TensorRT版本
  • 系统版本
    • Ubuntu-16.04
    • Ubuntu-18.04
    • CentOS的7.6
  • CUDA-XX是CUDA版本 10.2 要么 11.0
  • cudnn8.xcuDNN版本 8.0

安装目录TensorRT-7.x.x.x有如下的子目录:

ls TensorRT-${version}
bin  data  doc  graphsurgeon  include  lib  python  samples  targets  TensorRT-Release-Notes.pdf  uff
复制代码

2.5.5 添加绝对路径到TesnorRT的lib到绝对路径

`export LD_LIBRARY_PATH= L D L I B R A R Y P A T H : < T e n s o r R T LD_LIBRARY_PATH:<TensorRT- {version}/lib>

`

2.5.6 安装python TensorRT wheel文件

cd TensorRT-${version}/python

1、如果使用python2.7

sudo pip2 install tensorrt-*-cp27-none-linux_x86_64.whl

2、如果使用python3.x

sudo pip3 install tensorrt-*-cp3x-none-linux_x86_64.whl

2.5.7 安装Python UFF wheel文件

当要把TensorRT和TensorFlow结合使用的时候需这样做

cd TensorRT-${version}/uff

1、如果使用python2.7

sudo pip2 install uff-0.6.9-py2.py3-none-any.whl

2、如果使用python3.x

sudo pip3 install uff-0.6.9-py2.py3-none-any.whl

不论那种方法,检查是否安装成功uff(查看系统中可执行文件的路径)

which convert-to-uff

2.5.8 安装Python graphsurgeon wheel文件

cd TensorRT-${version}/graphsurgeon

1、如果使用python2.7

sudo pip2 install graphsurgeon-0.4.5-py2.py3-none-any.whl

2、如果使用python3.x

sudo pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl

2.5.9 验证安装是否成功

  • 确保已安装的文件在正确的目录中
  • 生成并运行其中的一个示例,例如,样本MNIST在安装目录中。您应该能够在没有其他设置的情况下编译和执行示例。有关更多信息,请参见TensorRT的“ Hello World”(sampleMNIST)
  • Python的samples位于:samples/python

2.6 zip文件的安装

zip的安装环境是在Windows下,这里不介绍了,参考官网

2.7 更新TesnorRT

参考官网,更新TensorRT

2.8 卸载TensorRT

参考官网,卸载TensorRT

2.9 安装PyCUDA

安装PyCUDA之前需要先确定nvcc可用,安装PyCUDA比较简单,直接用pip安装即可

pip install 'pycuda>=2019.1.1'

3 我使用tar包安装TensorRT7.1.3.4的实际过程

3.1 下载TensorRT软件包

我下载的TensorRT的tar软件包名如下:

TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz

从这个软件包可以看出一些版本信息,也与下面我们要设置的变量相关

  • TensorRT版本呢:TesnorRT-7.0.0.11
  • Ubuntu系统版本:Ubuntu-18.04
  • 系统的位数:x86_64 (可是使用uname -m 查看)
  • cuda版本:10.2
  • cudnn版本:7.6

下载TensorRT软件包去官网,需要登录,也可以用wget下载

wget https://developer.nvidia.com/compute/machine-learning/tensorrt/secure/7.0/7.0.0.11/tars/TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz

在这里插入图片描述

3.2 先新建了一个虚拟环境

1、创建虚拟环境

conda create -n TensorRT python=3.7

2、 激活虚拟环境

conda activate TensorRT

3、 退出虚拟环境

conda deactivate

3.3 在虚拟环境中安装cuda和cudnn

首先需要添加国内的镜像源,这样下载速度会块一些

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
复制代码

1、安装cuda10.2

conda install cudatoolkit=10.2

在这里插入图片描述

2、安装cudnn7.6.5

conda install cudnn=7.6.5

在这里插入图片描述

注意:

按照官方的教程,应该安装的cudnn=8.0版本,但是使用conda search cudnn,可以看到conda软件仓库包中最新的cudnn=7.6.5版本。这是因为最新版本的TensorRT-7.1.3.4版本需要使用cudnn=8.0版本,我们下载底一点的TensorRT版本即可:TensorRT-7.0.0.11

3.4 开始安装TensorRT

以上环境已经基本准备好了,现在开始安装TensorRT

3.4.1 先设置一些变量对应的版本

version="7.0.0.11"
os="Ubuntu-18.04"
arch=$(uname -m)
cuda="cuda-10.2"
cudnn="cudnn7.6"
复制代码

3.4.2 解压下载的TensorRT的tar安装包

tar xzvf TensorRT-${version}.${os}.${arch}-gnu.${cuda}.${cudnn}.tar.gz

或者直接用如下命令,就不需要设置变量

tar xzvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz

1、这里我是把自己的压缩文件解压到用户的home目录下(使用下面的命令不用设置变量),你们也可以默认路径,和压缩文件同级目录:

tar xzvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn7.6.tar.gz -C ~/

在这里插入图片描述

2、查看解压后TensorRT-7.0.0.11有如下的子目录: 在这里插入图片描述

3.4.3 添加绝对路径到TesnorRT-7.0.0.11的lib目录到绝对路径

1、查看TesorRT-7.0.0.1下的lib目录绝对路径 cd

2、把该绝对路径添加到LD_LIBRARY_PATH环境变量中,打开:vi ~/.bashrc配置文件,添加如下命令

`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/shl/TensorRT-7.0.0.11/lib

`

3、添加完之后,使用下面命令让其生效

source ~/.bashrc

注意:

如果跳出虚拟环境,就再激活一次:conda activate TensorRT,始终保持自己在虚拟环境下进行操作

3.4.4 安装TensorRT,使pyhon可以调用

1、进入python目录中

cd TensorRT-7.0.0.11/python

在这里插入图片描述 可以看出,提供安装的TesnorRT版本,以及与python关联版本有如下这些:

  • 1)tensorrt-7.0.0.11-cp27-none-linux_x86_64.whl :python2.7
  • 2)tensorrt-7.0.0.11-cp34-none-linux_x86_64.whl :python3.4
  • 3)tensorrt-7.0.0.11-cp35-none-linux_x86_64.whl :python3.5
  • 4)tensorrt-7.0.0.11-cp36-none-linux_x86_64.whl :python3.6
  • 5)tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl :python3.7

2、我们虚拟环境python3.7版本,因此安装TensorRT版本如下

pip install tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl

注意:

  • 根据你python的版本安装指定的TensorRT版本

3、测试TensorRT能否在python中正常导入

(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/python$ pip install tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Processing ./tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl
Installing collected packages: tensorrt
Successfully installed tensorrt-7.0.0.11

(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/python$ python
Python 3.7.7 (default, May  7 2020, 21:25:33)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorrt
>>>
复制代码

3.4.5 安装Python UFF wheel文件

1、当要把TensorRT和TensorFlow结合使用的时候需这样做

cd TensorRT-7.0.0.11/uff

2、安装uff

sudo pip install uff-0.6.5-py2.py3-none-any.whl

在这里插入图片描述

3、检查是否安装成功uff(查看系统中可执行文件的路径)

which convert-to-uff

成功安装uff,会返回可执行文件的路径:

(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/uff$ which convert-to-uff
/usr/local/bin/convert-to-uff
复制代码

4、查看能否在python中正确导入uff 正确导入如下: 在这里插入图片描述

如果报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef)`,请:参考这篇博客

3.4.6 安装Python graphsurgeon wheel文件

1、进入到graphsurgeon目录

cd TensorRT-7.0.0.11/graphsurgeon/

2、安装graphsurgeon

sudo pip install graphsurgeon-0.4.1-py2.py3-none-any.whl

在这里插入图片描述

3、检查graphsurgeon是否安装成功

如果报错:ImportError: cannot import name 'NodeDef' from 'tensorflow' ,如下图,请参考这篇博客 在这里插入图片描述

3.4.7 安装PyCUDA

安装PyCUDA之前需要先确定nvcc可用,安装PyCUDA比较简单,直接用pip安装即可

pip install 'pycuda>=2019.1.1'

4 验证TensorRT-7.0.0.11是否安装成功

  • 确保已安装的文件在正确的目录中
  • 生成并运行其中的一个示例,例如,样本MNIST在安装目录中。您应该能够在没有其他设置的情况下编译和执行示例。有关更多信息,请参见TensorRT的“ Hello World”(sampleMNIST)
  • Python的samples位于:samples/python

4.1 先看一个C++的示例

该示例是在MNIST数据集上训练的Caffe模型,该示例sampleMNIST相当于是TensorRT的一个入门hello world示例,它使用Caffe解析器执行TensorRT的基本设置和初始化

目录切换到TensorRT的示例目录下,是一个关于sampleMNISTC++示例

cd TensorRT-7.0.0.11/samples/sampleMNIST

4.1.1 编译文件

make

编译结果如下 在这里插入图片描述

上面编译生成的可执行文件:会放到/home/shl/TensorRT-7.0.0.11/bin目录下

在这里插入图片描述

4.1.2 执行编译生成的可执行文件

1、在执行该可执行文件之前,我们先看看这个可执行文件有哪些参数

./sample_mnist -h 或 ./sample_mnist --help 查看参数

(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/bin$ ls
chobj  common  dchobj  giexec  sample_mnist  sample_mnist_debug  trtexec
(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/bin$ ./sample_mnist -h
Usage: ./sample_mnist [-h or --help] [-d or --datadir=<path to data directory>] [--useDLACore=<int>]
--help          Display help information
--datadir       Specify path to a data directory, overriding the default. This option can be used multiple times to add multiple directories. If no data directories are given, the default is to use (data/samples/mnist/, data/mnist/)
--useDLACore=N  Specify a DLA engine for layers that support DLA. Value can range from 0 to n-1, where n is the number of DLA engines on the platform.
--int8          Run in Int8 mode.
--fp16          Run in FP16 mode.
(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/bin$
复制代码

下面解释一下这些参数的含义

  • --help:查看帮助信息
  • --datadir:该参数的是指定数据目录的路径,可以多次使用该参数添加多个目录路径,如果没有给出数据目录路径,则默认使用:data/samples/mnist/, data/mnist/
  • --useDLACore=N:支持DLA的层指定一个DLA引擎。值的范围可以从0到n-1,其中n平台上的DLA引擎的数量
  • --int8:在int8模式下运行
  • --fp16:在fp16模式下运行

2、参数--datadir的具体值是什么

--datadir参数后面跟的是一个目录,存取的是三个Caffe文件来构建网络

  • mnist.prototxt :包含网络结构prototxt文件
  • mnist.caffemodel: 包含网络训练的权重模型文件
  • mnist_mean.binaryproto :包含均值的binaryproto文件

在这里插入图片描述

3、参数--useDLACore=N参数是指深度学习加速引擎DLA,即英伟达的深度学习加速器(NVIDIA Deepl Learning Accelerator),并不是指显卡,如果机器没有该设别,就不要加该参数了!

4、参数--int8--fp16是不同精度下的预测

4.1.3 执行可执行文件的示例

1、在运行之前,需要先生成一些测试MNIST的测试用例图片:

/home/shl/TensorRT-7.0.0.11/data/mnist

然后运行该目录下的download_pgms.py文件

python download_pgms.py

在这里插入图片描述

之后会在当前目录下生成0.pgm~9.pgm十张MNIST的图片(PGM 是便携式灰度图像格式(portable graymap file format),在黑白超声图像系统中经常使用PGM格式的图像

注意: 一定要先生成.pgm文件,否则会报错Could not find 7.pgm in data directories: 找不到文件 在这里插入图片描述

2、运行C++的测试用例生成的可执行文件

./sample_mnist [-h] [--datadir=/path/to/data/dir/] [--useDLA=N] [--fp16 or --int8]

完整上面的命令:

./sample_mnist --datadir ~/TensorRT-7.0.0.11/data/mnist - --int8

验证样本是否成功运行。如果样本成功运行,应该会看到类似以下的输出;输入图像ASCII渲染,数字为7

(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/bin$ ./sample_mnist --datadir ~/TensorRT-7.0.0.11/data/mnist - --int8
&&&& RUNNING TensorRT.sample_mnist # ./sample_mnist --datadir /home/shl/TensorRT-7.0.0.11/data/mnist --int8 -
[07/28/2020-14:28:27] [I] Building and running a GPU inference engine for MNIST
[07/28/2020-14:28:28] [W] [TRT] Calibrator is not being used. Users must provide dynamic range for all tensors that are not Int32.
[07/28/2020-14:28:29] [W] [TRT] No implementation of layer (Unnamed Layer* 9) [Constant] obeys the requested constraints in strict mode. No conforming implementation was found i.e. requested layer computation precision and output precision types are ignored, using the fastest implementation.
[07/28/2020-14:28:30] [W] [TRT] No implementation of layer ip2 obeys the requested constraints in strict mode. No conforming implementation was found i.e. requested layer computation precision and output precision types are ignored, using the fastest implementation.
[07/28/2020-14:28:30] [W] [TRT] No implementation of layer prob obeys the requested constraints in strict mode. No conforming implementation was found i.e. requested layer computation precision and output precision types are ignored, using the fastest implementation.
[07/28/2020-14:28:30] [W] [TRT] No implementation obeys reformatting-free rules, at least 3 reformatting nodes are needed, now picking the fastest path instead.
[07/28/2020-14:28:30] [I] [TRT] Detected 1 inputs and 1 output network tensors.
[07/28/2020-14:28:30] [W] [TRT] Current optimization profile is: 0. Please ensure there are no enqueued operations pending in this context prior to switching profiles
[07/28/2020-14:28:30] [I] Input:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@++-  .@@@@@@@
@@@@@@@@@@@@#+-      .@@@@@@
@@@@@@@@%:..   :     .@@@@@@
@@@@@@@#.     %@%#.  :@@@@@@
@@@@@@@:    +#@@@=  .@@@@@@@
@@@@@@#   .#@@@@@:  =@@@@@@@
@@@@@@:  :#@@@@@*  :#@@@@@@@
@@@@@@*.:%@@@@@+  .%@@@@@@@@
@@@@@@@@@@@@@@*   +@@@@@@@@@
@@@@@@@@@@@@@@   +@@@@@@@@@@
@@@@@@@@@@@@@=   %@@@@@@@@@@
@@@@@@@@@@@@@:  +@@@@@@@@@@@
@@@@@@@@@@@@+  -@@@@@@@@@@@@
@@@@@@@@@@@-  +@@@@@@@@@@@@@
@@@@@@@@@@%  .@@@@@@@@@@@@@@
@@@@@@@@@%- .%@@@@@@@@@@@@@@
@@@@@@@@@-  +@@@@@@@@@@@@@@@
@@@@@@@@%: =%@@@@@@@@@@@@@@@
@@@@@@@@= .%@@@@@@@@@@@@@@@@
@@@@@@@@# *@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[07/28/2020-14:28:30] [I] Output:
0:
1:
2:
3:
4:
5:
6:
7: **********
8:
9:

&&&& PASSED TensorRT.sample_mnist # ./sample_mnist --datadir /home/shl/TensorRT-7.0.0.11/data/mnist --int8 -
(TensorRT) shl@zfcv:~/TensorRT-7.0.0.11/bin$
复制代码

4.2 模型转换为trt模型时报错

在模型转换为trt模型的时候报错:CUDA initialization failure with error 35. Please check your CUDA installation

或者你在导入tensorrt的时候报错;

TypeError: pybind11::init(): factory function returned nullptr.
复制代码

这两个问题都是由于显卡驱动版本太低导致的 问题,更新显卡驱动即可,如下提供亲测可用的版本对应:

  • cuda:10.2
  • cudnn:7.6.5
  • tensorrt:7.0.0.11
  • NVIDIA Driver:450

更多tensorrt和cuda版本对应关系,可以参考这里

猜你喜欢

转载自juejin.im/post/7109416991898730509