TensorRT 10.8.0
|
类似于 IPluginV2Ext,但支持动态形状。 更多...
#include <NvInferRuntime.h>
公共成员函数 | |
IPluginV2DynamicExt * | clone () 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 |
执行层。 更多... | |
![]() | |
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 |
从其执行上下文中分离插件对象。 更多... | |
![]() | |
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 |
![]() | |
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::kFLOAT 或 DataType::kINT32,并且如果它是 DataType::kHALF 或 DataType:kINT8,则返回的类型被规范化为 DataType::kFLOAT。 对于强类型网络,inputTypes 从先前的操作推断而来,而 getOutputDataType 根据 inputTypes 指定返回的类型。 有关浮点精度的详细信息稍后由 supportsFormatCombination 方法引出。
|
inlineprotectedvirtualnoexcept |
|
overridepure virtualnoexcept |
克隆插件对象。 这也会复制内部插件参数,并返回一个包含这些参数的新插件对象。 如果源插件已使用 configurePlugin() 预配置,则返回的对象也必须预配置。 返回的对象必须允许使用新的执行上下文调用 attachToContext()。 克隆的插件对象可以与源对象共享相同的每个引擎的不可变资源(例如,权重),以避免重复(例如,通过引用计数)。
使用注意事项
|
pure virtualnoexcept |
配置插件。
configurePlugin() 可以在构建和执行阶段多次调用。 构建阶段发生在调用 initialize() 之前,并且仅在 IBuilder 创建引擎期间发生。 执行阶段发生在调用 initialize() 之后,并且在 IBuilder 创建引擎和 IExecutionContext 执行引擎期间发生。
构建阶段:当插件正在准备进行性能分析但不是针对任何特定输入大小时,会调用 IPluginV2DynamicExt->configurePlugin。 这为插件提供了一个机会,使其可以根据输入和输出格式以及可能的维度范围做出算法选择。 DynamicPluginTensorDesc 的最小值和最大值对应于插件正在分析的当前配置文件的 kMIN 和 kMAX 值,其中 desc.dims 字段对应于网络创建时指定的插件的维度。 通配符维度将在此阶段的 desc.dims 字段中存在。
执行阶段:当插件正在准备执行特定维度的插件时,会调用 IPluginV2DynamicExt->configurePlugin。 这为插件提供了一个机会,使其可以根据 desc.dims 字段中存储的显式输入维度来更改算法选择。
in | 用于配置的输入张量属性。 |
nbInputs | 输入张量的数量。 |
out | 用于配置的输出张量属性。 |
nbOutputs | 输出张量的数量。 |
|
pure virtualnoexcept |
执行层。
inputDesc | 如何解释输入张量的内存。 |
outputDesc | 如何解释输出张量的内存。 |
inputs | 输入张量的内存。 |
outputs | 输出张量的内存。 |
workspace | 执行的工作空间。 |
stream | 执行内核的流。 |
|
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;
|
inlineoverrideprotectedvirtualnoexcept |
返回构建此插件的 API 版本。 高字节由 TensorRT 保留,用于将其与 IPluginV2 区分开来。
不要覆盖此方法,因为 TensorRT 库使用它来维护与插件的向后兼容性。
从 nvinfer1::IPluginV2 重新实现。
|
pure virtualnoexcept |
查找层所需的工作空间大小。
此函数在配置插件后调用,并且可能在执行期间调用。 结果应该是足够的工作空间大小,以处理给定大小或任何更小的问题的输入和输出。
|
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]。
一些例子
return inOut[pos].format == TensorFormat::kLINEAR && inOut[pos].type == DataType::kHALF;
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 个组合,将停止询问格式。
|
staticconstexpr |
接受的格式组合数量的限制。
版权所有 © 2024 NVIDIA Corporation
隐私政策 | 管理我的隐私 | 请勿出售或分享我的数据 | 服务条款 | 辅助功能 | 公司政策 | 产品安全 | 联系我们