IPluginV3

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

V3 版本用户实现层插件类。

IPluginV3 充当插件能力接口的包装器,这些接口定义了插件的实际行为。

提供此类是为了使用 Python 实现 IPluginV3 插件。

注意

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

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

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

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

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

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

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

重载函数。

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

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

clone(self: tensorrt.tensorrt.IPluginV3) tensorrt.tensorrt.IPluginV3

克隆插件对象。这将复制内部插件参数,并返回具有这些参数的新插件对象。

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

destroy(self: tensorrt.tensorrt.IPluginV3) None

在插件对象销毁之前,执行任何所需的清理或资源释放。当 INetworkDefinitionBuilderICudaEngine 被销毁时,将调用此方法。

注意

在 C++ API 中没有与此方法直接等效的方法。

注意

实现此方法是可选的。默认行为是 pass

get_capability_interface(self: tensorrt.tensorrt.IPluginV3, type: tensorrt.PluginCapabilityType) object

返回实现指定 PluginCapabilityType 的插件对象。

注意

为构建阶段添加的 IPluginV3 对象(通过 add_plugin_v3())必须为 PluginCapabilityType.CORE、PluginCapabilityType.BUILD 和 PluginCapabilityType.RUNTIME 返回有效的对象。

注意

为运行时阶段添加的 IPluginV3 对象必须为 PluginCapabilityType.CORE 和 PluginCapabilityType.RUNTIME 返回有效的对象。

class tensorrt.IPluginCapability

插件能力接口的基类

IPluginCapability 代表 TensorRT V3 插件拆分为子对象,这些子对象公开插件可能具有的不同类型的能力,而不是定义插件的所有能力和行为的单个接口。

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

启用核心能力(PluginCapabilityType.CORE)的插件能力接口。

注意

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

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

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

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

重载函数。

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

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

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

启用构建能力(PluginCapabilityType.BUILD)的插件能力接口。

公开允许表达插件的构建时属性和行为的方法。

注意

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

变量:

num_outputsint 插件的输出数量。这由 INetworkDefinitionBuilder 的实现使用。

重载函数。

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

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

configure_plugin(self: tensorrt.tensorrt.IPluginV3, in: List[tensorrt.tensorrt.DynamicPluginTensorDesc], out: List[tensorrt.tensorrt.DynamicPluginTensorDesc]) None

配置插件。

在 IBuilder 创建引擎的构建阶段,可以多次调用此函数。

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

警告

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

警告

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

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

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

get_output_data_types(self: tensorrt.tensorrt.IPluginV3, input_types: List[tensorrt.tensorrt.DataType]) List[tensorrt.tensorrt.DataType]

返回插件输出的 DataType

如果层没有输入,则提供 DataType.FLOAT 。任何大小张量输出的数据类型必须为 DataType.INT32。返回的数据类型必须各自具有插件支持的格式。

参数:

input_types – 输入的数据类型。

返回值:

请求的 index 处插件输出的 DataType

get_output_shapes(self: tensorrt.tensorrt.IPluginV3, inputs: List[tensorrt.tensorrt.DimsExprs], shape_inputs: List[tensorrt.tensorrt.DimsExprs], expr_builder: tensorrt.tensorrt.IExprBuilder) List[tensorrt.tensorrt.DimsExprs]

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

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

警告

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

参数:
  • inputs – 输入张量的形状表达式

  • shape_inputs – 形状输入形状的表达式

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

返回值:

输出形状的表达式。

get_valid_tactics(self: tensorrt.tensorrt.IPluginV3) List[int]

返回插件打算使用的任何自定义策略。

注意

提供的策略值必须是唯一且为正数

警告

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

get_workspace_size(self: tensorrt.tensorrt.IPluginV3, in: List[tensorrt.tensorrt.DynamicPluginTensorDesc], out: List[tensorrt.tensorrt.DynamicPluginTensorDesc]) int

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

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

注意

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

警告

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

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

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

返回值:

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

supports_format_combination(self: tensorrt.tensorrt.IPluginV3, pos: int, in_out: List[tensorrt.tensorrt.DynamicPluginTensorDesc], 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 – 输入的数量。

返回值:

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

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

启用运行时能力(PluginCapabilityType.RUNTIME)的插件能力接口。

公开允许表达插件的运行时属性和行为的方法。

重载函数。

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

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

attach_to_context(self: tensorrt.tensorrt.IPluginV3, resource_context: tensorrt.tensorrt.IPluginResourceContext) tensorrt.tensorrt.IPluginV3

克隆插件,将克隆的插件对象附加到执行上下文,并授予克隆的插件访问某些上下文资源的权限。

当创建新的执行上下文时,会自动为每个插件调用此函数。

插件可以使用 resource_context 提供的资源,直到 TensorRT 删除该插件。

参数:

resource_context – 资源上下文,它公开了获取执行上下文特定资源访问权限的方法。保证每个插件附加到的不同执行上下文都有不同的资源上下文。

注意

此方法应克隆整个 IPluginV3 对象,而不仅仅是运行时接口

enqueue(self: tensorrt.tensorrt.IPluginV3, 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 也表示 intptr_t 强制类型转换为应在其中执行入队的 CUDA 流。

警告

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

警告

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

警告

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

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

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

  • inputs – 输入张量的内存。

  • outputs – 输出张量的内存。

  • workspace – 用于执行的工作区。

  • stream – 在其中执行内核的流。

get_fields_to_serialize(self: tensorrt.tensorrt.IPluginV3) tensorrt.tensorrt.PluginFieldCollection_

返回应序列化的插件字段。

注意

返回的插件字段集不一定需要与通过相应插件创建器的 get_field_names() 公告的字段集匹配。

警告

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

on_shape_change(self: tensorrt.tensorrt.IPluginV3, in: List[tensorrt.tensorrt.PluginTensorDesc], out: List[tensorrt.tensorrt.PluginTensorDesc]) None

当插件正在为特定维度执行做准备时调用。这可能在执行阶段发生多次,包括 IBuilder 创建引擎和 IExecutionContext 执行引擎期间。

  • IBuilder 将为每个配置文件调用此函数一次,其中 in 解析为当前配置文件的 kOPT 字段指定的值。

  • 如果满足以下条件,IExecutionContext 将在后续的 enqueue_v2() 或 execute_v3() 实例期间调用此函数:(1) 优化配置文件已更改 (2)。输入绑定已更改。

警告

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

警告

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

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

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

set_tactic(self: tensorrt.tensorrt.IPluginV3, tactic: int) None

设置要在后续 enqueue() 调用中使用的策略。

如果未公告任何自定义策略,则此值将为 0,这被指定为默认策略。

警告

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

警告

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

class tensorrt.IPluginResourceContext

用于插件访问 TensorRT 提供的每个上下文资源的接口

没有公开方法来构建 IPluginResourceContext。它作为 trt.IPluginV3OneRuntime.attach_to_context() 的参数出现。

tensorrt.PluginTensorDesc

插件可能看到的输入或输出字段。

scale 仅在 typeDataType.INT8 时有效。如果无效,TensorRT 会将值设置为 -1.0。

变量:
  • dimsDims 维度。

  • formatTensorFormat 张量格式。

  • typeDataType 类型。

  • scalefloat INT8 数据类型的缩放。

class tensorrt.DynamicPluginTensorDesc(self: tensorrt.tensorrt.DynamicPluginTensorDesc)

总结插件可能看到的输入或输出张量。

变量:
  • descPluginTensorDesc 解释张量数据指针所需的信息,除了 desc.dims 使用 -1 代替任何运行时维度。

  • minDims 张量维度的下限。

  • maxDims 张量维度的上限。

class tensorrt.IDimensionExpr

IDimensionExpr 表示由常量、输入维度和二元运算构建的整数表达式。

这些表达式可用于覆盖 IPluginV2DynamicExt::get_output_dimensions(),以根据输入维度定义输出维度。

get_constant_value(self: tensorrt.tensorrt.IDimensionExpr) int

获取常量的值。

如果 is_constant() 为 true,则返回常量的值。否则,返回 int64 最小值。

is_constant(self: tensorrt.tensorrt.IDimensionExpr) bool

如果表达式是构建时常量,则返回 true。

is_size_tensor(self: tensorrt.tensorrt.IDimensionExpr) bool

如果这表示尺寸张量的值,则返回 true。

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

类似于 Dims 类,但维度使用表达式 (IDimensionExpr) 而不是常量。

行为类似于 Python 可迭代对象,可以使用 IDimensionExpr 的列表或元组来构造它。

重载函数。

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

  2. __init__(self: tensorrt.tensorrt.DimsExprs, arg0: List[tensorrt.tensorrt.IDimensionExpr]) -> None

  3. __init__(self: tensorrt.tensorrt.DimsExprs, arg0: int) -> None

class tensorrt.IExprBuilder(self: tensorrt.tensorrt.IExprBuilder)

用于构建 IDimensionExpr 的对象。

没有公开方法来构建 IExprBuilder。它作为方法 IPluginV2DynamicExt::get_output_dimensions() 的参数出现。该方法的重写可以使用 IExprBuilder 参数来构造表达式,这些表达式根据输入维度定义输出维度。

客户端应假定由 IExprBuilder 构建的任何值在 IPluginV2DynamicExt::get_output_dimensions() 返回后被销毁。

constant(self: tensorrt.tensorrt.IExprBuilder, arg0: int) tensorrt.tensorrt.IDimensionExpr

为给定值返回 IDimensionExpr。

declare_size_tensor(self: tensorrt.tensorrt.IExprBuilder, arg0: int, arg1: tensorrt.tensorrt.IDimensionExpr, arg2: tensorrt.tensorrt.IDimensionExpr) tensorrt.tensorrt.IDimensionExpr

在给定的输出索引处声明尺寸张量,具有指定的自动调整公式和上限。

尺寸张量允许插件具有无法仅从输入维度计算的输出维度。例如,假设插件为 2D 输入实现了等效于 INonZeroLayer 的功能。插件可以有一个输出用于非零元素的索引,第二个输出包含非零元素的数量。假设输入的大小为 [M,N],并且有 K 个非零元素。插件可以将 K 写入第二个输出。当告知 TensorRT 第一个输出的形状为 [2,K] 时,插件使用 IExprBuilder.constant() 和 IExprBuilder.declare_size_tensor(1,…) 来创建分别表示 2 和 K 的 IDimensionExpr。

TensorRT 还需要知道用于自动调整的 K 值以及 K 的上限,以便它可以为输出张量分配内存。在示例中,假设通常插件输入元素的一半是非零的,并且所有元素都可能为非零。那么使用 M*N/2 可能是 opt 参数的一个很好的表达式,而 M*N 则作为上限。这些表达式的 IDimensionsExpr 可以从输入维度的 IDimensionsExpr 构建。

operation(self: tensorrt.tensorrt.IExprBuilder, arg0: tensorrt.tensorrt.DimensionOperation, arg1: tensorrt.tensorrt.IDimensionExpr, arg2: tensorrt.tensorrt.IDimensionExpr) tensorrt.tensorrt.IDimensionExpr

返回一个 IDimensionExpr,它表示应用于第一个和第二个参数的给定运算。如果 op 不是有效的 DimensionOperation,则返回 None。

class tensorrt.DimensionOperation(self: tensorrt.tensorrt.DimensionOperation, value: int)

对两个 IDimensionExprs 的操作,表示维度计算中使用的整数表达式。

例如,给定两个 IDimensionExprs x 和 y 以及一个 IExprBuilder eb,eb.operation(DimensionOperation.SUM, x, y) 创建 x + y 的表示形式。

成员

SUM

PROD

MAX

MIN

SUB

EQUAL

LESS

FLOOR_DIV

CEIL_DIV

property name
class tensorrt.PluginCapabilityType(self: tensorrt.tensorrt.PluginCapabilityType, value: int)

枚举 IPluginV3 对象可能具有的不同能力类型。

成员

CORE

BUILD

RUNTIME

property name
class tensorrt.TensorRTPhase(self: tensorrt.tensorrt.TensorRTPhase, value: int)

指示 TensorRT 的操作阶段

成员

BUILD

RUNTIME

property name