IPluginV2DynamicExt

class tensorrt.IPluginV2DynamicExt(*args, **kwargs)

用户实现层的插件类。

插件是应用程序实现自定义层的一种机制。

类似于 IPluginV2Ext (包括支持不同输出数据类型的功能),但支持动态形状。

此类用于实现带有 Python 的 IPluginV2DynamicExt 插件。从 IPluginV2IPluginV2Ext 继承的 Python->C++ 绑定将继续在基于 C++ 的 IPluginV2DynamicExt 插件上工作。

注意

除了 tensorrt_version 之外的每个属性都必须在基于 Python 的插件上显式初始化。除了 plugin_namespace,这些属性在通过基于 C++ 的插件访问时将是只读的。

变量:
  • num_outputsint 来自插件的输出数量。这被 INetworkDefinitionBuilder 的实现使用。 特别是,它在任何调用 initialize() 之前被调用。

  • tensorrt_versionint [只读] 构建此插件所用的 API 版本。

  • plugin_typestr 插件类型。应与相应插件创建器返回的插件名称匹配。

  • plugin_versionstr 插件版本。应与相应插件创建器返回的插件版本匹配。

  • plugin_namespacestr 此插件对象所属的命名空间。理想情况下,来自同一插件库的所有插件对象应具有相同的命名空间。

  • serialization_sizeint [只读] 所需序列化缓冲区的大小。

重载函数。

  1. __init__(self: tensorrt.tensorrt.IPluginV2DynamicExt) -> None

  2. __init__(self: tensorrt.tensorrt.IPluginV2DynamicExt, arg0: tensorrt.tensorrt.IPluginV2DynamicExt) -> None

clone(self: tensorrt.tensorrt.IPluginV2DynamicExt) tensorrt.tensorrt.IPluginV2DynamicExt

克隆插件对象。 这也会复制内部插件参数,并返回一个带有这些参数的新插件对象。

如果源插件已使用 configure_plugin() 预配置,则返回的对象也应预配置。 克隆的插件对象可以与源对象共享相同的每个引擎的不可变资源(例如权重),以避免重复。

configure_plugin(self: tensorrt.tensorrt.IPluginV2DynamicExt, pos: List[tensorrt.tensorrt.DynamicPluginTensorDesc], in_out: List[tensorrt.tensorrt.DynamicPluginTensorDesc]) None

配置插件。

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

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

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

警告

configure_plugin() 方法不能从 Python 在基于 C++ 的插件上调用

参数:
  • in – 用于配置的输入张量属性。

  • out – 用于配置的输出张量属性。

destroy(self: tensorrt.tensorrt.IPluginV2DynamicExt) None

销毁插件对象。 这将在销毁 INetworkDefinitionBuilderICudaEngine 时调用。

注意

当实现基于 Python 的插件时,实现此方法是可选的。 默认行为是 pass

enqueue(self: tensorrt.tensorrt.IPluginV2DynamicExt, input_desc: List[tensorrt.tensorrt.PluginTensorDesc], output_desc: List[tensorrt.tensorrt.PluginTensorDesc], inputs: List[int], outputs: List[int], workspace: int, stream: int) None

执行层。

inputsoutputs 包含指向相应输入和输出设备缓冲区的指针,以其 intptr_t 强制转换形式。 stream 也表示应在其中执行 enqueue 的 CUDA 流的 intptr_t 强制转换。

警告

由于输入、输出和工作区缓冲区由 TRT 创建和拥有,因此从 Python 端写入它们时必须小心。

警告

与 C++ API 的 enqueue() 相比,此方法不得返回错误代码。 如果发生错误,预期的行为是抛出适当的异常。

警告

enqueue() 方法不能从 Python 在基于 C++ 的插件上调用。

参数:
  • input_desc – 如何解释输入张量的内存。

  • output_desc – 如何解释输出张量的内存。

  • inputs – 输入张量的内存。

  • outputs – 输出张量的内存。

  • workspace – 执行的工作区。

  • stream – 执行内核的流。

get_output_datatype(self: tensorrt.tensorrt.IPluginV2DynamicExt, index: int, input_types: List[tensorrt.tensorrt.DataType]) tensorrt.tensorrt.DataType

返回请求索引处插件输出的 DataType 。 默认行为应是返回第一个输入的类型,如果层没有输入,则返回 DataType::kFLOAT 。 返回的数据类型必须具有插件支持的格式。

参数:
  • index – 请求数据类型的输出的索引。

  • input_types – 输入的数据类型。

返回值:

请求的 index 处插件输出的 DataType

get_output_dimensions(self: tensorrt.tensorrt.IPluginV2DynamicExt, output_index: int, inputs: List[tensorrt.tensorrt.DimsExprs], expr_builder: tensorrt.tensorrt.IExprBuilder) tensorrt.tensorrt.DimsExprs

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

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

警告

get_output_dimensions() 方法不能从 Python 在基于 C++ 的插件上调用

参数:
  • output_index – 输出张量的索引

  • inputs – 输入张量维度的表达式

  • expr_builder – 用于生成新表达式的对象

返回值:

给定 output_index 处输出维度的表达式。

get_serialization_size(self: tensorrt.tensorrt.IPluginV2DynamicExt) int

返回插件所需的序列化大小(以字节为单位)。

注意

当实现基于 Python 的插件时,实现此方法是可选的。 默认行为等效于 return len(serialize())

get_workspace_size(self: tensorrt.tensorrt.IPluginV2DynamicExt, in: List[tensorrt.tensorrt.PluginTensorDesc], out: List[tensorrt.tensorrt.PluginTensorDesc]) int

返回插件所需的工作区大小(以字节为单位)。

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

注意

当实现基于 Python 的插件时,实现此方法是可选的。 默认行为等效于 return 0

警告

get_workspace_size() 方法不能从 Python 在基于 C++ 的插件上调用

参数:
  • input_desc – 如何解释输入张量的内存。

  • output_desc – 如何解释输出张量的内存。

返回值:

工作区大小(以字节为单位)。

initialize(self: tensorrt.tensorrt.IPluginV2DynamicExt) int

初始化插件以供执行。 这在创建引擎时调用。

注意

当实现基于 Python 的插件时,实现此方法是可选的。 默认行为等效于 pass

警告

与 C++ API 的 initialize() 相比,此方法不得返回错误代码。 如果发生错误,预期的行为是抛出适当的异常。

警告

initialize() 方法不能从 Python 在基于 C++ 的插件上调用。

serialize(self: tensorrt.tensorrt.IPluginV2DynamicExt) bytes

序列化插件。

警告

此 API 仅在实现基于 Python 的插件时适用。

返回值:

包含插件序列化表示形式的字节对象。

supports_format_combination(self: tensorrt.tensorrt.IPluginV2DynamicExt, pos: int, in_out: List[tensorrt.tensorrt.PluginTensorDesc], num_inputs: int) bool

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

对于此方法,输入的索引从 [0, num_inputs-1] 开始,输出的索引从 [num_inputs, (num_inputs + num_outputs - 1)] 开始。 posin_ou`t 的索引,其中 `0 <= pos < (num_inputs + num_outputs - 1)

TensorRT 调用此方法以查询由 pos 索引的输入/输出张量是否支持由 in_out[pos].formatin_out[pos].type 指定的格式和数据类型。 如果 in_out[pos] 中的格式和数据类型受插件支持,则重写应返回 true。 检查由大于 pos 的数字索引的格式或数据类型或任何张量是未定义的行为。

警告

supports_format_combination() 方法不能从 Python 在基于 C++ 的插件上调用

参数:
  • pos – 正在查询的输入或输出张量索引。

  • in_out – 组合的输入和输出张量描述。

  • num_inputs – 输入的数量。

返回值:

布尔值,指示是否支持格式组合。

terminate(self: tensorrt.tensorrt.IPluginV2DynamicExt) None

释放插件层初始化期间获取的资源。 这在销毁引擎时调用。

注意

当实现基于 Python 的插件时,实现此方法是可选的。 默认行为等效于 pass