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

news/2024/11/9 10:04:41/

前言

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.ppmy.cn/news/262416.html

相关文章

长虹智能电视进工厂模式方法汇总(遥控器有无数字按键均可)

一、适合新款带语音的遥控器 按【菜单】键后,当焦点移至“情景模式”下的“标准模式”菜单上时,按【上、右、右】组合键,弹出数字软键盘,当输入0816进入工厂菜单. https://www.jozecn.cn/256.html 二、适合带数字按键或遥控器上…

【高级篇】分布式缓存

分布式缓存 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题: 1.Redis持久化 Redis有两种持久化方案: RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件)&#xf…

家电智能化转型之下 长虹在挖什么“坑”?

这几年,随着科技的蒸蒸向上,家电行业也从功能走向智能,无数的智能产品涌现至市场,尤其是以 国内亦是如此,绝大多数的家电企业都开始着手对智能系列的挖掘,其中更有上者已经开始对人工智能产品进行开发&…

长虹变频空调整机不工作维修案例分析

【例1】 长虹KFR-28GW/Bp型变频空调不启动,并且指示灯、显示屏不亮分析与检修:通过故障现象分析得知,该机没有市电输入或室内机的电源电路、微处理器电路异常。 用万用表交流电压挡测为空调供电的插座有226V市电电压,说明供电系…

【STM32】实现长虹空调遥控部分功能(三)加上ESP8266实现手机远程控制

前言 既然能成功控制空调了,巧的是我的手机没有红外功能,那就尝试加一个ESP8266实现手机远程控制空调,这里用的ESP8266在之前的文章里有介绍过怎么使用,感兴趣的可以参考以下文章 使用串口调试助手配置ESP8266模块. STM32ESP8266…

空调电脑板电路的检测方法大全(建议收藏)

电脑板电路(电控板电路)的检测方法除了采用电压测量法、电阻测量法外,还可采用温度法、代换法、开路法和应急修理法等。 一、温度法 温度法就是通过摸一些元器件的表面,判断该元器件的温度是否过高,以此确定故障原因…

长虹变频空调室外机电路电路分析与故障检修

长虹室外机电路由电源电路、微处理器电路、室外风扇电机驱动电路、压缩机驱动电路等构成 1. 供电电路室外机供电电路主要产生300V电压和12V电压。300V供电电路由限流电阻PTC501、桥式整流堆、滤波电容构成,而12V电源由功率模块电路板上的开关电源产生,如…

android长虹面试题,长虹电子面试笔试题目

【长虹电子面试笔试题目】 1、你平时休闲经常去的地方 A、郊外2分 B、电影院 3分 C、公园5分 D、商场10分 E、酒吧15分 F、练歌房20分 2、你更喜欢吃那种水果? A、 草莓2分 B、苹果3分 C、西瓜 5分 D、凤梨10分 E、橘子 15分 3、你认为容易吸引你的人是? A、有才气的人2分 B、…