TensorRT小结1

TensorRT小结

利用Xavier的硬件 集中学习了tensorRT 记录一下

1.TensorRT介绍

NVIDIA TensorRT是一种高性能神经网络推理(Inference)引擎,用于在生产环境中部署深度学习应用程序,应用有图像分类、分割和目标检测等,可提供最大的推理吞吐量和效率。TensorRT是第一款可编程推理加速器,能加速现有和未来的网络架构。 TensorRT需要CUDA的支持。通过TensorRT的大幅度加速,服务提供商能够以经济实惠的成本部署这些计算密集型人工智能工作负载。 TensorRT是一个C++库。TensorRT只能用来做Inference(推理),不能用来进行train。 TensorRT基本处理过程:(1)、caffe model转化GIE的model,或者从磁盘或者网络加载GIE可用的model;(2)、运行GIE引擎(数据提前copy到GPU中);(3)、提取结果。

转化GIE model两种方式:(1)、caffeToGIEModel;(2)、参考sampleMNIST API自己构建GIE model.

用深度神经网络解决监督机器学习问题包含两个步骤:

  • 第一步是使用GPU对海量标签数据进行深度神经网络训练,训练时需要迭代的通过网络进行前向传播和反向传播。最终会生成训练好的model文件。
  • 第二步是推理(Inference)即使用训练好的模型对新数据做出预测,仅需通过网络进行前向传播。TensorRT是一款高性能的推理引擎,旨在为常见的深度学习应用如图像分类、分割、目标检测等提供最大的推理吞吐量和效率。针对运行时性能,TensorRT会优化已训练的神经网络。

使用TensorRT包含两个阶段:构建(build)和部署(deployment)。在构建阶段,TensorRT对网络配置进行优化,并生成一个优化了的plan用于计算深度神经网络的前向传播。这个plan是一个优化了的目标代码,可以序列化存储在内存或磁盘上。部署阶段通常采用长时间运行的服务或用户应用程序的形式,该服务或用户应用程序接受批量输入数据,通过对输入数据执行plan来执行推理,并返回批量输出数据。使用TensorRT,你无需在部署硬件上安装并运行深度学习框架。

TensorRT构建阶段:TensorRT运行时需要三个文件来部署一个分类神经网络:一个网络体系结构文件(deploy.prototxt),已训练的权值(net.caffemodel)和一个标签文件为每个输出类提供一个名称。另外,你必须定义batch size和输出层。

TensorRT对神经网络图(neural network graph)进行了几个重要的转换和优化:消除未使用的输出的层以避免不必要的计算;在可能的情况下,convolution、bias和ReLU层被融合以形成单个层,包括垂直层融合和水平层融合。在TensorRT解析器读入已训练的网络和配置文件后,TensorRT在构建阶段对API用户透明地执行其转换。

在构建阶段,TensorRT优化网络,在部署阶段,TensorRT以最小化延迟和最大化吞吐量运行优化了的网络。

2.TensorRT相关各种版本查询

查看jetpack版本

$ head -n 1 /etc/nv_tegra_release

R28 (release), REVISION: 2.1, GCID: 11272647, BOARD: t186ref, EABI: aarch64, DATE: Thu May 17 07:29:06 UTC 2018

查看TensorRT版本

ii  graphsurgeon-tf                               5.1.6-1+cuda10.0                                arm64        GraphSurgeon for TensorRT package
ii  libnvinfer-dev                                5.1.6-1+cuda10.0                                arm64        TensorRT development libraries and headers
ii  libnvinfer-samples                            5.1.6-1+cuda10.0                                all          TensorRT samples and documentation
ii  libnvinfer5                                   5.1.6-1+cuda10.0                                arm64        TensorRT runtime libraries
ii  python-libnvinfer                             5.1.6-1+cuda10.0                                arm64        Python bindings for TensorRT
ii  python-libnvinfer-dev                         5.1.6-1+cuda10.0                                arm64        Python development package for TensorRT
ii  python3-libnvinfer                            5.1.6-1+cuda10.0                                arm64        Python 3 bindings for TensorRT
ii  python3-libnvinfer-dev                        5.1.6-1+cuda10.0                                arm64        Python 3 development package for TensorRT
ii  tensorrt                                      5.1.6.1-1+cuda10.0                              arm64        Meta package of TensorRT
ii  uff-converter-tf                              5.1.6-1+cuda10.0                                arm64        UFF converter for TensorRT package

查看系统版本

cold@cold:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

查看系统内核

cold@cold:~$ uname -a
Linux AiROS 4.9.140-tegra #1 SMP PREEMPT Tue Nov 5 13:37:19 PST 2019 aarch64 aarch64 aarch64 GNU/Linux

查看内存

cold@cold:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15690        2630        3852          82        9207       12921
Swap:          7845           0        7845

查看CPU

cold@cold-desktop:~$ lscpu
Architecture:         aarch64
Byte Order:           Little Endian
CPU(s):               8
On-line CPU(s) list:  0-3
Off-line CPU(s) list: 4-7
Thread(s) per core:   1
Core(s) per socket:   2
Socket(s):            2
Vendor ID:            Nvidia
Model:                0
Model name:           ARMv8 Processor rev 0 (v8l)
Stepping:             0x0
CPU max MHz:          2265.6001
CPU min MHz:          115.2000
BogoMIPS:             62.50
L1d cache:            64K
L1i cache:            128K
L2 cache:             2048K
L3 cache:             4096K
Flags:                fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp

查看硬盘空间

cold@cold-desktop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1   28G   17G  9.8G  63% /
none            7.7G     0  7.7G   0% /dev
tmpfs           7.7G     0  7.7G   0% /dev/shm
tmpfs           7.7G   29M  7.7G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/nvme0n1p1  229G   97G  121G  45% /home
tmpfs           1.6G  136K  1.6G   1% /run/user/1000

查看cuda版本

cold@cold-desktop:~$ /usr/local/cuda/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Mon_Mar_11_22:13:24_CDT_2019
Cuda compilation tools, release 10.0, V10.0.326

查看cudnn版本

cold@cold-desktop:~$ cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#include "driver_types.h"

查看opencv版本

cold@cold-desktop:~$ pkg-config --modversion opencv
3.3.1

**查看python3版本

cold@cold-desktop:~$ python3 -V 
Python 3.6.8

查看tensorflow版本

cold@cold-desktop:~$ python3
Python 3.6.8 (default, Oct  7 2019, 12:59:55)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2020-11-14 14:36:47.129201: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0
>>> tf.__version__
'1.14.0'

当运行tensorflow出现No module named 'tensorflow.contrib' 时,说明目前程序支持的是tensorflow1,而安装的是tensorflow2,需要退回到1.xx版本 pip3 install tensorflow==1.14.0

updatedupdated2020-11-142020-11-14