技术分享|浅谈tensorrt

阿木实验室 阿木实验室     2023-02-17     424

关键词:

Tensor是一个有助于在NVIDIA图形处理单元(GPU)上高性能推理c++库。它旨在与TesnsorFlow、Caffe、Pytorch以及MXNet等训练框架以互补的方式进行工作,专门致力于在GPU上快速有效地进行网络推理。

如今现有的一些训练框架(例如TensorFlow)已经集成了TensorRT,因此可以将其用于加速框架中的推理。另外,TensorRT可以作为用户应用程序中的库,它包括用于从Caffe,ONNX或TensorFlow导入现有模型的解析器,以及用于以编程方式(C++或Python API)构建模型。

一、TensorRT的好处 在训练了神经网络之后,TensorRT可以对网络进行压缩、优化以及运行时部署,并且没有框架的开销。TensorRT通过combines layers,kernel优化选择,以及根据指定的精度执行归一化和转换成最优的matrix math方法,改善网络的延迟、吞吐量以及效率。

对于深度学习推理中,有5个用于衡量软件的关键因素:

  • 吞吐量
  • 效率
  • 延迟性
  • 准确性
  • 内存使用情况

TensorRT通过结合抽象出特定硬件细节的高级API和优化推理的实现来解决这些问题,以实现高吞吐量、低延迟和低设备内存占用。

二、TensorRT适用于那些地方 通常,开发和部署一个深度学习模型的工作流程分为了3个阶段:

第一个阶段是训练模型【在该阶段一般都不会使用TensorRT训练任何模型】 第二个阶段是开发一个部署的解决方案 第三个阶段是使用开发的解决方案进行部署【即使用阶段2中的解决方案来进行部署】

阶段1:Training 在训练阶段,通常会先确定自己需要解决的问题,网络的输入输出,以及网络的损失函数,然后再设计网络结构,接下来就是根据自己的需求去整理、扩充training data,validation data and test data。在训练模型的过程中,我们一般都会通过监视模型的整个训练流程来确定自己是否需要修改网络的损失函数、训练的超参数以及数据集的增强。最后我们会使用validation data对trained model进行性能评估。需要注意的是,在该阶段一般都不会使用TensorRT训练任何模型。

阶段2:Developing A Deployment Solution 在这个阶段,我们将会通过使用trained model来创建和验证部署解决方案,该阶段分为以下几个步骤:

1、首先需要考虑清楚神经网络在系统中是如何进行工作的,根据需求中的优先事项设计出适应的解决方案。另一方面,由于不同系统之间存在多样性的原因,我们在设计和实现部署结构时需要考虑很多方面的因素。【例如,是单个网络还是多个网络,需要哪些后处理步骤等等之内的因素】

2、当设计好解决方案后,我们便可以使用TensorRT从保存的网络模型中构建一个inference engine。由于在training model期间可以选择不同的framework,因此,我们需要根据不同框架的格式,使用相应的解析器将保存的模型转换为TensorRT的格式。具体的工作流程如下图所示

3、model解析成功后,我们需要考虑优化选项——batch size、工作空间大小、混合精度和动态形状的边界,这些选项被选择并指定为TensorRT构建步骤的一部分,在此步骤中,您将基于网络构建一个优化的推理引擎。

4、使用TensorRT创建inference engine后,我们需要验证它是否可以复现原始模型的性能评估结果。如果我们选择了FP32或FP16,那么它与原始结果非常接近。如果选择了INT8,那么它与原始的结果会有一些差距。

5、一序列化格式保存inference engine-----called plan file

阶段3:Deploying A Solution 该TensorRT库将被链接到部署应用程序,当应用程序需要一个推理结果时将会调用该库。为了初始化inference engine,应用程序首先会从plan file中反序列化为一个inference engine。另一方面,TensorRT通常是异步使用的,因此,当输入数据到达时,程序调用带有输入缓冲区和TensorRT放置结果的缓冲区的enqueue函数。

三、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提供了哪些功能? 资料链接: https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html

  • End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。 阿木实验室致力于前沿IT科技的教育和智能装备,让机器人研发更高效!

浅谈高大上的微信小程序中渲染html内容—技术分享

大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题。但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢?解决方案wxParse小程序刚上线那会儿,是无... 查看详情

技术分享|浅谈——四种集群分布式控制算法

众所周知,无人机已经应用于各大领域,包括边防检查、森林防火、电力巡检、新闻采集以及商业宣传等方面。但是,随着无人机用途的不断增加,相应对于无人机各方面也有了更高的要求,对于多无人机的... 查看详情

浅谈软件销售工作

自技术领域转做销售有几年了。由于长期耕耘在技术领域,对于销售的角色进入有点晚,只是近期几年也逐渐的摸出些门道,而且按照这些门道来指导团队的实践,确实可以看到比較可喜的进步,在此总结一下。跟大家一起分享... 查看详情

技术分享浅谈mysql的临时表和临时文件

参考技术A本文内容来源于对客户的三个问题的思考:以下测试都是在MySQL8.0.21版本中完成,不同版本可能存在差异,可自行测试;临时表和临时文件都是用于临时存放数据集的地方;一般情况下,需要临时存放在临时表或临时文... 查看详情

浅谈elk日志分析平台

...联系作者获得授权,非商业转载请注明出处。小编的话“技术干货”系列文章意在分享技术牛人的知识干货,每期主题都不一样哟!期待各位读者在文后发表留言,来一场技术上的交流和思想上的碰撞!2016年7月20日,本期品高... 查看详情

html5技术分享浅谈前端安全以及如何防范

参考技术A随着互联网的发达,各种WEB应用也变得越来越复杂,满足了用户的各种需求,但是随之而来的就是各种网络安全的问题。作为前端开发行业的我们也逃不开这个问题。所以今天我就简单聊一聊WEB前端安全以及如何防范... 查看详情

社区说|浅谈量子计算机和cirq

...发者专家计划(GoogleDeveloperExpert)联合推出的,与热爱技术的开发者们交流技术,直播代码,讨论产品,分享心得的小型线上会议,每次时长45分钟到1小时。活动将由不同的谷歌开发者社区举办,并邀请国内... 查看详情

经验分享tensorrt8vstensorrt7接口增删汇总(代码片段)

 欢迎关注我的公众号[极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 本文汇集了一些TRT8对比TRT7增删的接口,可能不是并非完整。 TRT8相对于TRT7的改动还是有一些,特别是plugin部分,以... 查看详情

浅谈缓存的理论与实践(代码片段)

...规则,请点“在看”并加“星标”第一时间获取精彩技术分享在浅谈缓冲区这篇博客中,我们介绍了“缓冲”的相关知识,本文将介绍“缓冲”的孪生兄弟“缓存”。和缓冲类似,缓存可能是软件中使用最多的优... 查看详情

技术分享|浅谈im产品中的“缩略图”功能

在IM产品中,发送图片是产品的一个基本功能,如何生成缩略图以及如何显示缩略图都是该模块的组成部分,本文就如何显示缩略图从产品设计的角度去阐述。从产品上来确认该功能如何去设计,最稳妥的方式就... 查看详情

windowsserver之浅谈smb以及smb小案例分享

SMB由来       服务器消息区块(英语:ServerMessageBlock,缩写为SMB,服务器消息区块),又称网络文件共享系统(英语:CommonInternetFileSystem,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功... 查看详情

分针网——每日分享:浅谈前端javascript编程风格

前言 多家公司和组织已经公开了它们的风格规范,具体可参阅jscs.info,下面的内容主要参考了Airbnb的JavaScript风格规范。当然还有google的编程建议等编程风格本章探讨如何使用ES6的新语法,与传统的javascript语法结合在一起,... 查看详情

极智ai|讲解tensorrt怎么实现torch.select层(代码片段)

...记分享 大家好,我是极智视界,本文讲解一下TensorRT实现torch.select层。 我们知道,有很多算子都不会在TensorRT的原生支持算子列表里,当然这里要讲的select算子也是一样。然而,大部分的算子通过一些TensorR... 查看详情

浅谈esxi安装问题处理

过去的一段时间,我曾在各个技术群里潜水,遇到过很多次使用服务器安装ESXi遇到问题的,我感觉自己很失败,未曾遇到过这种场景,最近公司从代理商弄了一批最新型号的服务器(DellR740以及inspurM系列服务器)测试,我便对VM... 查看详情

极智ai|讲解tensorrt显式batch和隐式batch(代码片段)

...记分享 大家好,我是极智视界,本文讲解一下TensorRT显式batch和隐式batch。 TensorRT支持使用两种方式来指定网络的Layout,即:explicitbatch和implicitbatch。所谓显式和隐式的差别就在于Batch这一维,即显式= 查看详情

浅谈app的分享功能,有时候社交裂变形式比内容更“重要”

...关注度。作为社交裂变传播中的重要一个环节,APP的社交分享功能的重要性自然就不言而喻了。如今的社交分享已然成为了APP的标配,用户每天都在从不同的APP中分享内容到朋友圈、QQ、微博等社交平台。这个过程可以实现A 查看详情

干货分享|浅谈软件测试规划及测试用例

软件测评,你需要知道的“要点”,干货为你备上了!在开展软件测试前,软件的测试需求、测试用例的准备都是必不可少的!本文简单介绍了软件功能、性能、安全性测试中对于软件测试方向的选取及测试... 查看详情

模型推理教你tensorrt实现mish算子(代码片段)

...记分享 O_o >_< o_O O_o ~_~ o_O 本文介绍了使用tensorrt实现mish算子的方法。 相信做过目标检测的同学对yolo肯定比较熟悉了,yolov4是2020年初提出的,相继后来有了yolov5和其他一些变体,yolov4中汇集了很多tric... 查看详情