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是如何工作的
为了优化模型的inference,TensorRT会根据网络的定义执行优化【包括特定平台的优化】并生成inference engine
此过程被称为构建阶段,尤其是在嵌入式平台上会消耗大量的时间
因此,一个典型的应用程序只会被构建一次engine,然后将其序列化为plane file以供后续使用。
注意:生成的plane file 不能跨平台或TensorRT 版本移植。
另外,因为plane file是明确指定GPU 的model,所以我们要想使用不同的GPU来运行plane file必须得重新指定GPU
构建阶段在layer graph上执行以下优化
- 消除没有使用的outputs layer
- 消除等同于没有操作的operation
- convolution,bias and ReLU的融合
- 把具有足够相似的parameters和相同的source tensor的operation进行aggregation【例如1x1的convolution】
- 通过将输出层定向到正确的最终目的来合并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主要做了下面几件事,来提升模型的运行速度
- TensorRT支持FP16和INT8的计算
深度学习在训练的时候一般是应用32位或者16位数据
TensorRT在推理的时候可以降低模型参数的位宽来进行低精度推理,以达到加速推断的目的。
- TensorRT对于网络结构进行重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化
GPU上跑的函数叫Kernel,TensorRT是存在Kernel的调用的
在绝大部分框架中,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三次cuDNN对应的API
但实际上这三层的实现完全是可以合并到一起的,TensorRT会对一些可以合并网络进行合并
目前的网络一方面越来越深,另一方面越来越宽,可能并行做若干个相同大小的卷积,这些卷积计算其实也是可以合并到一起来做的
- Kernel Auto-Tuning:网络模型在推理计算时,是调用GPU的CUDA核进行计算的
TensorRT可以针对不同的算法,不同的网络模型,不同的GPU平台,进行 CUDA核的调整
以保证当前模型在特定平台上以最优性能计算。
- Dynamic Tensor Memory 在每个tensor的使用期间,TensorRT会为其指定显存
Dynamic Tensor Memory 在每个tensor的使用期间,TensorRT会为其指定显存,避免显存重复申请,减少内存占用和提高重复使用效率。
TensorRT的自动安装
主要是网络比较好,可以采用这个方式安装
pip install tensorrt
pip install nvidia-pyindex
pip install nvidia-tensorrt
TensorRT的手动安装
- 下载安装包
查询本机Linux版本:cat /etc/issue
查询本机CUDA版本:cat /usr/local/cuda/version.txt
打开官网下载TensorRT:https://developer.nvidia.com/nvidia-tensorrt-download
这里使用基于deb文件的安装
但是建议还是下载一个tar文件,这样在安装完成后,如果报错发现一些依赖包缺失,便于安装依赖包,在之后就会看到这样的操作。
同时需要注意的,英伟达自己的几个GPU平台,是有不一样的安装指南的。
- 使用deb包安装
dpkg -i xxx.deb
apt-key add xxx.pub
apt-get update
apt-get install tensorrt
- 安装依赖包
TensorRT的一个依赖包是libnvinfer。
如果使用Python 2.7: apt-get install python-libnvinfer-dev
如果使用Python 3.x:apt-get install python3-libnvinfer-dev
- 检查TensorRT是否安装成功
dpkg -l | grep TensorRT
- 运行实例程序
安装后会在 /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/
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhekibge
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13