TensorRT 10.8.0
nvinfer1::IPluginV2DynamicExt 类参考abstract

类似于 IPluginV2Ext,但支持动态形状。 更多...

#include <NvInferRuntime.h>

nvinfer1::IPluginV2DynamicExt 的继承关系图
nvinfer1::IPluginV2Ext nvinfer1::IPluginV2

公共成员函数

IPluginV2DynamicExtclone () const noexcept override=0
 克隆插件对象。 这也会复制内部插件参数,并返回一个包含这些参数的新插件对象。 如果源插件已使用 configurePlugin() 预配置,则返回的对象也必须预配置。 返回的对象必须允许使用新的执行上下文调用 attachToContext()。 克隆的插件对象可以与源对象共享相同的每个引擎的不可变资源(例如,权重),以避免重复(例如,通过引用计数)。 更多...
 
virtual DimsExprs getOutputDimensions (int32_t outputIndex, DimsExprs const *inputs, int32_t nbInputs, IExprBuilder &exprBuilder) noexcept=0
 获取用于从输入张量的维度计算输出张量维度的表达式。 更多...
 
virtual bool supportsFormatCombination (int32_t pos, PluginTensorDesc const *inOut, int32_t nbInputs, int32_t nbOutputs) noexcept=0
 如果插件支持由 pos 索引的输入/输出的格式和数据类型,则返回 true。 更多...
 
virtual void configurePlugin (DynamicPluginTensorDesc const *in, int32_t nbInputs, DynamicPluginTensorDesc const *out, int32_t nbOutputs) noexcept=0
 配置插件。 更多...
 
virtual size_t getWorkspaceSize (PluginTensorDesc const *inputs, int32_t nbInputs, PluginTensorDesc const *outputs, int32_t nbOutputs) const noexcept=0
 查找层所需的工作空间大小。 更多...
 
virtual int32_t enqueue (PluginTensorDesc const *inputDesc, PluginTensorDesc const *outputDesc, void const *const *inputs, void *const *outputs, void *workspace, cudaStream_t stream) noexcept=0
 执行层。 更多...
 
- 继承自 nvinfer1::IPluginV2Ext 的公共成员函数
virtual nvinfer1::DataType getOutputDataType (int32_t index, nvinfer1::DataType const *inputTypes, int32_t nbInputs) const noexcept=0
 返回请求索引处的插件输出的 DataType。 更多...
 
 IPluginV2Ext ()=default
 
 ~IPluginV2Ext () override=default
 
virtual void attachToContext (cudnnContext *, cublasContext *, IGpuAllocator *) noexcept
 将插件对象附加到执行上下文,并授予插件访问某些上下文资源的权限。 更多...
 
virtual void detachFromContext () noexcept
 从其执行上下文中分离插件对象。 更多...
 
- 继承自 nvinfer1::IPluginV2 的公共成员函数
virtual AsciiChar const * getPluginType () const noexcept=0
 返回插件类型。 应与相应插件创建者返回的插件名称匹配。 更多...
 
virtual AsciiChar const * getPluginVersion () const noexcept=0
 返回插件版本。 应与相应插件创建者返回的插件版本匹配。 更多...
 
virtual int32_t getNbOutputs () const noexcept=0
 获取层输出的数量。 更多...
 
virtual int32_t initialize () noexcept=0
 初始化层以供执行。 这在创建引擎时调用。 更多...
 
virtual void terminate () noexcept=0
 释放插件层初始化期间获取的资源。 这在销毁引擎时调用。 更多...
 
virtual size_t getSerializationSize () const noexcept=0
 查找将插件配置存储在二进制文件中所需的序列化缓冲区的大小。 更多...
 
virtual void serialize (void *buffer) const noexcept=0
 序列化层。 更多...
 
virtual void destroy () noexcept=0
 销毁插件对象。 这将在销毁网络、构建器或引擎时调用。 更多...
 
virtual void setPluginNamespace (AsciiChar const *pluginNamespace) noexcept=0
 设置此插件对象所属的命名空间。 理想情况下,来自同一插件库的所有插件对象必须具有相同的命名空间。 更多...
 
virtual AsciiChar const * getPluginNamespace () const noexcept=0
 返回插件对象的命名空间。 更多...
 

静态公共属性

static constexpr int32_t kFORMAT_COMBINATION_LIMIT = 100
 接受的格式组合数量的限制。 更多...
 

受保护的成员函数

int32_t getTensorRTVersion () const noexcept override
 返回构建此插件的 API 版本。 高字节由 TensorRT 保留,用于将其与 IPluginV2 区分开来。 更多...
 
virtual ~IPluginV2DynamicExt () noexcept
 
- 继承自 nvinfer1::IPluginV2Ext 的受保护的成员函数
int32_t getTensorRTVersion () const noexcept override
 返回构建此插件的 API 版本。 高字节由 TensorRT 保留,用于将其与 IPluginV2 区分开来。 更多...
 
void configureWithFormat (Dims const *, int32_t, Dims const *, int32_t, DataType, PluginFormat, int32_t) noexcept override
 派生类不得实现此方法。 在 C++11 API 中,它将是 override final。 更多...
 

详细描述

类似于 IPluginV2Ext,但支持动态形状。

客户端应覆盖公共方法,包括以下继承的方法

对于弱类型网络,inputTypes 将始终为 DataType::kFLOATDataType::kINT32,并且如果它是 DataType::kHALF 或 DataType:kINT8,则返回的类型被规范化为 DataType::kFLOAT。 对于强类型网络,inputTypes 从先前的操作推断而来,而 getOutputDataType 根据 inputTypes 指定返回的类型。 有关浮点精度的详细信息稍后由 supportsFormatCombination 方法引出。

已弃用
在 TensorRT 10.0 中已弃用。 请改为实现 IPluginV3

构造函数和析构函数文档

◆ ~IPluginV2DynamicExt()

virtual nvinfer1::IPluginV2DynamicExt::~IPluginV2DynamicExt ( )
inlineprotectedvirtualnoexcept

成员函数文档

◆ clone()

IPluginV2DynamicExt * nvinfer1::IPluginV2DynamicExt::clone ( ) const
overridepure virtualnoexcept

克隆插件对象。 这也会复制内部插件参数,并返回一个包含这些参数的新插件对象。 如果源插件已使用 configurePlugin() 预配置,则返回的对象也必须预配置。 返回的对象必须允许使用新的执行上下文调用 attachToContext()。 克隆的插件对象可以与源对象共享相同的每个引擎的不可变资源(例如,权重),以避免重复(例如,通过引用计数)。

返回值
如果克隆成功,则返回指向克隆插件对象的指针;否则返回 nullptr。


使用注意事项

  • 允许 API 调用的上下文
    • 线程安全:是,此方法必须是线程安全的,并且在多个设备上构建共享同一插件的网络时,可以从多个线程调用此方法。

实现 nvinfer1::IPluginV2Ext

◆ configurePlugin()

virtual void nvinfer1::IPluginV2DynamicExt::configurePlugin ( DynamicPluginTensorDesc const *  in,
int32_t  nbInputs,
DynamicPluginTensorDesc const *  out,
int32_t  nbOutputs 
)
pure virtualnoexcept

配置插件。

configurePlugin() 可以在构建和执行阶段多次调用。 构建阶段发生在调用 initialize() 之前,并且仅在 IBuilder 创建引擎期间发生。 执行阶段发生在调用 initialize() 之后,并且在 IBuilder 创建引擎和 IExecutionContext 执行引擎期间发生。

构建阶段:当插件正在准备进行性能分析但不是针对任何特定输入大小时,会调用 IPluginV2DynamicExt->configurePlugin。 这为插件提供了一个机会,使其可以根据输入和输出格式以及可能的维度范围做出算法选择。 DynamicPluginTensorDesc 的最小值和最大值对应于插件正在分析的当前配置文件的 kMIN 和 kMAX 值,其中 desc.dims 字段对应于网络创建时指定的插件的维度。 通配符维度将在此阶段的 desc.dims 字段中存在。

执行阶段:当插件正在准备执行特定维度的插件时,会调用 IPluginV2DynamicExt->configurePlugin。 这为插件提供了一个机会,使其可以根据 desc.dims 字段中存储的显式输入维度来更改算法选择。

  • IBuilder 将为每个配置文件调用此函数一次,其中 desc.dims 解析为当前配置文件的 kOPT 字段指定的值。 通配符维度将在此阶段不存在。
  • 如果发生以下情况,IExecutionContext 将在下一次随后的实例 enqueue[V2]() 或 execute[V2]() 期间调用此函数:
    • 如果 hasImplicitBatchDimension() 返回 true,则批次大小从先前的 execute()/enqueue() 调用更改。
    • 通过 setOptimizationProfileAsync() 更改了优化配置文件。
    • 通过 setInputShape() 更改了输入执行绑定。
      警告
      执行阶段在 IExecutionContext 期间对时间要求非常严格,但当从 IBuilder 调用时,它不是计时循环的一部分。 configurePlugin 的性能瓶颈在引擎构建期间不会显示出来,但在调用触发层资源更新的函数后,在执行期间将可见。
      参数
      in用于配置的输入张量属性。
      nbInputs输入张量的数量。
      out用于配置的输出张量属性。
      nbOutputs输出张量的数量。

◆ enqueue()

virtual int32_t nvinfer1::IPluginV2DynamicExt::enqueue ( PluginTensorDesc const *  inputDesc,
PluginTensorDesc const *  outputDesc,
void const *const *  inputs,
void *const *  outputs,
void *  workspace,
cudaStream_t  stream 
)
pure virtualnoexcept

执行层。

参数
inputDesc如何解释输入张量的内存。
outputDesc如何解释输出张量的内存。
inputs输入张量的内存。
outputs输出张量的内存。
workspace执行的工作空间。
stream执行内核的流。
返回值
0 表示成功,否则为非零值(将导致引擎终止)。

◆ getOutputDimensions()

virtual DimsExprs nvinfer1::IPluginV2DynamicExt::getOutputDimensions ( int32_t  outputIndex,
DimsExprs const *  inputs,
int32_t  nbInputs,
IExprBuilder exprBuilder 
)
pure virtualnoexcept

获取用于从输入张量的维度计算输出张量维度的表达式。

参数
outputIndex输出张量的索引
inputs输入张量维度的表达式
nbInputs输入张量的数量
exprBuilder用于生成新表达式的对象

此函数由 IBuilder 的实现在网络分析期间调用。

示例 1:插件具有单个输出,该输出转置插件单个输入的最后两个维度。 getOutputDimensions 覆盖的主体可以是

DimsExprs output(inputs[0]);
std::swap(output.d[output.nbDims-1], output.d[output.nbDims-2]);
return output;

示例 2:插件沿第一个维度连接其两个输入。 getOutputDimensions 覆盖的主体可以是

DimsExprs output(inputs[0]);
output.d[0] = exprBuilder.operation(DimensionOperation::kSUM, *inputs[0].d[0], *inputs[1].d[0]);
return output;

◆ getTensorRTVersion()

int32_t nvinfer1::IPluginV2DynamicExt::getTensorRTVersion ( ) const
inlineoverrideprotectedvirtualnoexcept

返回构建此插件的 API 版本。 高字节由 TensorRT 保留,用于将其与 IPluginV2 区分开来。

不要覆盖此方法,因为 TensorRT 库使用它来维护与插件的向后兼容性。

nvinfer1::IPluginV2 重新实现。

◆ getWorkspaceSize()

virtual size_t nvinfer1::IPluginV2DynamicExt::getWorkspaceSize ( PluginTensorDesc const *  inputs,
int32_t  nbInputs,
PluginTensorDesc const *  outputs,
int32_t  nbOutputs 
) const
pure virtualnoexcept

查找层所需的工作空间大小。

此函数在配置插件后调用,并且可能在执行期间调用。 结果应该是足够的工作空间大小,以处理给定大小或任何更小的问题的输入和输出。

返回值
工作空间大小。

◆ supportsFormatCombination()

virtual bool nvinfer1::IPluginV2DynamicExt::supportsFormatCombination ( int32_t  pos,
PluginTensorDesc const *  inOut,
int32_t  nbInputs,
int32_t  nbOutputs 
)
pure virtualnoexcept

如果插件支持由 pos 索引的输入/输出的格式和数据类型,则返回 true。

对于此方法,输入编号为 0..(nbInputs-1),输出编号为 nbInputs..(nbInputs+nbOutputs-1)。 使用此编号,pos 是 InOut 的索引,其中 0 <= pos < nbInputs+nbOutputs。

TensorRT 调用此方法以询问由 pos 索引的输入/输出是否支持 inOut[pos].format 和 inOut[pos].type 指定的格式/数据类型。 如果 override 返回 true,则表示插件支持 inOut[pos] 处的格式/数据类型。 如果支持取决于其他输入/输出格式/数据类型,则插件可以使其结果取决于 inOut[0..pos-1] 中的格式/数据类型,这些格式/数据类型将设置为插件支持的值。 override 不应检查 inOut[pos+1..nbInputs+nbOutputs-1],这将具有无效值。 换句话说,pos 的决策必须仅基于 inOut[0..pos]。

一些例子

  • 仅支持 FP16 NCHW 的插件的定义
      return inOut[pos].format == TensorFormat::kLINEAR && inOut[pos].type == DataType::kHALF;
    
  • 一个插件的定义,该插件仅支持其两个输入的 FP16 NCHW,以及其单个输出的 FP32 NCHW
      return inOut[pos].format == TensorFormat::kLINEAR && (inOut[pos].type == (pos < 2 ? DataType::kHALF :
      DataType::kFLOAT));
    
  • 一个“多态”插件的定义,该插件具有两个输入和一个输出,支持任何格式或类型,但输入和输出必须具有相同的格式和类型
      return pos == 0 || (inOut[pos].format == inOut.format[0] && inOut[pos].type == inOut[0].type);
    
    警告:TensorRT 一旦找到 kFORMAT_COMBINATION_LIMIT 个组合,将停止询问格式。

成员数据文档

◆ kFORMAT_COMBINATION_LIMIT

constexpr int32_t nvinfer1::IPluginV2DynamicExt::kFORMAT_COMBINATION_LIMIT = 100
staticconstexpr

接受的格式组合数量的限制。


此类文档从以下文件生成

  版权所有 © 2024 NVIDIA Corporation
  隐私政策 | 管理我的隐私 | 请勿出售或分享我的数据 | 服务条款 | 辅助功能 | 公司政策 | 产品安全 | 联系我们