IPluginV3¶
- class tensorrt.IPluginV3(*args, **kwargs)¶
V3 版本用户实现层插件类。
IPluginV3 充当插件能力接口的包装器,这些接口定义了插件的实际行为。
提供此类是为了使用 Python 实现 IPluginV3 插件。
注意
每个属性都必须在基于 Python 的插件上显式初始化。当通过基于 C++ 的插件访问时,这些属性将是只读的。
- 变量:
num_outputs –
int
插件的输出数量。这由INetworkDefinition
和Builder
的实现使用。特别是,它在任何调用initialize()
之前被调用。tensorrt_version –
int
[只读] 构建此插件的 API 版本。plugin_type –
str
插件类型。应与相应插件创建器返回的插件名称匹配。plugin_version –
str
插件版本。应与相应插件创建器返回的插件版本匹配。plugin_namespace –
str
此插件对象所属的命名空间。理想情况下,来自同一插件库的所有插件对象都应具有相同的命名空间。serialization_size –
int
[只读] 所需的序列化缓冲区的大小。
重载函数。
__init__(self: tensorrt.tensorrt.IPluginV3) -> None
__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 ¶
在插件对象销毁之前,执行任何所需的清理或资源释放。当
INetworkDefinition
、Builder
或ICudaEngine
被销毁时,将调用此方法。注意
在 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_type –
str
插件类型。应与相应插件创建器返回的插件名称匹配。plugin_version –
str
插件版本。应与相应插件创建器返回的插件版本匹配。plugin_namespace –
str
此插件对象所属的命名空间。理想情况下,来自同一插件库的所有插件对象都应具有相同的命名空间。
重载函数。
__init__(self: tensorrt.tensorrt.IPluginV3OneCore) -> None
__init__(self: tensorrt.tensorrt.IPluginV3OneCore, arg0: tensorrt.tensorrt.IPluginV3OneCore) -> None
- class tensorrt.IPluginV3OneBuild(*args, **kwargs)¶
启用构建能力(PluginCapabilityType.BUILD)的插件能力接口。
公开允许表达插件的构建时属性和行为的方法。
注意
每个属性都必须在基于 Python 的插件上显式初始化。当通过基于 C++ 的插件访问时,这些属性将是只读的。
- 变量:
num_outputs –
int
插件的输出数量。这由INetworkDefinition
和Builder
的实现使用。
重载函数。
__init__(self: tensorrt.tensorrt.IPluginV3OneBuild) -> None
__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 值对应于插件正在分析的当前配置文件的 MIN、OPT 和 MAX 值,其中 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)]。pos 是 in_ou`t 中的索引,其中 `0 <= pos < (num_inputs + num_outputs - 1)。
TensorRT 调用此方法以查询由 pos 索引的输入/输出张量是否支持由 in_out[pos].format 和 in_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)的插件能力接口。
公开允许表达插件的运行时属性和行为的方法。
重载函数。
__init__(self: tensorrt.tensorrt.IPluginV3OneRuntime) -> None
__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 ¶
执行层。
inputs 和 outputs 包含指向相应输入和输出设备缓冲区的指针,作为它们的 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 仅在 type 为 DataType.INT8 时有效。如果无效,TensorRT 会将值设置为 -1.0。
- 变量:
dims –
Dims
维度。format –
TensorFormat
张量格式。type –
DataType
类型。scale –
float
INT8 数据类型的缩放。
- class tensorrt.DynamicPluginTensorDesc(self: tensorrt.tensorrt.DynamicPluginTensorDesc)¶
总结插件可能看到的输入或输出张量。
- 变量:
desc –
PluginTensorDesc
解释张量数据指针所需的信息,除了 desc.dims 使用 -1 代替任何运行时维度。min –
Dims
张量维度的下限。max –
Dims
张量维度的上限。
- 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 的列表或元组来构造它。
重载函数。
__init__(self: tensorrt.tensorrt.DimsExprs) -> None
__init__(self: tensorrt.tensorrt.DimsExprs, arg0: List[tensorrt.tensorrt.IDimensionExpr]) -> None
__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¶