Refitter

class tensorrt.Refitter(self: tensorrt.tensorrt.Refitter, engine: tensorrt.tensorrt.ICudaEngine, logger: tensorrt.tensorrt.ILogger)

更新 ICudaEngine 中的权重。

变量:
  • error_recorderIErrorRecorder 应用程序实现的 TensorRT 对象错误报告接口。

  • loggerILogger 创建 refitter 时提供的 logger。

  • max_threadsint Refitter 可以使用的最大线程数。

  • weights_validationbool 指示是否在重拟合过程中验证权重的标志。

参数:
  • engine – 要重拟合的引擎。

  • logger – 要使用的 logger。

__del__(self: tensorrt.tensorrt.Refitter) None
__init__(self: tensorrt.tensorrt.Refitter, engine: tensorrt.tensorrt.ICudaEngine, logger: tensorrt.tensorrt.ILogger) None
参数:
  • engine – 要重拟合的引擎。

  • logger – 要使用的 logger。

get_all(self: tensorrt.tensorrt.Refitter) Tuple[List[str], List[tensorrt.tensorrt.WeightsRole]]

获取所有可以重拟合的权重的描述。

返回:

具有可重拟合权重的层的名称,以及这些权重的角色。

get_all_weights(self: tensorrt.tensorrt.Refitter) List[str]

获取所有可以重拟合的权重的名称。

返回:

可重拟合权重的名称。

get_dynamic_range(self: tensorrt.tensorrt.Refitter, tensor_name: str) tuple

[已弃用] 在 TensorRT 10.1 中已弃用。已被显式量化取代。

获取张量的动态范围。如果从未设置动态范围,则返回校准期间计算的范围。

参数:

tensor_name – 要检索其动态范围的张量的名称。

返回:

Tuple[float, float] 包含动态范围的 [最小值,最大值] 的元组。

get_missing(self: tensorrt.tensorrt.Refitter) Tuple[List[str], List[tensorrt.tensorrt.WeightsRole]]

获取缺失权重的描述。

例如,如果已设置某些权重,但引擎以组合权重的方式进行了优化,则组合中任何未提供的权重都被认为是缺失的。

返回:

具有缺失权重的层的名称,以及这些权重的角色。

get_missing_weights(self: tensorrt.tensorrt.Refitter) List[str]

获取缺失权重的名称。

例如,如果已设置某些权重,但引擎以组合权重的方式进行了优化,则组合中任何未提供的权重都被认为是缺失的。

返回:

缺失权重的名称,未命名权重为空字符串。

get_named_weights(self: tensorrt.tensorrt.Refitter, weights_name: str) tensorrt.tensorrt.Weights

获取与给定名称关联的权重。

如果从未设置权重,则返回空权重,并向 refitter errorRecorder 报告错误。

参数:

weights_name – 要重拟合的权重的名称。

返回:

与给定名称关联的权重。

get_tensors_with_dynamic_range(self: tensorrt.tensorrt.Refitter) List[str]

[已弃用] 在 TensorRT 10.1 中已弃用。已被显式量化取代。

获取所有具有可重拟合动态范围的张量的名称。

返回:

具有可重拟合动态范围的张量的名称。

get_weights_location(self: tensorrt.tensorrt.Refitter, weights_name: str) tensorrt.tensorrt.TensorLocation

获取与给定名称关联的权重的存储位置。

如果从未设置权重,则返回 TensorLocation.HOST,并向 refitter errorRecorder 报告错误。

参数:

weights_name – 要重拟合的权重的名称。

返回:

与给定名称关联的权重的存储位置。

get_weights_prototype(self: tensorrt.tensorrt.Refitter, weights_name: str) tensorrt.tensorrt.Weights

获取与给定名称关联的权重原型。

权重原型的数据类型和大小与用于引擎构建的权重相同。当权重名称为 None 或与任何可重拟合权重不对应时,权重原型的大小为 -1。

参数:

weights_name – 要重拟合的权重的名称。

返回:

与给定名称关联的权重原型。

refit_cuda_engine(self: tensorrt.tensorrt.Refitter) bool

重拟合关联的引擎。

如果返回 False,则可能已重拟合部分权重。

如果引擎有待处理的排队工作,则行为未定义。CPU 或 GPU 上提供的权重可以在 refit_cuda_engine 返回后取消设置和释放,或更新。

与引擎关联的 IExecutionContexts 在之后仍然有效可用。无需为多次重拟合调用重复设置相同的权重,因为可以直接更新权重内存。

返回:

成功时返回 True,如果新权重验证失败或在调用之前 get_missing_weights() != 0,则返回 False

refit_cuda_engine_async(self: tensorrt.tensorrt.Refitter, stream_handle: int) bool

在给定的流上排队关联引擎的权重重拟合。

如果返回 False,则可能已重拟合部分权重。

如果引擎在与提供的流不同的流上有待处理的排队工作,则行为未定义。CPU 上提供的权重可以在 refit_cuda_engine_async 返回后取消设置和释放,或更新。GPU 上提供的权重的释放或更新可以在 refit_cuda_engine_async 返回后在同一流上排队。

与引擎关联的 IExecutionContexts 在之后仍然有效可用。无需为多次重拟合调用重复设置相同的权重,因为可以直接更新权重内存。权重更新任务应使用与重拟合调用相同的流。

参数:

stream – 用于排队权重更新任务的流。

返回:

成功时返回 True,如果新权重验证失败或在调用之前 get_missing_weights() != 0,则返回 False

set_dynamic_range(self: tensorrt.tensorrt.Refitter, tensor_name: str, range: List[float]) bool

[已弃用] 在 TensorRT 10.1 中已弃用。已被显式量化取代。

更新张量的动态范围。

参数:
  • tensor_name – 要更新其动态范围的张量的名称。

  • range – 新范围。

返回:

成功时返回 True,否则返回 False

如果不存在从该名称的网络张量派生的 Int8 引擎张量,则返回 false。如果成功,则 get_missing() 可能会报告需要提供一些权重。

set_named_weights(*args, **kwargs)

重载函数。

  1. set_named_weights(self: tensorrt.tensorrt.Refitter, name: str, weights: tensorrt.tensorrt.Weights) -> bool

    指定给定名称的新权重。拒绝的可能原因是

    • 权重名称为空或与任何可重拟合权重不对应。

    • 权重的大小与使用相同名称调用 get_weights_prototype() 返回的大小不一致。

    • 权重的数据类型与使用相同名称调用 get_weights_prototype() 返回的数据类型不一致。

    refit_cuda_engine()refit_cuda_engine_async() 返回之前修改权重将导致未定义的行为。

    arg name:

    要重拟合的权重的名称。

    arg weights:

    要与名称关联的新权重。

    returns:

    成功时返回 True,如果新权重被拒绝,则返回 False

  2. set_named_weights(self: tensorrt.tensorrt.Refitter, name: str, weights: tensorrt.tensorrt.Weights, location: tensorrt.tensorrt.TensorLocation) -> bool

    指定给定名称的指定设备上的新权重。拒绝的可能原因是

    • 权重名称为空或与任何可重拟合权重不对应。

    • 权重的大小与使用相同名称调用 get_weights_prototype() 返回的大小不一致。

    • 权重的数据类型与使用相同名称调用 get_weights_prototype() 返回的数据类型不一致。

    允许在 CPU 上提供一些权重,而在 GPU 上提供另一些权重。在 refit_cuda_engine()refit_cuda_engine_async() 返回之前修改权重将导致未定义的行为。

    arg name:

    要重拟合的权重的名称。

    arg weights:

    指定设备上的新权重。

    arg location:

    新权重的存储位置(主机 vs. 设备)。

    returns:

    成功时返回 True,如果新权重被拒绝,则返回 False

set_weights(self: tensorrt.tensorrt.Refitter, layer_name: str, role: tensorrt.tensorrt.WeightsRole, weights: tensorrt.tensorrt.Weights) bool

为给定名称的层指定新权重。拒绝的可能原因是

  • 不存在具有该名称的层。

  • 该层没有具有指定角色的权重。

  • 权重的大小与该层的原始规格不一致。

refit_cuda_engine()refit_cuda_engine_async() 返回之前修改权重将导致未定义的行为。

参数:
  • layer_name – 层的名称。

  • role – 权重的角色。有关更多信息,请参阅 WeightsRole

  • weights – 要重拟合的权重。

返回:

成功时返回 True,如果新权重被拒绝,则返回 False

unset_named_weights(self: tensorrt.tensorrt.Refitter, weights_name: str) bool

取消设置与给定名称关联的权重。

在释放权重之前取消设置权重。

参数:

weights_name – 要重拟合的权重的名称。

返回:

如果权重从未设置,则返回 False,否则返回 True