TensorRT 从7.2升级到8.5,改写plugin以适配新版本

news2024/11/28 10:58:22

前言

TensorRT是NVIDIA推出的一款高效深度学习模型推理框架,其包括了深度学习推理优化器和运行时,能够让深度学习推理应用拥有低时延和高吞吐的优点。

在这里插入图片描述
TensorRT的版本迭代速度非常快,很多之前写的plugin在版本升级后可能就没法直接使用,这时就需要将代码升级,以适配新版TRT。

本文仅记录TRT从7.2升级到8.5时,改写plugin过程中需要注意的内容。

阅读官方的Change Log

  • TensorRT now declares API’s with the noexcept keyword to clarify that exceptions must not cross the library boundary. All TensorRT classes that an application inherits from (such as IGpuAllocator, IPluginV2, etc…) must guarantee that methods called by TensorRT do not throw uncaught exceptions, or the behavior is undefined.
  • All API’s have been marked as noexcept where appropriate. The IErrorRecorder interface has been fully integrated into the API for error reporting. The Logger is only used as a fallback when the ErrorRecorder is not provided by the user.
  • Callback changes are now marked noexcept, therefore, implementations must also be marked noexcept. TensorRT has never catered to exceptions thrown by callbacks, but this is now captured in the API.
  • Methods that take parameters of type void** where the array of pointers is unmodifiable are now changed to take type void*const*.
  • IPlugin and IPluginFactory interfaces were deprecated in TensorRT 6.0 and have been removed in TensorRT 8.0. We recommend that you write new plugins or refactor existing ones to target the IPluginV2DynamicExt and IPluginV2IOExt interfaces. For more information, refer to the Migrating Plugins From TensorRT 6.x Or 7.x To TensorRT 8.x.x section.
  • We removed samplePlugin since it was meant to demonstrate the IPluginExt interface, which is no longer supported in TensorRT 8.0.
  • Interface functions that provided a destroy function are deprecated in TensorRT 8.0. The destructors will be exposed publicly in order for the delete operator to work as expected on these classes.
  • nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_PRECISION is deprecated.
  • nvinfer1::IResizeLayer::setAlignCorners and nvinfer1::IResizeLayer::getAlignCorners are deprecated. Use nvinfer1::IResizeLayer::setCoordinateTransformation, nvinfer1::IResizeLayer::setSelectorForSinglePixel and nvinfer1::IResizeLayer::setNearestRounding instead.
  • Destructors for classes with destroy() methods were previously protected. They are now public, enabling use of smart pointers for these classes. The destroy() methods are deprecated.

改动总结

对升级代码过程中的变化做个总结,主要改动如下:

__author__ = 'TracelessLe'
__website__ = 'https://blog.csdn.net/TracelessLe'

通用变化:
1、添加noexcept关键字
2、BaseCreator->nvinfer1::pluginInternal::BaseCreator
3、ASSERT->PLUGIN_ASSERT
4、头文件导入有变化,如#include "bboxUtils.h"->#include "common/bboxUtils.h",#include "gatherNMSOutputs.h"->#include "batchedNMSPluginV2/gatherNMSOutputs.h"
5、const void* const*->void const* const*,void**->void* const*
6、PluginFormat::kNCHW->PluginFormat::kLINEAR,TensorFormat::kNCHW->PluginFormat::kLINEAR
7、getPluginName增减
8、部分构造和析构函数需要注释,如BatchedNMSPluginV2Creator();~BatchedNMSPluginV2Creator() override = default;
9、read->nvinfer1::plugin::read,write->nvinfer1::plugin::write
10、部分protected:内容需要注释,如// using nvinfer1::IPluginV2DynamicExt::canBroadcastInputAcrossBatch;
特殊算子变化:
1、nms新增参数int scoreBits, bool caffeSemantics
2、对于新增加的算子,需要在plugin/common/kernel.h头文件中增加定义
Binding使用变化:
1、新版TRT Python binding使用,builder与config的使用差异
2、升级TRT的同时PyTorch可能也做了升级,需要注意新版PyTorch的torch.onnx.export没有enable_onnx_checker参数,增加try/except

版权说明

本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。如需帮助请email至tracelessle@163.com或扫描个人介绍栏二维码咨询。
在这里插入图片描述

参考资料

[1] TensorRT SDK | NVIDIA Developer
[2] Release Notes :: NVIDIA Deep Learning TensorRT Documentation
[3] ONNX转TensorRT加速模型推理_TracelessLe的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广州虚拟动力携数字人交互技术产品参展第十九届深圳文博会

2023年6月7-11日 深圳国际会展中心 第十九届深圳文博会正式举办! 广州虚拟动力携数字人交互技术产品参展 诚邀您莅临粤港澳大湾区馆(11号馆) 广东参展团展位参观交流 数字技术,引领文化产业新发展 中国文化及相关文化产业的…

【Apache Pinot】Controller、Broker 和 Server 的概念和工作流程

背景 笔者最近一段时间使用 Apache Pinot 比较多,发现目前国内使用 Pinot 的很少,所以跟他相关的资料也比较少,本人在扩容,升级,部署,查询等方面操作有些许经验,知道其中有很多细节需要注意和规…

北邮22信通:实验七 三角波-方波(锯齿波-矩形波)发生器实验报告(着急验收的同学先看看,后续细节正在赶来中)

北邮22信通一枚~ 持续更新模电实验讲解 关注作者,解锁更多邮苑模电实验报告~ 获取更多文章,请访问专栏: 北邮22信通——电子电路_青山如墨雨如画的博客-CSDN博客 实验七 三角波-方波(锯齿波-矩形波)发生器实验…

数据结构——树的概念、二叉树的概念

文章目录 引言1.树的概念1.1.树的其他相关概念 2.树的代码实现的结构2.1.树形结构的应用 3.二叉树的概念3.1.特殊二叉树的概念3.1.1.完全二叉树3.1.2.满二叉树 3.2.二叉树试题讲解3.2.1.试题一3.2.2.试题二3.2.3.试题三 4.二叉树的存储结构4.1.顺序结构存储4.2.链式结构存储 引…

重温经典:简读光干涉、衍射原理

如果您不是光学专业的,或者是文科生,那么您想到光的干涉和衍射第一反应应该是很多公式对不对?头好大是不是?好,那么今天我们就不用一个公式来重新解读光的干涉和衍射。 光,也叫电磁波,他的表现…

java并发编程:Java线程池详解

文章目录 为什么要用线程池线程池的原理ThreadPoolExecutor提供的构造方法ThreadPoolExecutor的策略线程池主要的任务处理流程ThreadPoolExecutor如何做到线程复用的? 四种常见的线程池newCachedThreadPoolnewFixedThreadPoolnewSingleThreadExecutornewScheduledTh…

web3.js获取导入

我们访问 https://github.com/ 我们搜索 web3.js 然后我们直接点击第一个进去 进入之后 往下拉 你会看到 它支持node项目的两种引入方式 这里 大家可以直接下载我的资源 https://download.csdn.net/download/weixin_45966674/87878737 下载好解压出来就会有一个 web3.min.js…

C#读写EM4205/4305/4469卡复制ID卡制做FDX-B动物标签源码

EM4305/EM4205卡是采用瑞士EM微电子公司工作频率为125kHz,具有读、写功能的非接触式RFID射频芯片,它具有功耗低、可提供多种数据传输速率和数据编码方法等特点,适合射频芯片ISO 11784/11785规范,该芯片被广泛应用于动物识别和跟踪…

《C++高级编程》读书笔记(五、六:面向对象设计设计可重用代码)

1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 1. 过程化的思考方式 过程语言(例如 C)将…

玄奘文旅集团主办学习强企玄奘之路戈壁挑战赛在敦煌圆满完赛!

“学习改变命运,强企复兴中国”,2023年4月16日-20日,由玄奘文旅集团主办的“第23届26届学习强企玄奘之路戈壁挑战赛(联赛)”在千年古城敦煌圆满落幕! 这是商界各行业的一次跨界融合,也是疫情过…

感性了解一下互斥和信号量

一、互斥的四个概念 我们把大家都能看到的资源叫做:公共资源 a、互斥:任何一个时刻,都只允许一个执行流在进行共享资源的访问——加锁 b、我们把任何一个时刻,都只允许一个执行流进行访问的共享资源叫做临界资源 c、临界资源需…

【TA100】图形 2.4 传统经验光照模型详解

一、光照模型 ● 一种模拟自然光照过程的计算机模型 ● 本次课程可以这样理解:光线与物体表面的作用 ● 分类 ○ 基于物理的光照模型(PBR)(有可依据的公式) ○ 经验模型(进行了一些近似、模拟,…

【小呆的概率论学习笔记】正态分布的代数运算

文章目录 1. 正态分布简介1. 正态分布的数字特征2. 正态分布的代数运算a. 单随机变量的代数运算b. 两个正态分布随机变量的和c. 多个正态分布随机变量的线性组合 1. 正态分布简介 正态分布应该是概率论和数理统计中最重要的一类概率分布,最早的完整论述是由数学王子…

自用-华东师范大学硕士学位论文LATEX模板

文章目录 前言部分页面效果预览使用说明:毕业论文LaTeX模板1. 安装LaTeX发行版和TeX Studio:2. 下载毕业论文模板:3. 编辑论文内容:**标题和作者信息:****摘要和关键词:****章节内容:****图片插…

【Linux】-关于调试器gdb的介绍和使用

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、Linux中的debug和release二、gdb的使用**1.进入调试****2.显示代码*…

配置SSH免密登陆

配置SSH免密登陆 1.生成公私密钥对1)检查是否已存在公私钥对2)生成公私钥对 2.上传公钥到服务器3.ssh-add(mac的坑点)4.使用配置文件连接 博主是MAC用户,文章参考知乎 1.生成公私密钥对 1)检查是否已存在…

Redis高性能设计之epoll和IO多路复用深度解析

一 多路复用 并发多客户端连接, 在多路复用之前最简单和典型的方案:同步阻塞网络IO模型 这种模型的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下: //直接调用recv函数…

【Java】JAVASE面向对象知识点总结

面向对象 概念 现实生活: ​ 类:抽象的概念,把具有相同特征和操作的事物归为一类 ​ 先有实体,再有类的概念 代码世界: ​ 类:抽象的概念,把具有相同属性和方法的对象归为一类 ​ 编写顺序&…

epoll的LT与ET模式以及阻塞和非阻塞

文章目录 1、基本概念2、关于在socket和EPOLL中的阻塞与非阻塞3、几种IO模型的触发方式4、代码验证5、总结 1、基本概念 Level_triggered(水平触发):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次…

Flask-蓝图

1、使用步骤&#xff1a; 创建蓝图 blue Blueprint("myblue01", __name__) 使用蓝图装饰视图函数 blue.route(/) def index():return index 将蓝图注册到app中 from appdemo_blueprint import blue app.register_blueprint(blue) 2、以包的形式使用蓝图 <…