TensorRT教程13:自定义插件层的使用之---插件API接口说明(难点)

插件API接口说明

在这里插入图片描述
TRT5.1 之前接口是IPluginV2

TRT5.1 接口是IPluginV2Ext

TRT6.0.1 接口是IPluginV2IOExtIPluginV2DynamicExt:(开始支持动态shape) 推荐使用

TensorRT插件的存在目的:实现TensorRT目前还不支持的算子,合并优化

注意: 如果使用任一 IPluginV2Ext , IPluginV2IOExt , 或者 IPluginV2DynamicExt , 你应该总是提供一个 FP32 插件的实现,以允许插件正常运行任何网络。

**注意:**pluginV1是用的插件工厂类IPluginFactoryExt,现在已经抛弃了,V2都是用的创建类IPluginCreator

IPluginV2DynamicExt中的新特性如下

//`IPluginV2DynamicExt`中的新特性如下

//得到输出维度:给定输入,实现输出张量维度的表达式
virtual DimsExprs getOutputDimensions(int outputIndex, 
                                      const DimsExprs* inputs, 
                                      int nbInputs, 
                                      IExprBuilder& exprBuilder) = 0;

//检查插件是否支持指定输入/输出的格式和数据类型。
virtual bool supportsFormatCombination(int pos, 
                                       const PluginTensorDesc* inOut, 
                                       int nbInputs, 
                                       int nbOutputs) = 0;
//配置插件
virtual void configurePlugin(const DynamicPluginTensorDesc* in, 
                             int nbInputs, 
                             const DynamicPluginTensorDesc* out, 
                             int nbOutputs) = 0;
//获取工作区大小
virtual size_t getWorkspaceSize(const PluginTensorDesc* inputs, 
                                int nbInputs, 
                                const PluginTensorDesc* outputs, 
                                int nbOutputs) const = 0;
//队列
virtual int enqueue(const PluginTensorDesc* inputDesc, 
                    const PluginTensorDesc* outputDesc, 
                    const void* const* inputs, 
                    void* const* outputs, 
                    void* workspace, 
                    cudaStream_t stream) = 0;

IPluginV2IOExt中的新特性如下

//`IPluginV2IOExt`中的新特性如下

//配置插件
virtual void configurePlugin(const PluginTensorDesc* in, 
                             int nbInput, 
                             const PluginTensorDesc* out, 
                             int nbOutput) = 0;

//检查插件是否支持指定输入/输出的格式和数据类型。
virtual bool supportsFormatCombination(int pos, 
                                       const PluginTensorDesc* inOut, 
                                       int nbInputs, 
                                       int nbOutputs) const = 0;

其他插件内的方法

//返回输出张量的数量
getNbOutputs 

//返回输出数据类型
getOutputDataType

//初始化
initialize

//终止
terminate   //如果在 initialize() 函数中获取了资源,则需要在 terminate() 函数中释放

//克隆
clone
    
//销毁
destroy
   
//设置/获取插件命名空间
set/getPluginNamespace 

//返回序列化size
getSerializationSize

//序列化
serialize

IPluginCreator插件创建器接口说明

//获取插件名称
getPluginName

//获取插件版本  
getPluginVersion

//获取字段名称  
getFieldNames

//创建插件   
createPlugin

//反序列化插件    
deserializePlugin

//设置/获取插件命名空间  
set/getPluginNamespace

补充资料

oldpan:TensorRT-7.x自定义插件详细指南:https://blog.csdn.net/IAMoldpan/article/details/112549117
oldpan:实现TensorRT自定义插件(plugin)自由!https://zhuanlan.zhihu.com/p/297002406
TensorRT的官方plugin插件库:https://github.com/NVIDIA/TensorRT/tree/master/plugin
sampleUffPluginV2Ext案例:https://github.com/NVIDIA/TensorRT/blob/master/samples/opensource/sampleUffPluginV2Ext/sampleUffPluginV2Ext.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米斯特龙_ZXL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值