TensorRT 概述、原理、Linux下安装

聊聊TensorRT

随着传统的高性能计算和新兴的深度学习在百度、京东等大型的互联网企业的普及发展,作为训练和推理载体的GPU也被越来越多的使用。

NVDIA本着让大家能更好地利用GPU,使其在做深度学习训练的时候达到更好的效果的目标

推出了支持高性能深度学习支持引擎——TensorRT。

TensorRT是一个有助于在NVIDIA图形处理单元(GPU)上高性能推理c++库。

它旨在与TesnsorFlow、Caffe、Pytorch以及MXNet等训练框架以互补的方式进行工作,专门致力于在GPU上快速有效地进行网络推理。

如今现有的一些训练框架(例如TensorFlow)已经集成了TensorRT,因此可以将其用于加速框架中的推理。

另外,TensorRT可以作为用户应用程序中的库

它包括用于从Caffe,ONNX或TensorFlow导入现有模型的解析器,以及用于以编程方式(C++或Python API)构建模型。

在训练了神经网络之后,TensorRT可以对网络进行压缩、优化以及运行时部署,并且没有框架的开销。

TensorRT通过combines layers,kernel优化选择,以及根据指定的精度执行归一化和转换成最优的matrix math方法

改善网络的延迟、吞吐量以及效率。

TensorRT通过结合抽象出特定硬件细节的高级API和优化推理的实现来解决这些问题

以实现高吞吐量、低延迟和低设备内存占用。

TensorRT 概述、原理、Linux下安装

TensorRT是如何工作的

TensorRT 概述、原理、Linux下安装

为了优化模型的inference,TensorRT会根据网络的定义执行优化【包括特定平台的优化】并生成inference engine

此过程被称为构建阶段,尤其是在嵌入式平台上会消耗大量的时间

因此,一个典型的应用程序只会被构建一次engine,然后将其序列化为plane file以供后续使用。

注意:生成的plane file 不能跨平台或TensorRT 版本移植。

另外,因为plane file是明确指定GPU 的model,所以我们要想使用不同的GPU来运行plane file必须得重新指定GPU

构建阶段在layer graph上执行以下优化

  1. 消除没有使用的outputs layer
  2. 消除等同于没有操作的operation
  3. convolution,bias and ReLU的融合
  4. 把具有足够相似的parameters和相同的source tensor的operation进行aggregation【例如1×1的convolution】
  5. 通过将输出层定向到正确的最终目的来合并concatenate layer

TensorRT提供了哪些功能

TensorRT使开发人员能够导入、校准、生成以及部署优化的网络

网络可以直接从Caffe导入,也可以通过UFF或ONNX格式从其他框架导入

也可以通过实例化各个图层并直接设置参数和weight以编程的方式创建

用户可以通过TensorRT使用Plugin interface运行自定义图层。

TensorRT中的GraphSurgeon功能提供了Tensorflow中自定义layer的节点映射,因此可以支持许多TensorFlow模型的inference。

TensorRT在所有支持平台上提供了C++实现,并在x86,aarch64和ppc64le上提供Python实现。

TensorRT核心库中的关键接口是:

  • Network Definition:网络定义接口为应用程序提供了指定网络定义方法。
  • Optimization Profile:优化配置文件指定对动态维度的约束。
  • Builder Configuration:构建器配置接口指定用于创建engine的详细信息
  • Builder:构建器接口允许根据网络定义和builder configuration创建一个优化的engine
  • Engine:engine接口允许应用程序执行inference
  • Caffe Parser:该解析器可用于解析在BVLCCaffe或NVCaffe0.16中创建的Caffe网络。
  • UFF Parser:该解析器可用于解析UFF格式的网络。
  • ONNX Parser:该解析器可用于解析ONNX模型。

为什么TensorRT能让模型跑的快

TensorRT 概述、原理、Linux下安装

TensorRT主要做了下面几件事,来提升模型的运行速度

  1. TensorRT支持FP16和INT8的计算

深度学习在训练的时候一般是应用32位或者16位数据

TensorRT在推理的时候可以降低模型参数的位宽来进行低精度推理,以达到加速推断的目的。

  1. TensorRT对于网络结构进行重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化

GPU上跑的函数叫Kernel,TensorRT是存在Kernel的调用的

在绝大部分框架中,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三次cuDNN对应的API

但实际上这三层的实现完全是可以合并到一起的,TensorRT会对一些可以合并网络进行合并

目前的网络一方面越来越深,另一方面越来越宽,可能并行做若干个相同大小的卷积,这些卷积计算其实也是可以合并到一起来做的

  1. Kernel Auto-Tuning:网络模型在推理计算时,是调用GPU的CUDA核进行计算的

TensorRT可以针对不同的算法,不同的网络模型,不同的GPU平台,进行 CUDA核的调整

以保证当前模型在特定平台上以最优性能计算。

  1. Dynamic Tensor Memory 在每个tensor的使用期间,TensorRT会为其指定显存

Dynamic Tensor Memory 在每个tensor的使用期间,TensorRT会为其指定显存,避免显存重复申请,减少内存占用和提高重复使用效率。

TensorRT的自动安装

主要是网络比较好,可以采用这个方式安装

pip install tensorrt
pip install nvidia-pyindex
pip install nvidia-tensorrt

TensorRT的手动安装

  1. 下载安装包

查询本机Linux版本: cat /etc/issue

查询本机CUDA版本: cat /usr/local/cuda/version.txt

打开官网下载TensorRT:https://developer.nvidia.com/nvidia-tensorrt-download

这里使用基于deb文件的安装

但是建议还是下载一个tar文件,这样在安装完成后,如果报错发现一些依赖包缺失,便于安装依赖包,在之后就会看到这样的操作。

同时需要注意的,英伟达自己的几个GPU平台,是有不一样的安装指南的。

  1. 使用deb包安装
dpkg -i xxx.deb
apt-key add xxx.pub
apt-get update
apt-get install tensorrt
  1. 安装依赖包

TensorRT的一个依赖包是libnvinfer。

如果使用Python 2.7: apt-get install python-libnvinfer-dev

如果使用Python 3.x: apt-get install python3-libnvinfer-dev

  1. 检查TensorRT是否安装成功
dpkg -l | grep TensorRT
  1. 运行实例程序

安装后会在 /usr/src 目录下生成一个 tensorrt 文件夹,里面包含 bin , data , python , samples 四个文件夹

samples 文件夹中是官方例程的源码

data , python 文件中存放官方例程用到的资源文件,比如caffemodel文件,TensorFlow模型文件,一些图片等

bin 文件夹用于存放编译后的二进制文件

可以把 tensorrt 文件夹拷贝到用户目录下,方便自己修改测试例程中的代码

进入 samples 文件夹直接 make,会在 bin 目录中生成可执行文件,可以一一进行测试学习

一般情况下,实例程序运行成功,TensorRT也就安装成功了

参考文献

  • https://docs.nvidia.com/deeplearning/tensorrt/
  • https://zhuanlan.zhihu.com/p/356072366
  • https://cloud.tencent.com/developer/article/1594985
  • https://arleyzhang.github.io/articles/7f4b25ce/

Original: https://blog.csdn.net/qq_38973721/article/details/127806319
Author: 小鹏AI
Title: TensorRT 概述、原理、Linux下安装

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/656134/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球