当前位置: 首页 > news >正文

TensorRT的功能

TensorRT的功能

在这里插入图片描述

文章目录

  • TensorRT的功能
    • 2.1. C++ and Python APIs
    • 2.2. The Programming Model
      • 2.2.2. The Runtime Phase
    • 2.3. Plugins
    • 2.4. Types and Precision
    • 2.5. Quantization
    • 2.6. Tensors and Data Formats
    • 2.7. Dynamic Shapes
    • 2.8. DLA
    • 2.9. Updating Weights
    • 2.10. trtexec

本章概述了您可以使用 TensorRT 做什么。它旨在对所有 TensorRT 用户有用。

2.1. C++ and Python APIs

TensorRT 的 API 具有 C++ 和 Python 的语言绑定,具有几乎相同的功能。 Python API 促进了与 Python 数据处理工具包和库(如 NumPy 和 SciPy)的互操作性。 C++ API 可以更高效,并且可以更好地满足某些合规性要求,例如在汽车应用中。
注意: Python API 并非适用于所有平台。有关详细信息,请参阅NVIDIA TensorRT 支持矩阵。

2.2. The Programming Model

TensorRT 构建阶段的最高级别接口是Builder ( C++ 、 Python )。构建器负责优化模型并生成Engine 。

为了构建引擎,您需要:

  • 创建网络定义
  • 为builder指定配置
  • 调用builder创建引擎

NetworkDefinition接口( C++ 、 Python )用于定义模型。将模型传输到 TensorRT 的最常见途径是以 ONNX 格式从框架中导出模型,并使用 TensorRT 的 ONNX 解析器来填充网络定义。但是,您也可以使用 TensorRT 的Layer ( C++ , Python ) 和Tensor ( C++ , Python ) 接口逐步构建定义。

无论您选择哪种方式,您还必须定义哪些张量是网络的输入和输出。未标记为输出的张量被认为是可以由构建器优化掉的瞬态值。输入和输出张量必须命名,以便在运行时,TensorRT 知道如何将输入和输出缓冲区绑定到模型。

BuilderConfig接口( C++ 、 Python )用于指定TensorRT如何优化模型。在可用的配置选项中,您可以控制 TensorRT 降低计算精度的能力,控制内存和运行时执行速度之间的权衡,以及限制对 CUDA ®内核的选择。由于构建器可能需要几分钟或更长时间才能运行,因此您还可以控制构建器搜索内核的方式,以及缓存搜索结果以供后续运行使用。

一旦有了网络定义和构建器配置,就可以调用构建器来创建引擎。构建器消除了无效计算、折叠常量、重新排序和组合操作以在 GPU 上更高效地运行。它可以选择性地降低浮点计算的精度,方法是简单地在 16 位浮点中运行它们,或者通过量化浮点值以便可以使用 8 位整数执行计算。它还使用不同的数据格式对每一层的多次实现进行计时,然后计算执行模型的最佳时间表,从而最大限度地降低内核执行和格式转换的综合成本。

构建器以称为计划的序列化形式创建引擎,该计划可以立即反序列化,或保存到磁盘以供以后使用。

注意:

  • TensorRT 创建的引擎特定于创建它们的 TensorRT 版本和创建它们的 GPU。
  • TensorRT 的网络定义不会深度复制参数数组(例如卷积的权重)。因此,在构建阶段完成之前,您不得释放这些阵列的内存。使用 ONNX 解析器导入网络时,解析器拥有权重,因此在构建阶段完成之前不得将其销毁。
  • 构建器时间算法以确定最快的。与其他 GPU 工作并行运行构建器可能会扰乱时序,导致优化不佳。

2.2.2. The Runtime Phase

TensorRT 执行阶段的最高级别接口是Runtime( C++ 、 Python )。
使用运行时时,您通常会执行以下步骤:

  • 反序列化创建引擎的计划(plan 文件)
  • 从引擎创建执行上下文(context)
    然后,反复:
  • 填充输入缓冲区以进行推理
  • 调用enqueue()或execute()以运行推理

Engine接口( C++ 、 Python )代表一个优化模型。您可以查询引擎以获取有关网络输入和输出张量的信息——预期的维度、数据类型、数据格式等。

ExecutionContext接口( C++ 、 Python )是调用推理的主要接口。执行上下文包含与特定调用关联的所有状态 - 因此您可以拥有与单个引擎关联的多个上下文,并并行运行它们。

调用推理时,您必须在适当的位置设置输入和输出缓冲区。根据数据的性质,这可能在 CPU 或 GPU 内存中。如果根据您的模型不明显,您可以查询引擎以确定在哪个内存空间中提供缓冲区。

设置缓冲区后,可以同步(执行)或异步(入队)调用推理。在后一种情况下,所需的内核在 CUDA 流上排队,并尽快将控制权返回给应用程序。一些网络需要在 CPU 和 GPU 之间进行多次控制传输,因此控制可能不会立即返回。要等待异步执行完成,请使用cudaStreamSynchronize在流上同步。

2.3. Plugins

TensorRT 有一个Plugin接口,允许应用程序提供 TensorRT 本身不支持的操作的实现。在转换网络时,ONNX 解析器可以找到使用 TensorRT 的PluginRegistry创建和注册的插件。

TensorRT 附带一个插件库,其中许多插件和一些附加插件的源代码可以在此处找到。

请参阅使用自定义层扩展 TensorRT一章。

2.4. Types and Precision

TensorRT 支持使用 FP32FP16INT8BoolINT32 数据类型的计算。
当 TensorRT 选择 CUDA 内核在网络中实现浮点运算时,它默认为 FP32 实现。有两种方法可以配置不同的精度级别:

  • 为了在模型级别控制精度, BuilderFlag选项( C++ 、 Python )可以向 TensorRT 指示它在搜索最快时可能会选择较低精度的实现(并且因为较低的精度通常更快,如果允许的话,它通常会)。
    因此,您可以轻松地指示 TensorRT 为您的整个模型使用 FP16 计算。对于输入动态范围约为 1 的正则化模型,这通常会产生显着的加速,而准确度的变化可以忽略不计。

  • 对于更细粒度的控制,由于网络的一部分对数值敏感或需要高动态范围,因此层必须以更高的精度运行,可以为该层指定算术精度。

请参阅降低精度部分。

2.5. Quantization

TensorRT 支持量化浮点,其中浮点值被线性压缩并四舍五入为 8 位整数。这显着提高了算术吞吐量,同时降低了存储要求和内存带宽。在量化浮点张量时,TensorRT 需要知道它的动态范围——即表示什么范围的值很重要——量化时会钳制超出该范围的值。

动态范围信息可由构建器根据代表性输入数据计算(这称为校准–calibration)。或者,您可以在框架中执行量化感知训练,并将模型与必要的动态范围信息一起导入到 TensorRT。

请参阅使用 INT8章节。

2.6. Tensors and Data Formats

在定义网络时,TensorRT 假设张量由多维 C 样式数组表示。每一层对其输入都有特定的解释:例如,2D 卷积将假定其输入的最后三个维度是 CHW 格式 - 没有选项可以使用,例如 WHC 格式。有关每个层如何解释其输入,请参阅TensorRT 网络层一章。

请注意,张量最多只能包含 2^31-1 个元素。
在优化网络的同时,TensorRT 在内部执行转换(包括到 HWC,但也包括更复杂的格式)以使用尽可能快的 CUDA 内核。通常,选择格式是为了优化性能,而应用程序无法控制这些选择。然而,底层数据格式暴露在 I/O 边界(网络输入和输出,以及将数据传入和传出插件),以允许应用程序最大限度地减少不必要的格式转换。

请参阅I/O 格式部分

2.7. Dynamic Shapes

默认情况下,TensorRT 根据定义时的输入形状(批量大小、图像大小等)优化模型。但是,可以将构建器配置为允许在运行时调整输入维度。为了启用此功能,您可以在构建器配置中指定一个或多个OptimizationProfile ( C++ 、 Python )实例,其中包含每个输入的最小和最大形状,以及该范围内的优化点。

TensorRT 为每个配置文件创建一个优化的引擎,选择适用于 [最小、最大] 范围内的所有形状的 CUDA 内核,并且对于优化点来说是最快的——通常每个配置文件都有不同的内核。然后,您可以在运行时在配置文件中进行选择。

请参阅使用动态形状一章。

2.8. DLA

TensorRT 支持 NVIDIA 的深度学习加速器 (DLA),这是许多 NVIDIA SoC 上的专用推理处理器,支持 TensorRT 层的子集。 TensorRT 允许您在 DLA 上执行部分网络,而在 GPU 上执行其余部分;对于可以在任一设备上执行的层,您可以在构建器配置中逐层选择目标设备。

请参阅使用 DLA章节。

2.9. Updating Weights

在构建引擎时,您可以指定它可能需要稍后更新其权重。如果您经常在不更改结构的情况下更新模型的权重,例如在强化学习中或在保留相同结构的同时重新训练模型时,这将很有用。权重更新是通过Refitter ( C++ , Python ) 接口执行的。

请参阅Refitting An Engine 部分。

2.10. trtexec

示例目录中包含一个名为trtexec的命令行包装工具。 trtexec是一种无需开发自己的应用程序即可快速使用 TensorRT 的工具。 trtexec工具有三个主要用途:

  • 在随机或用户提供的输入数据上对网络进行基准测试。
  • 从模型生成序列化引擎。
  • 从构建器生成序列化时序缓存。

请参阅trtexec部分。

2.11. Polygraphy

Polygraphy 是一个工具包,旨在帮助在 TensorRT 和其他框架中运行和调试深度学习模型。它包括一个Python API和一个使用此 API 构建的命令行界面 (CLI) 。

除此之外,使用 Polygraphy,您可以:

  • 在多个后端之间运行推理,例如 TensorRT 和 ONNX-Runtime,并比较结果(例如API 、 CLI )
  • 将模型转换为各种格式,例如具有训练后量化的 TensorRT 引擎(例如API 、 CLI )
  • 查看有关各种类型模型的信息(例如CLI )
  • 在命令行上修改 ONNX 模型:
    • 提取子图(例如CLI )
    • 简化和清理(例如CLI )
  • 隔离 TensorRT 中的错误策略(例如CLI )

有关更多详细信息,请参阅Polygraphy 存储库。

更多精彩内容:
https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561

相关文章:

TensorRT的功能

TensorRT的功能 文章目录TensorRT的功能2.1. C and Python APIs2.2. The Programming Model2.2.2. The Runtime Phase2.3. Plugins2.4. Types and Precision2.5. Quantization2.6. Tensors and Data Formats2.7. Dynamic Shapes2.8. DLA2.9. Updating Weights2.10. trtexec本章…...

433MHz无线通信--模块RXB90

1、接收模块RXB90简介 两个数据输出是联通的。 2、自定义一个编码解码规则 组数据为“0x88 0x03 0xBD 0xB6”。 3、发射模块 如何使用示波器得到捕捉一个周期的图像? 通过date引脚连接示波器CH1,以及示波器探针的接地端接芯片的GND,分…...

Seata源码学习(三)-2PC核心源码解读

Seata源码分析-2PC核心源码解读 2PC提交源码流程 上节课我们分析到了GlobalTransactionalInterceptor全局事务拦截器,一旦执行拦截器,我们就会进入到其中的invoke方法,在这其中会做一些GlobalTransactional注解的判断,如果有注解…...

IO流概述

🏡个人主页 : 守夜人st 🚀系列专栏:Java …持续更新中敬请关注… 🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点 目录IO流概述IO 流的分类总结流的四大类字…...

【node.js】node.js的安装和配置

文章目录前言下载和安装Path环境变量测试推荐插件总结前言 Node.js是一个在服务器端可以解析和执行JavaScript代码的运行环境,也可以说是一个运行时平台,仍然使用JavaScript作为开发语言,但是提供了一些功能性的API。 下载和安装 Node.js的官…...

Python优化算法—遗传算法

Python优化算法—遗传算法一、前言二、安装三、遗传算法3.1 自定义函数3.2 遗传算法进行整数规划3.3 遗传算法用于旅行商问题3.4 使用遗传算法进行曲线拟合一、前言 优化算法,尤其是启发式的仿生智能算法在最近很火,它适用于解决管理学,运筹…...

数据埋点(Data buried point)的应用价值剖析

一、什么是数据埋点?数据埋点指在应用中特定的流程中收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑。比如访问数(Visits),访客数(Visitor),停…...

一文弄懂硬链接、软链接、复制的区别

复制 命令:cp file1 file2 作用:实现对file1的一个拷贝。 限制:可以跨分区,文件夹有效。 效果:修改file1,对file2无影响;修改file2,对file1无影响。删除file1,对file…...

界面组件Telerik ThemeBuilder R1 2023开创应用主题研发新方式!

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供最完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET包含一个完…...

在FederatedScope 如何查看clientserver之间的传递的参数大小(通讯量)? 对源码的探索记录

在FederatedScope 如何查看client/server之间的传递的参数大小(通讯量)? 对源码的探索记录 背景需求 想给自己的论文补一个通讯开销对比实验:需要计算出client和server之间传递的信息(例如,模型权重、embedding)总共…...

2023爱分析 · 数据科学与机器学习平台厂商全景报告 | 爱分析报告

报告编委 黄勇 爱分析合伙人&首席分析师 孟晨静 爱分析分析师 目录 1. 研究范围定义 2. 厂商全景地图 3. 市场分析与厂商评估 4. 入选厂商列表 1. 研究范围定义 研究范围 经济新常态下,如何对海量数据进行分析挖掘以支撑敏捷决策、适应市场的快…...

20230215_数据库过程_高质量发展

高质量发展 —一、运营结果 SQL_STRING:‘delete shzc.np_rec_lnpdb a where exists (select * from tbcs.v_np_rec_lnpdbbcv t where a.telnumt.telnum and a.outcarriert.OUTCARRIER and a.incarriert.INCARRIER and a.owncarriert.OWNCARRIER and a.starttimet.STARTTIME …...

【百度 JavaScript API v3.0】LocalSearch 位置检索、Autocomplete 结果提示

地名检索移动到指定坐标 需求 在输入框中搜索,在下拉列表中浮动,右侧出现高亮的列表集。选中之后移动到指定坐标。 技术点 官网地址: JavaScript API - 快速入门 | 百度地图API SDK 开发文档:百度地图JSAPI 3.0类参考 实现 …...

运用Facebook投放,如何制定有效的竞价策略?

广告投放中,我们经常会遇到一个问题,就是不知道什么样的广告适合自己的业务。其实,最简单的方法就是根据我们业务本身进行定位并进行投放。当你了解了广告主所处行业及目标受众后,接下来会针对目标市场进行搜索和定位(…...

大数据框架之Hadoop:HDFS(五)NameNode和SecondaryNameNode(面试开发重点)

5.1NN和2NN工作机制 5.1.1思考:NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁盘中,因为经常需要进行随机访问,还有响应客户请求,必然是效率过低。因此&am…...

计算机网络 - 1. 体系结构

目录概念、功能、组成、分类概念功能组成分类分层结构概念总结OSI 七层模型应用层表示层会话层传输层网络层数据链路层物理层TCP/IP 四层模型OSI 与 TCP/IP 相同点OSI 与 TCP/IP 不同点为什么 TCP/IP 去除了表示层和会话层五层参考模型概念、功能、组成、分类 概念 &#x1f…...

银行业上云进行时,OLAP 云服务如何解决传统数仓之痛?

本文节选自《中国金融科技发展概览:创新与应用前沿》,从某国有大行构建大数据云平台的实践出发,解读了 OLAP 云服务如何助力银行实现技术平台化、组件化和云服务化,降低技术应用门槛,赋能业务创新。此外,本…...

特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】

特定领域知识图谱融合方案:文本匹配算法之预训练模型SimBert、ERNIE-Gram 文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系。有很多应用场景;如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语…...

【2023最新教程】从0到1开发自动化测试框架(0基础也能看懂)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏;其次,代码模块常改动,回归测试很频繁,测试重复低效;最后&#x…...

linux备份命令小记 —— 筑梦之路

Linux dump命令用于备份文件系统。 dump为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。 dump命令只可以备份ext2/3/4格式的文件系统, centos7默认未安装dump命令,可以使用yum install -y dump安…...

vue项目(vue-cli)配置环境变量和打包时区分开发、测试、生产环境

1.打包时区分不同环境在自定义配置Vue-cli 的过程中,想分别通过.env.development .env.test .env.production 来代表开发、测试、生产环境。NODE_ENVdevelopment NODE_ENVtest NODE_ENVproduction本来想使用上面三种配置来区分三个环境,但是发现使用test…...

Python 命名规范

Python 命名规范 基本规范 类型公有内部备注Packagepackage_namenone全小写下划线式驼峰Modulemodule_name_module_name全小写下划线式驼峰ClassClassName_ClassName首字母大写式驼峰Methodmethod_nameprotected: _method_name private: __method_name全小写下划线式驼峰Exce…...

操作系统——2.操作系统的特征

这篇文章,我们来讲一讲操作系统的特征 目录 1.概述 2.并发 2.1并发概念 2.1.1操作系统的并发性 3.共享 3.1共享的概念 3.2共享的方式 4.并发和共享的关系 5.虚拟 5.1虚拟的概念 5.2虚拟小结 6.异步 6.1异步概念 7.小结 1.概述 上一篇文章,我们…...

【计算机网络期末复习】第六章 应用层

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为想复习学校计算机网络课程的同学提供重点大纲,帮助大家渡过期末考~ 📚专栏地址:https://blog.csdn.net/Newin2020/arti…...

TypeScript基本教程

TS是JS的超集,所以JS基础的类型都包含在内 起步安装 npm install typescript -g运行tsc 文件名 基础类型 Boolean、Number、String、null、undefined 以及 ES6 的 Symbol 和 ES10 的 BigInt。 1 字符串类型 字符串是使用string定义的 let a: string 123 //普…...

使用Windows API实现本地音频采集

Windows API提供了Winmm(Windows多媒体)库,其中包括了音频设备相关的函数,可以用来实现音频设备的枚举和测试。 下面是一个简单的示例代码,演示了如何使用Winmm库中的waveInGetNumDevs()函数来枚举计算机上的音频输入…...

实用的费曼学习法 | 一些思考

文章目录 一、前言二、费曼学习法CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 大数据与人工智能背景下,最重要的是:捕捉机会和快速学习的能力 一、前言 费曼学习法是美国著名的物理学家,理查德 ∙ \bullet ∙ 费曼总结出来的学习方法。 这个方法的核心是:当你学习了…...

Linux安装Docker配置docker-compose 编排工具【超详细】

一、介绍Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有…...

iTerm2 + Oh My Zsh 打造舒适终端体验

最终效果图: 因为powerline以及homebrew均需要安装command line tool,网络条件优越的同学在执行本文下面内容之前,可以先安装XCode并打开运行一次(会初始化安装components),省去以后在iterm2中的等待时间。…...

【scipy.sparse】diags()和dia_matrix()的区别

【scipy.sparse】diags()和dia_matrix()的区别 文章目录【scipy.sparse】diags()和dia_matrix()的区别1. 介绍2. 代码示例2.1 sp.diags()2.1.1 第一种用法(dataoffsets)2.1.2 广播(需要指定shape)2.1.3 只有一条对角线2.2 sp.dia_…...

沈阳市网站制作/叶涛网站推广优化

大家好,我是乔戈里。近几个月,由于“挖矿”需求暴涨,各类中高端显卡都被“矿工”们一扫而空,持续处在缺货状态,价格也水涨船高。以RTX3060型号显卡为例,刚推出时,各家品牌官方公布的销售价格仅为…...

企业网站建设方案包含/网站优化费用报价明细

这个知识点出现在我的期末试卷上,由于当时对这个概念掌握的不清楚,3分没了。。找了很多其他的博客,这一方面的解释很少,所以在这里写一篇吧,可能自己解释的也不算清楚全面,所以请各位读者只是当做一个参考吧…...

做招聘网站赚钱么/搜索引擎优化的重要性

在sparkR在配置完成的基础上,本例采用Spark on yarn模式,介绍sparkR运行的一个例子。 在spark的安装目录下,/examples/src/main/r,有一个dataframe.R文件。该文件默认是在本地的模式下运行的,不与hdfs交互。可以将脚本…...

龙岗汤坑社区网站建设/华为seo诊断及优化分析

自从自己开发第一款APP之后,就一直有着成为一名独立开发者继而走向创业的道路,所以一直对产品,设计怀揣着极高的热情,所以这次参加产品分享会对我自己而言,显然是可以学到很多东西的地方,也很开心&#xff…...

杭州信贷网站制作/aso优化排名

虚拟化VMware进阶—NSX6.4.VSAN—0人已学习 课程介绍 本课程为虚拟化进阶课程,讲师风格幽默风趣,浅显易懂,带领大家轻松进入虚拟化的世界。课程收益掌握虚拟化NSX6.4相关知识掌握虚拟化VSAN相关知识讲师介绍郭小冬 更多讲师课程G-LAB IT实…...

电子商务网站建设模板下载/软文推广500字

什么是AnyShapeStyle SwiftUI3之前,我们可以用@ViewBuilder构建高级视图,但不能构建高级形状。SwiftUI3引入了 AnyShapeStyle可以帮助我们构建各种各样的样式。 /// A type-erased ShapeStyle value. @available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) @frozen…...