IOptimizationProfile

class tensorrt.IOptimizationProfile

用于动态输入维度和形状张量的优化配置文件。

当从 ICudaEngine 构建 INetworkDefinition 时,如果它具有动态可调整大小的输入(至少一个输入张量的一个或多个维度指定为 -1)或形状输入张量,则用户需要指定至少一个优化配置文件。优化配置文件编号为 0, 1, …

当没有显式选择优化配置文件时,ICudaEngine 将使用已定义的第一个优化配置文件(索引为 0)。如果所有输入都不是动态的,则除非用户显式提供默认优化配置文件(在这种情况下是可能的但不是必需的),否则将自动生成默认优化配置文件。如果定义了多个优化配置文件,则用户可以设置目标,即为每个附加配置文件分配的最大额外权重空间(作为最大、无约束内存的分数)。

用户设置最佳输入张量维度,以及最小和最大输入张量维度。构建器选择在最佳输入张量维度下运行时最短的内核,并且对于最小和最大维度之间有效范围内的所有输入张量大小都有效。如果输入张量维度超出此配置文件的有效范围,则会引发运行时错误。同样,用户为所有形状张量输入值提供最小值、最佳值和最大值。

IOptimizationProfile 实现了 __nonzero__()__bool__(),以便将配置文件评估为 bool(例如 if profile:)将检查优化配置文件是否可以传递给 IBuilderConfig 对象。这将执行部分验证,例如,检查最大维度是否至少与最佳维度一样大,以及最佳维度是否始终至少与最小维度一样大。某些验证步骤需要了解网络定义,并推迟到引擎构建时。

变量:

extra_memory_target – 构建器应力求为此配置文件分配的最大额外内存,作为用户未对内存施加任何约束时将使用的内存的分数。这种无约束情况是默认情况;它对应于 extra_memory_target == 1.0。如果 extra_memory_target == 0.0,则构建器旨在创建新的优化配置文件,而不分配任何额外的权重内存。有效输入介于 0.0 和 1.0 之间。此参数仅为提示,TensorRT 不保证会达到 extra_memory_target。对于定义的第一个(默认)优化配置文件,将忽略此参数。

get_shape(self: tensorrt.tensorrt.IOptimizationProfile, input: str) List[tensorrt.tensorrt.Dims]

获取动态输入张量的最小/最佳/最大维度。如果维度之前未通过 set_shape() 设置,则返回长度为 -1 的无效 Dims

返回:

长度为 3 的 List[Dims],按顺序包含最小、最佳和最大形状。如果尚未设置形状,则返回空列表。

get_shape_input(self: tensorrt.tensorrt.IOptimizationProfile, input: str) List[List[int]]

获取形状输入张量的最小/最佳/最大值。

返回:

长度为 3 的 List[List[int]],按顺序包含最小值、最佳值和最大值。如果尚未设置值,则返回空列表。

set_shape(self: tensorrt.tensorrt.IOptimizationProfile, input: str, min: tensorrt.tensorrt.Dims, opt: tensorrt.tensorrt.Dims, max: tensorrt.tensorrt.Dims) None

设置动态输入张量的最小/最佳/最大维度。

对于任何具有动态维度的网络输入张量,都必须调用此函数。如果 minoptmax 是最小维度、最佳维度和最大维度,并且 real_shape 是为此输入张量提供给 INetworkDefinition 的形状,则必须满足以下条件

  1. len(min) == len(opt) == len(max) == len(real_shape)

  2. 0 <= min[i] <= opt[i] <= max[i] for all i

  3. 如果 real_shape[i] != -1,则 min[i] == opt[i] == max[i] == real_shape[i]

可以(但不是必须)为没有动态维度的输入张量调用此函数。在这种情况下,所有形状都必须等于 real_shape

参数:
  • input – 输入张量的名称。

  • min – 此输入张量的最小维度。

  • opt – 此输入张量的最佳维度。

  • max – 此输入张量的最大维度。

Raises:

ValueError 如果检测到不一致。请注意,输入只能部分验证;完整的验证在引擎构建时执行。

set_shape_input(self: tensorrt.tensorrt.IOptimizationProfile, input: str, min: List[int], opt: List[int], max: List[int]) None

设置形状输入张量的最小/最佳/最大值。

对于每个作为形状张量的输入张量 tt.is_shape == True),都必须调用此函数。这意味着 t 的数据类型为 int32,秩为 0 或 1,并且 t 的维度在网络定义时是固定的。对于任何不是形状张量的输入张量,都不得调用此函数。

如果 minoptmax 是最小值、最佳值和最大值,则必须满足 min[i] <= opt[i] <= max[i] for all i

参数:
  • input – 输入张量的名称。

  • min – 此形状张量的最小值。

  • opt – 此形状张量的最佳值。

  • max – 此形状张量的最大值。

Raises:

ValueError 如果检测到不一致。请注意,输入只能部分验证;完整的验证在引擎构建时执行。