TensorRT 自学笔记001 基础知识点和学习资源

news/2024/10/22 5:01:47/

TensorRT 自学笔记001 基础知识点和学习资源

各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢!

TensorRT简介:

TensorRT 是一套可用于高效实现DL模型推理的SDK,它内含infer优化器和运行环境,能让DL模型在更低的资源占用的条件下,以更快的的运行。在TensorRT中,我们可以用API手动地一个Layer一个Layer地搭建Network,也可以直接使用来自ONNX的模型,如果使用后者,就不需要一层一层地搭建模型。

各种链接

Jetpack SDK
TensorRT文档
C++ API文档
Python API
TensoRT 下载
B站课程示例代码
B站官方课程链接

TensorRT的工作流程

构建期

加载模型,并优化模型,计算图优化,将多个层合并为一个层,消除无用层,导入用户自定义的plugin(可选)
注:上述这些操作都是为了,加快模型的推理速度,同时降低模型的资源消耗(CPU资源,内存资源)。

运行期

维护运行环境,然后序列化和反序列化engine

名词解释

下面是一些名词和功能的解释

显存池复用:

数据存在同一片显存中,可快速复用,以此避免内存的反复分配和释放。

logger

日志记录器,可以从详细到简略设置不同记录等级的日志。

builder

引擎构建器模型搭建的入口,构建模型的核心,可以用于创建TensorRT对象,创建用于Dyanmic Shape输入的配置器。

builderconfig

网络属性选项,用于设置模型的属性,如设置数据精度类型,设置explicit batch,设置Dynamic Shape等。

explicit batch显性批次和implicit batch隐性批次

explicit batch 即显式地指定张量的batch,explicit batch为主流开发方法,也支持更多功能

Dynamic Shape

实际开发时,我们会对模型输入不同的shape的数据,这要求模型每次接受的shape,batch等不同。所以提供了Dynamic Shape适用于输入张量shape在infer时才确定的情况,它不仅支持输入输出的调整,还可以在数据的不同批次的推理间随时做调整,几乎所有维度都动态可变。

Layer和Tensor

我们可以把Layer看作为计算节点,Tensor可以看作数据节点。
Tensor数据节点可作为一个Layer计算节点的输入输出节点,换句话说我们时用Layer计算节点和Tensor数据节点搭建出了整个网络。

Network

网络具体构造,网络主体,实际开发时,我们需要不断的用network添加各种网络层,标记输入输出张量和设置层属性。

context

类比cpu中的进程,用于设置张量的shape,用于执行真正的推理计算。

CUDA异构计算

开始推理时,我们需同时准备CPU和GPU内存,然后数据从内存copy至显存,在GPU端计算,然后将计算结果copy回内存

序列化和反序列化

将引擎保存下来即为序列化,加载以前保存好的引擎即为反序列化,这样就不用每次推理之前都构建一次引擎,直接加载使用即可。
注意,跨平台甚至是跨版本的序列化和反序列化是不可以的,甚至是相同平台,相同版本,不同时间构建的engine都可能是不同的

模型的TensorRT部署方式

将ONNX格式模型部署于设备上推理,有三种方式

1, 使用原框架自带的TRT接口
性能稍差,但易用性高,难度低,开发速度快
2, 使用Parser,将模型转换到TRT再使用
性能高,但需要改network和写适配的plugin,兼顾了效率和性能,是最推荐的开发方式
3, 使用TRT重建整个Network,再使用
性能最高,资源消耗最少,能精细控制Network,但是易用性和开发效率低


http://www.ppmy.cn/news/1295656.html

相关文章

prometheus 黑盒监控

黑盒监控 “白盒监控” 是需要把对应的Exporter程序安装到被监控的目标主机上,从而实现对主机各种资源以及状态的数据采集工作 ”黑盒监控“ 是不需要把Exporter程序部署到被监控的目标主机上,比如全球的网络质量的稳定性,通常用ping操作&am…

修复 OpenCV 依赖错误的小工具:OpenCV Fixer

使用 Nvidia 官方 Docker 镜像折腾 Stable Video Diffusion 的时候,发现 OpenCV 社区有一个古怪的 issue 需要手动解决,所以顺手写了一个能够自动修复的小工具。 以及,聊聊如何快速的发布一个 Python 软件包。 写在前面 如果你在使用 Pyth…

在ultralytics中实现obb检测,官方团队做了哪些修改?

在最新的在ultralytics中,官方团队已经提供了obb检测功能,并发布了相应的预训练模型,其具体使用可以参考。https://blog.csdn.net/a486259/article/details/134557389 1、网络结构 1.1 OBB(Detect) 在ultralytics\nn\modules\head.py中,实现了OBB head,用于在网络head…

字节跳动基础架构SRE-Copilot获得2023 CCF国际AIOps挑战赛冠军

近日,2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会在北京成功举办,活动吸引了来自互联网、运营商、科研院所、高校、软硬件厂商等领域多名专家学者参与,为智能运维的前沿学术研究、落地生产实践打开了新思路。决赛中&#xff0…

Vue 自定义仿word表单下拉框组件,让操作更符合用户习惯

预览时显示界面 进入编辑框时 组件代码 <template><div class "paper-select ui-select flex flex-col full-width" ><div ref"content" class"content font-s flex flex-center-cz padding-left-m padding-right-m flex-space-be…

Leetcode 3003. Maximize the Number of Partitions After Operations

Leetcode 3003. Maximize the Number of Partitions After Operations 1. 解题思路2. 代码实现 题目链接&#xff1a;10038. Maximize the Number of Partitions After Operations 1. 解题思路 这一题我看实际比赛当中只有72个人做出来&#xff0c;把我吓得够呛&#xff0c;…

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…

地理空间分析5——空间关联分析与Python

目录 写在开头1.空间自相关2.空间回归分析2.1 构建地理权重矩阵2.2 执行空间回归分析2.3 解释结果3 地理加权回归3.1 构建地理权重矩阵3.2 执行地理加权回归分析3.3 解释地理加权回归结果写在最后写在开头 空间关联分析是数据科学领域中一个重要的技术,尤其在地理信息系统(G…