TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步
TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层。它显示了如何采用深度学习框架构建现有模型,并使用该模型通过提供的解析器构建TensorRT引擎。开发人员指南还提供了针对常见用户任务的分步说明,例如创建TensorRT网络定义,调用TensorRT构建器,序列化和反序列化以及如何向引擎提供数据和执行推理;同时使用C ++或Python API。
有关先前发布的TensorRT开发人员文档,请参见TensorRT存档。
NVIDIA的核心 TensorRT是有助于在NVIDIA图形处理单元(GPU)的高性能推理一个C ++库。它旨在与TensorFlow,Caffe,PyTorch,MXNet等训练框架以互补的方式工作。它专门致力于在GPU上快速有效地运行已经受过训练的网络,以生成结果(过程在各个地方都称为评估,检测,回归或推断)。
一些训练框架(例如TensorFlow)已经集成了TensorRT,因此可以将其用于加速框架内的推理。另外, TensorRT可以用作用户应用程序中的库。它包括用于从Caffe,ONNX或TensorFlow导入现有模型的解析器,以及用于以编程方式构建模型的C ++和Python API。
图1. TensorRT是用于生产部署的高性能神经网络推理优化器和运行时引擎。

TensorRT通过融合层和优化内核选择来优化网络,以改善延迟,吞吐量,能效和内存消耗。如果应用程序指定,将另外优化网络以使其以较低的精度运行,从而进一步提高性能并减少内存需求。
下图显示TensorRT定义为部分高性能推理优化器和部分运行时引擎。它可以吸收在这些流行框架上训练过的神经网络,优化神经网络计算,生成轻量级运行时引擎(这是唯一需要部署到生产环境中的东西),然后它将使吞吐量,延迟最大化以及这些GPU平台上的性能。
图2. TensorRT是可编程的推理加速器。

TensorRT API包括最常见的深度学习层实现。有关图层的更多信息,请参见TensorRT图层。还可以使用C ++插件API或Python插件API为TensorRT不立即支持的,不常用或更具创新性的层提供实现。
在训练了神经网络之后,TensorRT使网络可以作为运行时进行压缩,优化和部署,而无需框架开销。
TensorRT根据指定的精度(FP32,FP16或INT8)组合各层,优化内核选择,并执行规范化和转换为优化的矩阵数学运算,以改善延迟,吞吐量和效率。
对于深度学习推理,有五个用于衡量软件的关键因素:
吞吐量
给定时间段内的产出量。每台服务器的吞吐量通常以推断/秒,或样本/秒来衡量,对于数据中心的经济高效扩展至关重要。
效率
每单位功率交付的吞吐量量,通常表示为性能/瓦特。效率是经济高效地扩展数据中心的另一个关键因素,因为服务器,服务器机架和整个数据中心必须在固定的功率预算内运行。
推理时间
执行推理的时间,通常以毫秒为单位。低延迟对于提供快速增长的实时基于推理的服务至关重要。
准确性
受过训练的神经网络提供正确答案的能力。对于基于图像分类的用法,关键指标表示为前5个或前1个百分比。
内存使用情况
需要保留以在网络上进行推理的主机和设备内存取决于所使用的算法。这限制了哪些网络以及网络的哪些组合可以在给定的推理平台上运行。这对于需要多个网络且内存资源有限的系统尤其重要,例如在智能视频分析和多摄像机,多网络自动驾驶系统中使用的级联多级检测网络。
使用TensorRT的替代方法包括:
- ·
使用训练框架本身执行推断。 - ·
编写专门设计用于使用低级库和数学运算来执行网络的自定义应用程序。
使用训练框架执行推理很容易,但是与使用TensorRT之类的优化解决方案相比,给定GPU上的性能往往低得多。训练框架倾向于实施强调通用性的通用代码,优化往往集中在有效的训练上。
编写仅用于执行神经网络的自定义应用程序,可以获得更高的效率。但是,这可能会非常费力,并且需要大量专业知识才能在现代GPU上达到较高的性能水平。此外,在一个GPU上进行的优化可能无法完全转换为同一系列中的其他GPU,并且每一代GPU都可能引入只能通过编写新代码来利用的新功能。
TensorRT通过结合抽象出特定硬件细节的高级API和优化推理的实现来解决这些问题,以实现高吞吐量,低延迟和低设备内存占用。
TensorRT供负责基于新的或现有的深度学习模型,构建功能和应用程序,或将模型部署到生产环境中的工程师使用。这些部署可能会在数据中心或云中的服务器,嵌入式设备,机器人/车辆,或将在工作站上运行的应用程序软件中。
TensorRT已在各种场景中成功使用,包括:
机器人
使用TensorRT的机器人来运行各种计算机视觉模型,以自动引导在动态环境中飞行的无人机系统。
自动驾驶汽车
TensorRT用于支持NVIDIA Drive产品中的计算机视觉。
科技计算
TensorRT嵌入了一种流行的技术计算软件包,可实现神经网络模型的高吞吐量执行。
深度学习训练和部署框架
TensorRT包含在几种流行的深度学习框架中,包括TensorFlow和MXNet。有关TensorFlow和MXNet容器发行说明,请参见TensorFlow发行说明和 MXNet发行说明。
视频分析
TensorRT在使用NVIDIA的DeepStream产品成熟的视频分析解决方案都在1- 16种摄像头资料,并在数据中心,其中视频资料的大量数据集。
自动语音识别
TensorRT用于在小型台式/台式设备上支持语音识别。设备上支持有限的词汇表,而云中提供了更大的词汇表语音识别系统。
通常,用于开发和部署深度学习模型的工作流经历三个阶段。
- ·
第一阶段是训练 - ·
第二阶段正在开发部署解决方案 - ·
第三阶段是该解决方案的部署
阶段1:训练
在训练阶段,数据科学家和开发人员将首先描述要解决的问题,并决定将使用的精确输入,输出和损失函数。还将收集,整理,扩充并可能标记训练,测试和验证数据集。然后将设计网络结构并训练模型。在训练期间,监视学习过程,该过程可能会提供反馈,这将导致损失函数修改,获取或增加训练数据。此过程结束时,将验证模型性能并保存经过训练的模型。DGX-1 ,Titan或Tesla数据中心GPU。
在训练阶段的任何阶段通常都不会使用TensorRT。
阶段2:开发部署解决方案
在第二阶段,数据科学家和开发人员将从成熟模型开始,并使用该成熟的模型创建和验证部署解决方案。将这一阶段分解为若干步骤,将获得:
- 考虑一下神经网络在更大的系统中是如何工作的,并设计和实施适当的解决方案。可能包含神经网络的系统范围千差万别。示例包括:
- o车辆中的自动驾驶系统
- o公共场所或公司校园中的视频安全系统
- o消费者设备的语音接口
- o工业生产线自动化质量保证系统
- o提供产品推荐的在线零售系统
- o提供娱乐筛选器的消费者Web服务,用户可以将其应用于上载的图像。
确定优先事项。考虑到可以实现的不同系统的多样性,在设计和实现部署体系结构时可能需要考虑很多因素。
- o有一个或多个网络?例如,是否在开发基于单个网络的功能或系统(人脸检测),或者系统也不是由不同模型的混合或级联组成,或者可能不是由更广泛的,可以提供收集模型的设备所组成?由最终用户提供?
- o将使用什么设备或计算元素来运行网络?CPU,GPU或其它?如果模型要在GPU上运行,单一类型的GPU,还是需要设计一个可以在各种GPU上运行的应用程序?
- o数据如何到达模型?什么是数据管道?数据是来自摄像头或传感器,来自一系列文件,还是通过网络连接上传?
- o将进行哪些预处理?数据将以什么格式输入?如果是图像,是否需要裁剪,旋转?如果是文本,它是什么字符集?是否允许所有字符作为模型的输入?是否有特殊令牌?
- o有什么延迟和吞吐量要求?
- o可以将多个请求一起批处理吗?
- o是否需要一个网络的多个实例来实现所需的整体系统吞吐量和延迟?
- o将如何处理网络的输出?
- o需要哪些后处理步骤?
TensorRT提供了一个快速,模块化,紧凑,健壮,可靠的推理引擎,可以支持部署架构内的推理需求。
- 数据科学家和开发人员定义了推理解决方案的体系结构,从而确定优先级之后,使用TensorRT从保存的网络中构建了推理引擎。有多种方法可以执行此操作,具体取决于所使用的训练框架和网络体系结构。一般情况下,需要保存的神经网络,并从它的保存格式解析成TensorRT使用ONNX解析器(见左侧图3),来自Caffe 解析器或UFF解析器。
图3. ONNX Workflow V1

解析网络后,考虑优化选项-批处理大小,工作空间大小,混合精度以及动态形状上的边界这些选项是在TensorRT构建步骤中选择和指定的,可以在其中基于网络构建优化的推理引擎。本文的后续部分提供了详细的说明和工作流这一部分的许多示例,将模型解析为TensorRT并选择了优化参数(请参见图3)。
- 使用TensorRT创建推理引擎后,将需要验证它是否可以重现训练过程中测量的模型结果。如果选择了FP32或FP16,则它应与结果非常接近。如果选择了INT8,则在训练过程中获得的准确度与推理准确度之间可能会有很小的差距。
- 以序列化格式写出推理引擎。这也称为调度文件。
阶段3:部署解决方案
该TensorRT库将被链接到部署应用程序,将调用推断结果的库。要初始化推理引擎,应用程序将首先将模型从调度文件中反序列化为推理引擎。
TensorRT通常异步使用,因此,当输入数据到达时,程序将使用输入缓冲区和TensorRT,将结果放入其中的缓冲区调输入函数。
TensorRT 7.2.1开发初步的更多相关文章
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- DONET三层架构开发初步
.NET三层架构开发初步 今天咱们来谈下三层架构.说到三层架构,搞过点程序的可能都知道三层架构的概念.但是对三层的精髓可能不是很了解. 首先说下自己对三层的理解,就是使用三个(多个)项目结合起来开发出 ...
- Cardboard虚拟现实开发初步(一)
Google Cardboard 虚拟现实眼镜开发初步(一) 虚拟现实技术简单介绍 不得不说这几年虚拟现实技术逐渐火热,伴随着虚拟现实设备的价格迅速平民化,越来越多的虚拟现实设备来到了我们眼前,也因此 ...
- (转)TDD的iOS开发初步以及Kiwi使用入门
本文转自“瞄神”博客 TDD的iOS开发初步以及Kiwi使用入门 测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则,也是先进程序开发的共识.App ...
- Cardboard虚拟现实开发初步(二)
Google Cardboard 虚拟现实眼镜开发初步(二) Cardboard SDK for Unity的使用 上一篇文章作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,本篇就会带领大家去看一 ...
- TensorRT 基于Yolov3的开发
TensorRT 基于Yolov3的开发 Models Desc tensorRT for Yolov3 https://github.com/lewes6369/TensorRT-Yolov3 Te ...
- TensorRT 7.2.1 开发概要(下)
TensorRT 7.2.1 开发概要(下) 1.2. Where Does TensorRT Fit? 一般来说,开发和部署深度学习模型的工作流要经过三个阶段. Phase 1 is trainin ...
- TensorRT 7.2.1 开发概要(上)
TensorRT 7.2.1 开发概要(上) Abstract 这个TysRR7.2.1开发者指南演示了如何使用C++和Python API来实现最常用的深层学习层.它展示了如何使用深度学习框架构建现 ...
- 以太坊web3开发初步学习
以太坊web3开发初步学习 此文是对https://learnblockchain.cn/2018/04/15/web3-html/的学习再理解. 以太坊智能合约通过使用web3.js前端和智能合约交 ...
随机推荐
- 病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析
前言 按照我的个人习惯,在运用诸如IDA Pro与OllyDBG对病毒进行逆向分析之前,我都会利用一些自动化的工具,通过静态或动态的分析方法(参见<病毒木马查杀第008篇:熊猫烧香之病毒查杀总结 ...
- hdu1435 稳定婚姻问题
题意: Stable Match Special Judge Problem Description Network 公司的BOSS 说现在他们公司建立的信号发射站和接收站经常出现信号发送接收不稳定的 ...
- UVA11997求前k个和,多路归并问题
题意: 给你一个二维矩阵,n*n的,每次从每一行中拿出来一个,然后加起来组成一个和,一共可以得到n^n个和,要求求出这n^n个和中最小的那n个和. 思路: 多路归并问题,先说下多路 ...
- CVE-2012-1876:Internet Exporter MSHTML.DLL CaculateMinMax 堆溢出简单分析
0x01 2012 Pwn2Own 黑客大赛 Pwn2Own 是世界上最著名的黑客大赛,意在激励白帽黑客们进行顶尖的安全研究.在 2012 年 Pwn2Own 大赛上,来自法国著名的安全团队 Vupe ...
- 手机访问电脑本地localhost网页
项目需要用手机访问电脑本地网页,从而可以调试项目,对代码的理解的快一点 重点 确保手机和电脑在同一个局域网 可以通过手机开热点电脑连接或者电脑开便携式热点手机连接 确保电脑的防火墙是关闭的 打开apa ...
- I/O流以及文件的基本操作
文件操作: 文件操作其实就是一个FIle类:我们学习文件操作就是学习File类中的方法: 文件基操: 第一部分:学习文件的基本操作(先扒源码以及文档) Constructor Description ...
- 传统 BI 如何转大数据数仓
前几天建了一个数据仓库方向的小群,收集了大家的一些问题,其中有个问题,一哥很想去谈一谈--现在做传统数仓,如何快速转到大数据数据呢?其实一哥知道的很多同事都是从传统数据仓库转到大数据的,今天就结合身边 ...
- Javac·编码GBK的不可映射字符
阅文时长 | 0.04分钟 字数统计 | 79.2字符 主要内容 | 1.引言&背景 2.声明与参考资料 『Javac·编码GBK的不可映射字符』 编写人 | SCscHero 编写时间 | ...
- .Net 中的 string、String、StringBuffer 内存处理性能 和 应用场景
body { font-family: Segoe UI, SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif } code { color: ...
- [DB] 关系型数据库
名词 数据库(database):保存有组织的数据的容器,是通过DBMS创建的容器 表(table):某种特定类型数据的结构化清单 元组(tuple):行,一条数据库记录,对应一个事物 属性(prop ...