插件API接口说明
TRT5.1 之前接口是IPluginV2
TRT5.1 接口是IPluginV2Ext
TRT6.0.1 接口是IPluginV2IOExt
和 IPluginV2DynamicExt
:(开始支持动态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