What Is TensorRT?

  • 3 replies
  • 416 views
*

sisiy

  • *****
  • 174
    • 查看个人资料
What Is TensorRT?
« 于: 七月 22, 2019, 05:02:55 pm »
本TensorRT 5.1.5开发人员指南演示了如何使用c++和Python api实现最常见的深度学习层。它展示了如何使用深度学习框架构建的现有模型,并使用所提供的解析器来构建TensorRT引擎。开发人员指南还为常见的用户任务提供了一步一步的指导,比如创建一个TensorRT网络定义、调用TensorRT构建器、序列化和反序列化,以及如何向引擎提供数据和执行推理;同时使用c++或Python API。

1. 什么是 TensorRT?

TensorRT™的核心是一个c++库,它促进了对NVIDIA图形处理单元(gpu)的高性能推理。它与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不支持的不常用的或更具创新性的层提供实现。
« 最后编辑时间: 七月 22, 2019, 05:05:22 pm 作者 sisiy »

*

sisiy

  • *****
  • 174
    • 查看个人资料
Re: What Is TensorRT?
« 回复 #1 于: 七月 22, 2019, 05:06:35 pm »
1.1。TensorRT的好处
训练神经网络之后,TensorRT使网络能够被压缩、优化并作为运行时部署,而不需要框架的开销。

TensorRT结合了多个层,优化内核选择,并根据指定的精度(FP32、FP16或INT8)执行规范化和转换,以优化矩阵数学,从而提高延迟、吞吐量和效率。

对于深度学习推理,有5个关键因素可以用来衡量软件:
吞吐量
在一定时期内的产量。通常以推论/秒或样本/秒来度量,每个服务器的吞吐量对于数据中心的成本效益扩展非常关键。
效率
单位功率的吞吐量,通常表示为性能/瓦特。效率是高效数据中心扩展的另一个关键因素,因为服务器、服务器机架和整个数据中心必须在固定的电力预算内运行。
延迟
执行推理的时间,通常以毫秒为单位。低延迟对于交付快速增长的实时基于推理的服务至关重要。
精度
训练有素的神经网络提供正确答案的能力。对于基于图像分类的应用,关键指标表示为前5或前1个百分比。
内存使用情况
在网络上进行推理需要保留的主机和设备内存取决于所使用的算法。这限制了在给定的推理平台上运行哪些网络以及网络的哪些组合。这对于需要多个网络且内存资源有限的系统尤其重要——例如用于智能视频分析的级联多类检测网络和多摄像头、多网络自主驾驶系统。


使用TensorRT的替代方案包括:
使用训练框架本身执行推理。
编写一个定制应用程序,该应用程序专门用于使用低级库和数学操作执行网络。
使用训练框架来执行推断很简单,但是在给定的GPU上,使用TensorRT这样的优化解决方案可能会导致更低的性能。培训框架倾向于实现更通用的代码,这些代码强调通用性,在进行优化时,优化的重点往往是有效的培训。

只需要编写一个定制的应用程序来执行一个神经网络,就可以获得更高的效率,但是它可能非常耗费人力,并且需要相当多的专业知识才能在现代GPU上达到高水平的性能。此外,在一个GPU上工作的优化可能不能完全转化为同一家族中的其他GPU,而且每一代GPU都可能引入只能通过编写新代码来利用的新功能。

TensorRT通过将API与特定硬件细节的高级抽象以及专门针对高吞吐量、低延迟和低设备内存占用推断而开发和优化的实现相结合来解决这些问题。
« 最后编辑时间: 七月 23, 2019, 02:09:20 pm 作者 sisiy »

*

sisiy

  • *****
  • 174
    • 查看个人资料
Re: What Is TensorRT?
« 回复 #2 于: 七月 23, 2019, 02:11:31 pm »
1.1.1。谁能从TensorRT中获益

TensorRT适用于工程师,他们负责基于新的或现有的深度学习模型构建特性和应用程序,或者将模型部署到生产环境中。这些部署可以部署到数据中心或云中的服务器、嵌入式设备、机器人或车辆,或者运行在用户工作站上的应用程序软件中。

TensorRT已成功地应用于广泛的场景,包括:
机器人
公司销售的机器人使用TensorRT来运行各种计算机视觉模型,自动引导无人机系统在动态环境中飞行。

自主车辆
TensorRT用于驱动英伟达驱动产品的计算机视觉。

科学与技术计算
一个流行的技术计算包嵌入了TensorRT,以支持神经网络模型的高吞吐量执行。

深度学习、培训和部署框架
TensorRT包含在几个流行的深度学习框架中,包括TensorFlow和MXNet。有关TensorFlow和MXNet容器发布说明,请参见TensorFlow发布说明和MXNet发布说明。

视频分析
TensorRT被用于英伟达的DeepStream产品中,为复杂的视频分析解决方案提供强大的支持,这些解决方案包括边缘的1 - 16个摄像头提要,以及数据中心中可能聚集数百甚至数千个视频提要的数据中心。

自动语音识别
TensorRT用于小型桌面/桌面设备上的语音识别。该设备支持有限的词汇量,而云计算支持更大的词汇量语音识别系统。

*

sisiy

  • *****
  • 174
    • 查看个人资料
Re: What Is TensorRT?
« 回复 #3 于: 七月 23, 2019, 02:39:49 pm »
1.2  TensorRT适用于哪里?

一般来说,开发和部署深度学习模型的工作流经历三个阶段。

阶段1:训练
在训练阶段,数据科学家和开发人员将从他们想要解决的问题的陈述开始,并决定他们将使用的输入、输出和损失函数。他们还将收集、整理、扩充训练、测试和验证数据集,并可能为这些数据集贴上标签。然后他们将设计网络的结构并训练模型。在训练过程中,他们会监控学习过程,这可能会提供反馈,导致他们修改损失函数,获取或增加训练数据。在这个过程的最后,他们将验证模型的性能并保存所训练的模型。培训和验证通常使用DGX-1™、Titan或Tesla数据中心gpu完成。
TensorRT一般不用于训练阶段的任何部分。

阶段2:开发部署解决方案
在第二阶段中,数据科学家和开发人员将从经过训练的模型开始,并使用这个经过训练的模型创建和验证部署解决方案。将这个阶段分解为几个步骤,您可以得到:
考虑一下神经网络在更大的系统中是如何工作的,它是这个系统的一部分,并设计和实现一个合适的解决方案。可能包含神经网络的系统是非常多样化的。例子包括:
汽车中的自动驾驶系统
公共场所或公司校园的视频安全系统
消费者设备的语音接口
工业生产线自动化质量保证系统
提供产品推荐的在线零售系统,或
消费者网络服务提供娱乐过滤器,用户可以应用于上传的图片。


确定你的首要任务是什么。考虑到可以实现的不同系统的多样性,在设计和实现部署体系结构时可能需要考虑很多事情:
您有单个网络还是多个网络?例如,你开发一个功能或系统,是基于一个网络(人脸检测),或者将您的系统组成的混合级联的不同模型,或者更一般的设施,提供了一组模型,可能提供的最终用户?
您将使用什么设备或计算元素来运行网络?CPU, GPU,其他,还是混合?如果模型要在GPU上运行,它是单一类型的GPU,还是需要设计一个可以在多种GPU上运行的应用程序?
数据将如何到达模型?什么是数据管道?这些数据是来自摄像头或传感器、一系列文件,还是通过网络连接上传的?
将进行什么预处理?数据将采用什么格式?如果是图像,是否需要裁剪和旋转?如果是文本,那么它是什么字符集?是否允许所有字符作为模型的输入?有什么特别的代币吗?
您将有什么延迟和吞吐量需求?
您能够将多个请求批处理在一起吗?
您是否需要单个网络的多个实例来实现所需的总体系统吞吐量和延迟?
您将如何处理网络的输出?
需要什么后处理步骤?

TensorRT提供了一个快速、模块化、紧凑、健壮、可靠的推理引擎,可以支持部署体系结构中的推理需求。

2.在数据科学家和开发人员定义了他们的推理解决方案的体系结构之后,他们确定了优先级,然后使用TensorRT从保存的网络构建一个推理引擎。根据使用的训练框架和网络体系结构,有许多方法可以做到这一点。通常,这意味着您需要使用ONNX解析器(参见图3)、Caffe解析器或TensorFlow/UFF解析器将保存的神经网络从其保存的格式解析为TensorRT。

图3 ONNX工作流V1

3.在分析网络之后,您需要考虑优化选项——批处理大小、工作区大小和混合精度。这些选项被选择并指定为TensorRT构建步骤的一部分,在此步骤中,您将根据您的网络实际构建一个优化的推理引擎。本指南的后续部分提供了关于工作流这一部分的详细说明和大量示例,将您的模型解析为TensorRT并选择优化参数
 
图4  TensorRT优化训练过的神经网络模型,以生成可部署的运行时推理引擎。

4.在使用TensorRT创建了一个推理引擎之后,您将需要验证它是否复制了在训练过程中测量的模型结果。如果您选择了FP32或FP16,那么它应该与结果非常接近。如果你选择了INT8,那么在训练中获得的准确性和推理的准确性之间可能会有一个小的差距。
5.以串行格式写出推理引擎。这也称为计划文件。

阶段3:部署解决方案
TensorRT库将链接到部署应用程序,部署应用程序将在需要推理结果时调用该库。要初始化推理引擎,应用程序首先将模型从计划文件反序列化为推理引擎。
TensorRT通常异步使用,因此,当输入数据到达时,程序调用一个enqueue函数,其中包含输入缓冲区和TensorRT应该将结果放入其中的缓冲区。
« 最后编辑时间: 七月 23, 2019, 03:37:24 pm 作者 sisiy »