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=$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目录
的绝对路径
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的示例目录下,是一个关于sampleMNIST
的C++
示例
cd TensorRT-7.0.0.11/samples/sampleMNIST
4.1.1 编译文件
编译结果如下
上面编译生成的可执行文件:会放到/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
[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:
7: **********
&&&& PASSED TensorRT.sample_mnist
(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版本对应关系,可以参考这里