视觉学习笔记10——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 的介绍,可参考官网介绍
在这里插入图片描述

在这里插入图片描述

1.安装

因为TensorRT不同的版本依赖于不同的cuda版本和cudnn版本。所以很多时候我们都是根据我们自己电脑的cuda版本和cudnn版本来决定要下载哪个TensorRT版本。

首先进入TensorRT官网或者去github官网,选择需要下载的TensorRT版本。

# 查看当前cuda的版本,或者用nvcc --version
cat /usr/local/cuda/version.txt
#查看cudnn版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

首先解压下载的TensorRT安装包

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

然后添加环境变量

# 打开
sudo gedit ~/.bashrc

# TensorRT
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/nh666/BE/TensorRT/TensorRT-7.2.2.3/lib
export LIBRARY_PATH=/home/nh666/BE/TensorRT/TensorRT-7.2.2.3/lib::$LIBRARY_PATH

# 保存
source ~/.bashrc

python调用TensorRT API

进入TensorRT文件夹下的python文件夹,执行以下命令,安装python接口的tensorrt。

pip install ./tensorrt-7.2.2.3-cp36-none-linux_x86_64.whl
# 安装成功提示
Processing ./tensorrt-7.2.2.3-cp36-none-linux_x86_64.whl
Installing collected packages: tensorrt
Successfully installed tensorrt-7.2.2.3

安装UFF

支持tensorflow模型转化,前提要有安装tf框架。

cd  ../uff
pip install uff-0.6.9-py2.py3-none-any.whl
# 安装成功提示
Processing ./uff-0.6.9-py2.py3-none-any.whl
Requirement already satisfied: numpy>=1.11.0 in /home/nh666/anaconda3/envs/py36/lib/python3.6/site-packages (from uff==0.6.9) (1.19.2)
Requirement already satisfied: protobuf>=3.3.0 in /home/nh666/anaconda3/envs/py36/lib/python3.6/site-packages (from uff==0.6.9) (4.21.0)
Installing collected packages: uff
Successfully installed uff-0.6.9

安装graphsurgeon

进入graphsurgeon文件夹,执行以下命令:

pip install ./graphsurgeon-0.4.5-py2.py3-none-any.whl
# 安装成功提示
Processing ./graphsurgeon-0.4.5-py2.py3-none-any.whl
Installing collected packages: graphsurgeon
Successfully installed graphsurgeon-0.4.5

安装onnx_graphsurgeon

进入onnx_graphsurgeon文件夹,执行以下命令:

pip install ./onnx_graphsurgeon-0.2.6-py2.py3-none-any.whl 
# 安装成功提示
Collecting typing>=3.6.4
  Downloading typing-3.7.4.3.tar.gz (78 kB)
     |████████████████████████████████| 78 kB 157 kB/s 
Building wheels for collected packages: typing
  Building wheel for typing (setup.py) ... done
  Created wheel for typing: filename=typing-3.7.4.3-py3-none-any.whl size=26325 sha256=07619bb91ef02a1f66d12cda2b40aef152a2af633b7e5feb79fde6c8b7b8ace7
  Stored in directory: /home/nh666/.cache/pip/wheels/5f/63/c2/b85489bbea28cb5d36cfe197244f898428004fa3caa7a23116
Successfully built typing
Installing collected packages: typing, onnx-graphsurgeon
Successfully installed onnx-graphsurgeon-0.2.6 typing-3.7.4.3

安装 pycuda

如果要使用 Python 接口的 TensorRT,则需要在anaconda下安装 Pycuda

pip install 'pycuda>=2017.1.1'
# 安装成功提示
Successfully built pycuda pytools
Installing collected packages: platformdirs, pytools, mako, pycuda
Successfully installed mako-1.1.6 platformdirs-2.4.0 pycuda-2022.1 pytools-2022.1.12

2.测试

终端测试版本号

python
import tensorrt
import uff
import pycuda
exit()

在这里插入图片描述

测试自带的例子sampleMNIST

编译

cd samples
make

测试

cd bin 
./sample__mnist

错误

Could not find 1.pgm in data directories:
	data/mnist/
	data/samples/mnist/
&&&& FAILED

解决

cd data/mnist/
python download_pgms.py

重复测试步骤,最终结果如下
在这里插入图片描述

3.onnx模型转engine模型

./trtexec --onnx=weights_test.onnx --saveEngine=weights.engine
./trtexec 
--onnx=/home/weights.onnx             #指定onnx模型路径
--maxBatch=200                        #指定trt最大的batch_size=200
--workspace=1000                      #指定转化过程中的工作空间是1000M
--fp16                                #指定采用了fp16精度——半精度,也还可以是int8
--saveEngine=/home/weights.engine     #指定trt文件保存的路径
# 转换成功提示
&&&& PASSED TensorRT.trtexec # ./trtexec --onnx=xxx.onnx --saveEngine=xxx.engine

4.报错解决

在调用时提示

ImportError: libnvinfer.so.6: cannot open shared object file: No such file or directory

解决方法

#打开
sudo gedit /etc/ld.so.conf

#添加
/usr/local/cuda/lib64
/home/安装路径/TensorRT/lib

#保存
sudo ldconfig

猜你喜欢

转载自blog.csdn.net/qq_45848817/article/details/130850276