TensorRT 7.2.1 开发概要(下)
TensorRT 7.2.1 开发概要(下)
1.2. Where Does TensorRT Fit?
一般来说,开发和部署深度学习模型的工作流要经过三个阶段。
Phase 1 is training
Phase 2 is developing a deployment solution, and
Phase 3 is the deployment of that solution
Phase 1: Training
在训练阶段,数据科学家和开发人员将首先陈述他们想要解决的问题,然后决定他们将使用的精确输入、输出和损失函数。他们还将收集、整理、扩充并可能标记训练、测试和验证数据集。然后他们将设计网络结构并训练模型。在训练过程中,他们将监控学习过程,这可能会提供反馈,使他们修正损失函数,获取或增加训练数据。在这个过程的最后,他们将验证模型的性能并保存经过训练的模型。训练和验证通常使用DGX-1完成™ 、Titan或特斯拉数据中心GPU。
TensorRT通常不在训练阶段的任何部分使用。
Phase 2:
Developing A Deployment Solution
在第二阶段,数据科学家和开发人员将从经过训练的模型开始,并使用这个经过训练的模型创建和验证部署解决方案。将这个阶段分解为几个步骤,您将得到:
- 思考一下神经网络在它所属的大系统中是如何工作的,并设计和实现适当的解决方案。可能包含神经网络的系统范围非常多样。示例包括:
汽车的自动驾驶系统
公共场所或公司校园的视频安全系统
用户设备的语音接口
工业生产线自动化质量保证系统
提供产品推荐的在线零售系统,或
提供娱乐性过滤器的消费者网络服务用户可以应用到上传的图像。
确定你的优先事项。考虑到您可以实现的不同系统的多样性,在设计和实现部署架构时可能需要考虑很多事情。
你有一个网络还是多个网络?例如,您是否正在开发基于单个网络(人脸检测)的功能或系统,您的系统也不会由不同模型的混合或级联组成,或者可能是由最终用户提供的集合模型的更通用的工具组成?
您将使用什么设备或计算元素来运行网络?CPU,GPU,其他,还是混合?如果模型要在GPU上运行,它是单一类型的GPU,还是需要设计一个可以在各种GPU上运行的应用程序?
数据如何到达模型?什么是数据管道?数据来自摄像机或传感器,来自一系列文件,还是通过网络连接上传?
将进行哪些预处理?数据的格式是什么?如果是图像,是否需要裁剪、旋转?如果是文本,它是什么字符集?是否允许所有字符作为模型的输入?有什么特别的代币吗?
您对延迟和吞吐量有什么要求?
你能批量处理多个请求吗?
您是否需要单个网络的多个实例来实现所需的总体系统吞吐量和延迟?
你将如何处理网络的输出?
需要哪些后处理步骤?
TensorRT提供了一个快速、模块化、紧凑、健壮、可靠的推理引擎,可以支持部署架构中的推理需求。
在数据科学家和开发人员定义了他们的推理解决方案的体系结构之后,他们通过确定他们的优先级,然后使用TensorRT从保存的网络中构建一个推理引擎。根据使用的培训框架和网络体系结构,有许多方法可以实现这一点。通常,这意味着您需要使用ONNX解析器(参见图3左侧)、Caffe解析器或UFF解析器将保存的神经网络从保存的格式解析为TensorRT。
- 解析网络后,考虑优化选项——批处理大小、工作区大小、混合精度和动态形状的边界这些选项被选择并指定为TensorRT构建步骤的一部分,在该步骤中,您可以基于网络构建优化的推理机。本指南的后续部分将提供有关工作流这一部分的详细说明和大量示例,将模型解析为TensorRT并选择优化参数(参见图3)。
在使用TensorRT创建了一个推理引擎之后,您需要验证它是否再现了在训练过程中测量到的模型结果。如果您选择了FP32或FP16,它应该与结果非常接近。如果您选择了INT8,那么在训练过程中获得的准确度与推理精度之间可能会有一个小差距。
以序列化格式写出推理引擎。这也称为计划文件。
Phase 3: Deploying A Solution
TensorRT库将链接到部署应用程序,该应用程序将在需要推理结果时调用库。为了初始化推理机,应用程序首先将模型从计划文件反序列化到推理机中。
TensorRT通常是异步使用的,因此,当输入数据到达时,程序将调用一个包含输入缓冲区和TensorRT应将结果放入其中的缓冲区的排队函数。
1.3. How Does TensorRT Work?
为了优化推理模型,TensorRT获取网络定义,执行包括特定于平台的优化在内的优化,并生成推理引擎。这个过程被称为构建阶段。构建阶段可能需要相当长的时间,尤其是在嵌入式平台上运行时。因此,一个典型的应用程序将构建一个引擎,然后将其序列化为一个计划文件供以后使用。
注意:生成的计划文件不能跨平台或TensorRT版本移植。计划是特定的确切的GPU模型,他们是建立在(除了平台和TensorRT版本),必须重新针对特定的GPU,以防你想在不同的GPU上运行它们。
构建阶段对层图执行以下优化:
· Elimination of layers whose outputs are not used
· Elimination of operations which are equivalent to no-op
· The fusion of convolution, bias and ReLU operations
· Aggregation of operations with sufficiently similar parameters and the same source tensor
(for example, the 1x1 convolutions in GoogleNet v5’s inception module)
· Merging of concatenation layers by directing layer outputs to the correct eventual destination.
如果需要,生成器还可以修改权重的精度。当以8位整数精度生成网络时,它使用一个称为校准的过程来确定中间激活的动态范围,从而确定量化的适当比例因子。
此外,构建阶段还对虚拟数据运行层,以从其内核目录中选择最快的,并在适当的情况下执行权重预格式化和内存优化。
For more information, see Working With Mixed
Precision.
1.4. What Capabilities Does TensorRT Provide?
TensorRT使开发人员能够导入、校准、生成和部署优化的网络。网络可以直接从Caffe导入,也可以通过UFF或ONNX格式从其他框架导入。它们也可以通过实例化各个层并直接设置参数和权重来以编程方式创建。
用户还可以使用插件接口通过TensorRT运行自定义层。GraphSurgeon实用程序提供了将TensorFlow节点映射到TensorRT中的自定义层的能力,从而可以使用TensorRT对许多TensorFlow网络进行推理。
TensorRT在所有支持的平台上提供C++实现,以及在x86, aarch64, and ppc64le上实现Python。
TensorRT核心库中的关键接口包括:
网络定义
网络定义接口为应用程序提供指定网络定义的方法。可以指定输入和输出张量,可以添加层,并且有一个用于配置每个支持层类型的接口。以及层类型,如卷积层和递归层,以及插件层类型允许应用程序实现TensorRT本机不支持的功能。有关网络定义的详细信息,请参阅网络定义API。
优化配置文件
优化配置文件指定对动态尺寸的约束。有关详细信息,请参阅优化配置文件API和使用动态形状部分。
生成器配置
生成器配置界面指定创建引擎的详细信息。它允许应用程序指定优化配置文件、最大工作空间大小、可接受的最低精度水平、自动调整的定时迭代计数以及量化网络以8位精度运行的接口。有关更多信息,请参阅构建器配置API。
Builder
生成器接口允许从网络定义和生成器配置创建优化的引擎。有关详细信息,请参阅构建器API。
Engine
引擎接口允许应用程序执行推理。它支持同步和异步执行、分析、枚举和查询引擎输入和输出的绑定。一个引擎可以有多个执行上下文,允许使用一组经过训练的参数同时执行多个批处理。有关引擎的更多信息,请参阅执行API。
TensorRT提供解析器,用于导入经过训练的网络以创建网络定义:
Caffe解析器
该解析器可用于解析在BVLC Caffe或NVCaffe 0.16中创建的Caffe网络。它还提供了为自定义层注册插件工厂的功能。有关C++ CAFE解析器的更多细节,请参见NvCaffeParser或Python CalpE解析器。
UFF解析器
这个解析器可以用来解析UFF格式的网络。它还提供注册插件工厂和为自定义层传递字段属性的功能。有关C++ UFF解析器的更多细节,请参见NvUffParser或Python UFF解析器。
ONNX解析器
这个解析器可以用来解析ONNX模型。有关C++ ONNX解析器的更多细节,请参见NvONNXParser或Python ONX解析器。
注意:此外,一些TensorRT Caffe和ONNX解析器和插件可以在GitHub上找到。
1.5. How Do I Get TensorRT?
For step-by-step instructions on how to install TensorRT, see the TensorRT Installation Guide.
1.6. TensorRT Deprecation Policy
Deprecision是一种预先警告功能将消失,这样您就有时间用另一种方法更新代码。从Tensorrt8.0开始,n.x版中不推荐使用的特性将在主发行版(n+2)中删除。例如,TensorRT 8.0将忽略TensorRT 6.0中不推荐使用的功能,其中一些功能早在TensorRT 4.0就已经弃用了。TensorRT 9.0将省略TensorRT 7.x中不推荐使用的功能。
TensorRT 7.2.1 开发概要(下)相关推荐
- TensorRT 7.2.1 开发概要(上)
TensorRT 7.2.1 开发概要(上) Abstract 这个TysRR7.2.1开发者指南演示了如何使用C++和Python API来实现最常用的深层学习层.它展示了如何使用深度学习框架构建现 ...
- TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...
- 基于微信的座位预约预订小程序(java后台springboot框架)、毕业设计、开题报告、毕业论文参考(4)开发概要
小程序开发概要 微信小程序的MINA 框架 微信开发者工具为了达到让开发人员利用微信这个平台尽最大的可能性用最简单并且又最有效的方式开发出拥有与其他的原生APP一致的用户体验的小程序的目的,微信小程序 ...
- TensorRT 基于Yolov3的开发
TensorRT 基于Yolov3的开发 Models Desc tensorRT for Yolov3 https://github.com/lewes6369/TensorRT-Yolov3 Te ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved?
Myeclipse开发环境下文件中出现的提示错误与解决方法:The import javax.servlet cannot be resolved? 参考文章: (1)Myeclipse开发环境下文件 ...
- 解决thinkphp在开发环境下文件模块找不到的问题
win10系统下,phpstudy开发环境下小问题描述: 找不到public公共模块. Not Found The requested URL /public/admin/login.html was ...
- 4.4 开发模式下的测试:简化我们对链码的测试过程
4.4 开发模式下的测试:简化我们对链码的测试过程 原创kevin-hf(ID不是微信) 最后发布于2019-02-26 16:48:19 阅读数 180 收藏 展开 目标 熟练掌握链码的 dev ...
- 分享实录 | 单人开发场景下的测试环境实践
在软件研发过程中,"测试环境"是部署最频繁.也是开发者使用最频繁的一种运行环境,稳定而易用的测试环境能够极大提高开发者的工作效率和幸福感.为更好的将阿里巴巴在测试环境管理方面的实践 ...
最新文章
- Leetcode: Maximum Depth of Binary Tree
- 开启Windows7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP)
- Android应用坐标系统全面详解
- C/Cpp / 模板类中可以使用虚函数吗?模板成员函数可以是虚函数吗?
- C语言实现数值积分之Simpson 1/3法则(附完整源码)
- linux 下载rpm包到本地,createrepo:创建本地YUM源
- 网络策略_你知道网络营销策略有哪些吗?
- Java异常之try,catch,finally,throw,throws
- tomcat一闪而过
- C语言入门经典(第四版).pdf
- Linux系统常见的发行版本以及区别!
- 【Get深一度】Microsoft Office 2013 Word中图片插入后变模糊解决办法
- 基于TF-IDF的简单搜索引擎的实现
- win7关闭计算机控制器,win7自动关机设置方法 win7自动关机怎么取消的详细操作技巧...
- 7-1 录入成绩(20分)
- Linux fs清理文件,linux – 在fs崩溃并运行fsck之后,一些文件被恢复但是找不到丢失的文件?...
- [DP46题] HDU 1864 最大报销额
- u9系统的使用方法仓库_晋江正版用友u9系统使用方法-好不好用
- jade基础文档总结
- 站长探讨说说之SEO文章关键词精准优化布局
热门文章
- 2022-2028年中国煤制天然气市场投资分析及前景预测报告
- 字符串全排列的问题 python和c语言实现
- RuntimeError: Assertion cur_target 0 cur_target n_classes failed
- 机器都会学习了,你的神经网络还跑不动?来看看这些建议
- LeetCode简单题之交替位二进制数
- 谷粒商城学习笔记——第一期:项目简介
- GPU指令集技术分析
- Docker Buildx插件
- 使用现代C++如何避免bugs(下)
- hook情况下,解决内联没有:hover的方案