TensorRT笔记(一)TensorRT简介

摘要

本TensorRT 7.2.2开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层。它显示了如何采用深度学习框架构建的现有模型,并使用该模型通过提供的解析器构建TensorRT引擎。开发人员指南还提供了针对常见用户任务的分步说明,例如创建TensorRT网络定义,调用TensorRT构建器,序列化和反序列化以及如何向引擎提供数据和执行推理;同时使用C ++或Python API。
有关先前发布的TensorRT开发人员文档,请参见 TensorRT Archives.

1.什么是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 ++插件APIPython插件API为TensorRT不立即支持的不常用或更具创新性的层提供实现。

1.1 TensorRT的好处

在训练了神经网络之后,TensorRT使网络可以作为运行时进行压缩,优化和部署,而无需框架开销。
TensorRT根据指定的精度(FP32,FP16或INT8)组合各层,优化内核选择,并执行规范化和转换为优化的矩阵数学运算,以改善延迟,吞吐量和效率。

对于深度学习推理,有五个用于衡量软件的关键因素:
Throughput 通量
给定时间段内的产出量。每台服务器的吞吐量通常以推断/秒或样本/秒来衡量,对于数据中心的经济高效扩展至关重要。

Efficiency 效率
每单位功率交付的吞吐量量,通常表示为性能/瓦特。效率是经济高效地扩展数据中心的另一个关键因素,因为服务器,服务器机架和整个数据中心必须在固定的功率预算内运行。

Latency 潜伏
执行推理的时间,通常以毫秒为单位。低延迟对于提供快速增长的实时基于推理的服务至关重要。

Accuracy 准确性
受过训练的神经网络提供正确答案的能力。对于基于图像分类的用法,关键指标表示为前5个或前1个百分比。

Memory usage 内存使用情况
需要保留以在网络上进行推理的主机和设备内存取决于所使用的算法。这限制了哪些网络以及网络的哪些组合可以在给定的推理平台上运行。这对于需要多个网络且内存资源有限的系统尤其重要,例如,在智能视频分析和多摄像机,多网络自动驾驶系统中使用的级联多级检测网络。

使用TensorRT的替代方法包括:

  • 使用训练框架本身执行推理。
  • 编写专门设计用于使用低级库和数学运算来执行网络的自定义应用程序。

使用训练框架执行推理很容易,但是与使用TensorRT之类的优化解决方案相比,给定GPU上的性能往往低得多。训练框架倾向于实施强调通用性的通用代码,并且当优化它们时,优化往往集中在有效的训练上。

通过编写仅用于执行神经网络的自定义应用程序可以获得更高的效率,但是,这可能会非常费力,并且需要大量专业知识才能在现代GPU上达到较高的性能水平。此外,在一个GPU上进行的优化可能无法完全转换为同一系列中的其他GPU,并且每一代GPU都可能引入只能通过编写新代码来利用的新功能。

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

1.1.1 谁可以从TensorRT中受益

TensorRT供负责基于新的或现有的深度学习模型构建功能和应用程序或将模型部署到生产环境中的设备中使用。这些部署可能会在数据中心或云中的服务器,嵌入式设备,机器人或车辆或将在您的工作站上运行的应用程序软件中。
TensorRT已在各种场景中成功使用,包括:
机器人
公司出售使用TensorRT的机器人来运行各种计算机视觉模型,以自动引导在动态环境中飞行的无人机系统。

自动驾驶汽车
TensorRT用于支持NVIDIA Drive产品中的计算机视觉。

科技计算
TensorRT嵌入了一种流行的技术计算软件包,可实现神经网络模型的高吞吐量执行。

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

视频分析
TensorRT在使用NVIDIA的DeepStream产品成熟的视频分析解决方案都在1边- 16种相机饲料,并在数据中心,其中视频饲料的数百甚至数千可能走到一起。

自动语音识别
TensorRT用于在小型台式/台式设备上支持语音识别。设备上支持有限的词汇表,而云中提供了更大的词汇表语音识别系统。

1.2 TensorRT适合哪里?

通常,用于开发和部署深度学习模型的工作流经历三个阶段。

  • 第一阶段是训练
  • 第二阶段正在开发部署解决方案
  • 第三阶段是该解决方案的部署

阶段1:训练
在训练阶段,数据科学家和开发人员将首先陈述他们要解决的问题,并决定将使用的精确输入,输出和损失函数。他们还将收集,整理,扩充并可能标记培训,测试和验证数据集。然后他们将设计网络结构并训练模型。在培训期间,他们将监视学习过程,该过程可能会提供反馈,这将导致他们修改损失函数,获取或增加培训数据。在此过程结束时,他们将验证模型性能并保存经过训练的模型。DGX-1™ ,Titan或Tesla数据中心GPU。

在训练阶段的任何阶段通常都不会使用TensorRT。

阶段2:开发部署解决方案
在第二阶段,数据科学家和开发人员将从训练有素的模型开始,并使用该训练有素的模型创建和验证部署解决方案。将这一阶段分解为若干步骤,您将获得:
1.考虑一下神经网络在更大的系统中是如何工作的,并设计和实施适当的解决方案。可能包含神经网络的系统范围千差万别。示例包括:

  • 车辆中的自动驾驶系统
  • 公共场所或公司校园中的视频安全系统
  • 消费者设备的语音接口
  • 工业生产线自动化质量保证系统
  • 提供产品推荐的在线零售系统,或
  • 提供娱乐筛选器的消费者Web服务,用户可以将其应用于上载的图像。

确定您的优先事项。考虑到您可以实现的不同系统的多样性,在设计和实现部署体系结构时可能需要考虑很多因素。

  • 您有一个或多个网络?例如,您是否在开发基于单个网络的功能或系统(人脸检测),或者您的系统也不是由不同模型的混合或级联组成,或者可能不是由更广泛的,可以提供收集模型的设施所组成?由最终用户提供?
  • 您将使用什么设备或计算元素来运行网络?CPU,GPU或其他?如果模型要在GPU上运行,是单一类型的GPU,还是您需要设计一个可以在各种GPU上运行的应用程序?
  • 数据如何到达模型?什么是数据管道?数据是来自照相机或传感器,来自一系列文件,还是通过网络连接上传?
  • 将进行哪些预处理?数据将以什么格式输入?如果是图像,是否需要裁剪,旋转?如果是文本,它是什么字符集?是否允许所有字符作为模型的输入?是否有特殊令牌?
  • 您将有什么延迟和吞吐量要求?
  • 您可以将多个请求一起批处理吗?
  • 您是否需要一个网络的多个实例来实现所需的整体系统吞吐量和延迟?
  • 您将如何处理网络的输出?
  • 需要哪些后处理步骤?

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

2.数据科学家和开发人员定义了推理解决方案的体系结构(通过它们确定优先级)之后,他们便使用TensorRT从保存的网络中构建了推理引擎。有多种方法可以执行此操作,具体取决于所使用的培训框架和网络体系结构。一般情况下,你需要保存的神经网络,并从它的保存格式解析成这个手段TensorRT使用ONNX解析器(见左侧图3),来自Caffe 解析器或UFF解析器。
图3. ONNX Workflow V1

3.解析网络后,请考虑优化选项-批处理大小,工作空间大小,混合精度以及动态形状上的边界这些选项是在TensorRT构建步骤中选择和指定的,您可以在其中基于网络构建优化的推理引擎。本指南的后续部分提供了详细的说明和工作流这一部分的许多示例,将您的模型解析为TensorRT并选择了优化参数(请参见图3)。
4.使用TensorRT创建推理引擎后,您将需要验证它是否可以重现训练过程中测量的模型结果。如果选择了FP32或FP16,则它应与结果非常接近。如果您选择了INT8,则在训练过程中获得的准确度与推理准确度之间可能会有很小的差距。
5.以序列化格式写出推理引擎。这也称为计划文件。

阶段3:部署解决方案
该TensorRT库将被链接到部署应用程序,将调用,当它想推理结果的库。要初始化推理引擎,应用程序将首先将模型从计划文件中反序列化为推理引擎。

TensorRT通常异步使用,因此,当输入数据到达时,程序将使用输入缓冲区和TensorRT应将结果放入其中的缓冲区调用入队函数。

1.3 TensorRT如何工作?

为了优化推理模型,TensorRT会采用您的网络定义,执行包括平台特定的优化在内的优化,并生成推理引擎。此过程称为构建阶段。构建阶段可能会花费大量时间,尤其是在嵌入式平台上运行时。因此,典型的应用程序将只构建一次引擎,然后将其序列化为计划文件以供以后使用。
注意:生成的计划文件不能跨平台或TensorRT版本移植。计划特定于其所构建的确切GPU模型(除了平台和TensorRT版本),并且如果您想在其他GPU上运行它们,则必须将其重新定位到特定的GPU。
构建阶段对图层图执行以下优化:

  • 消除不使用输出的图层
  • 消除等同于无操作的操作
  • 卷积,偏置和ReLU操作的融合
  • 具有足够相似的参数和相同的源张量的操作的聚合(例如,GoogleNet v5的初始模块中的1x1卷积)
  • 通过将图层输出定向到正确的最终目的地来合并串联图层。

必要时,制造商还可以修改砝码的精度。当生成8位整数精度的网络时,它使用称为校准的过程来确定中间激活的动态范围,从而确定用于量化的适当缩放因子。

此外,构建阶段还会在虚拟数据上运行层,以从其内核目录中选择最快的文件,并在适当的情况下执行权重预格式化和内存优化。

有关更多信息,请参见使用混合精度

1.4 TensorRT提供哪些功能?

TensorRT使开发人员能够导入,校准,生成和部署优化的网络。网络可以直接从Caffe导入,也可以通过UFF或ONNX格式从其他框架导入。也可以通过实例化各个图层并直接设置参数和权重以编程方式创建它们。
用户还可以使用插件界面通过TensorRT运行自定义图层。GraphSurgeon实用程序提供了将TensorFlow节点映射到TensorRT中的自定义层的功能,从而可以使用TensorRT对许多TensorFlow网络进行推理。

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

TensorRT核心库中的关键接口是:
Network Definition 网络定义
网络定义接口为应用程序提供了指定网络定义的方法。可以指定输入和输出张量,可以添加层,并且有一个用于配置每种支持的层类型的界面。以及卷积层和循环层等层类型,以及Plugin层类型都允许应用程序实现TensorRT本身不支持的功能。有关网络定义的更多信息,请参见网络定义API

Optimization Profile 优化配置文件
优化配置文件指定对动态尺寸的约束。有关更多信息,请参阅Optimization Profile API和 “使用动态形状” 部分。

Builder Configuration 生成器配置
“构建器配置”界面指定用于创建引擎的详细信息。它允许应用程序指定优化配置文件,最大工作空间大小,最小可接受的精度水平,用于自动调整的定时迭代计数以及用于量化网络以8位精度运行的接口。有关更多信息,请参考 Builder Config API

Builder
构建器接口允许根据网络定义和构建器配置创建优化的引擎。有关更多信息,请参阅Builder API

Engine
Engine接口允许应用程序执行推理。它支持同步和异步执行,概要分析以及枚举和查询引擎输入和输出的绑定。单引擎可以具有多个执行上下文,从而允许将一组训练有素的参数用于同时执行多个批次。有关引擎的更多信息,请参见Execution API

TensorRT提供了用于导入受训网络的解析器,以创建网络定义:
Caffe解析器
该解析器可用于解析在BVLC Caffe或NVCaffe 0.16中创建的Caffe网络。它还提供了为自定义层注册插件工厂的功能。有关C ++ Caffe解析器的更多详细信息,请参见NvCaffeParser或Python Caffe解析器

UFF解析器
该解析器可用于解析UFF格式的网络。它还提供了注册插件工厂并为自定义层传递字段属性的功能。有关C ++ UFF解析器的更多详细信息,请参见NvUffParser或Python UFF解析器

ONNX解析器
该解析器可用于解析ONNX模型。有关C ++ ONNX解析器的更多详细信息,请参见NvONNXParser或Python ONNX解析器

注意:此外,可以在GitHub上找到一些TensorRT Caffe和ONNX解析器和插件。

1.5 我如何获得TensorRT?

有关如何安装TensorRT的分步说明,请参见《TensorRT安装指南》。

1.6 TensorRT弃用政策

弃用是一项预先警告,功能将消失,因此您有时间用其他方法更新代码。从TensorRT 8.0开始,在主要发行版(n +2).0中将删除版本nx中不推荐使用的功能。例如,TensorRT 8.0将省略TensorRT 6.0中不推荐使用的功能,其中一些早在TensorRT 4.0时就已不推荐使用。TensorRT 9.0将省略TensorRT 7.x中不推荐使用的功能。

1.7 TensorRT API文档(核心代码后续学习用)

TensorRT API文档

猜你喜欢

转载自blog.csdn.net/qq_33287871/article/details/113692047