IErrorRecorder

tensorrt.ErrorCodeTRT

TensorRT 在执行期间可能返回的错误代码。

成员

SUCCESS : 执行成功完成。

UNSPECIFIED_ERROR

不属于任何其他类别的错误。包含此错误是为了向前兼容。

INTERNAL_ERROR : 发生了不可恢复的 TensorRT 错误。

INVALID_ARGUMENT

传递给函数的参数本身无效。这违反了 API 约定。

INVALID_CONFIG

当比较相对于其他参数的参数状态时发生错误。例如,concat 的维度在通道维度之外的两个张量之间有所不同。当参数本身正确,但相对于其他参数不正确时,会触发此错误。这有助于区分简单错误和更复杂的错误。这违反了 API 约定。

FAILED_ALLOCATION

在主机或设备上执行内存分配时发生错误。内存分配错误通常是致命的,但在应用程序提供自己的内存分配例程的情况下,可以增加可用内存池并恢复执行。

FAILED_INITIALIZATION

TensorRT 依赖的一个或多个组件未正确初始化。这是一个系统设置问题。

FAILED_EXECUTION

执行期间发生错误,导致 TensorRT 提前结束,无论是异步错误、用户取消还是 CUDA/DLA 报告的其他执行错误。在动态系统中,可以丢弃数据并处理下一帧,或者可以重试执行。这是一个执行错误或内存错误。

FAILED_COMPUTATION

执行期间发生错误,导致数据损坏,但执行已完成。此错误的示例包括 NaN 压缩或整数溢出。在动态系统中,可以丢弃数据并处理下一帧,或者可以重试执行。这是一个数据损坏错误、输入错误或范围错误。

INVALID_STATE

由于不正确的函数调用顺序,TensorRT 处于错误状态。无效状态的一个示例是指定仅 DLA 的层,而没有 GPU 回退,并且 DLA 不支持该层。这可能发生在服务乐观地为多个不同的配置执行网络而没有检查正确的错误配置,而是丢弃 TensorRT 捕获的错误配置的情况下。这违反了 API 约定,但可以恢复。

恢复示例:GPU 回退被禁用,并且指定具有大滤波器 (63x63) 的 conv 层在 DLA 上运行。由于 DLA 不支持大内核大小,这将失败。可以通过启用 GPU 回退或将层设置为在 GPU 上运行来恢复。

UNSUPPORTED_STATE

由于硬件或系统的限制,网络在设备上不受支持而发生错误。一个例子是在安全认证的上下文中运行不安全的层,或者当前网络对资源的需求大于目标设备的能力。否则网络是正确的,但网络和硬件组合存在问题。这是可以恢复的。示例:* Scratch 空间请求大于可用的设备内存,可以通过增加允许的工作区大小来恢复。* 张量大小超过最大元素计数,可以通过减小最大批次大小来恢复。

class tensorrt.IErrorRecorder(self: tensorrt.tensorrt.IErrorRecorder)

用于 TensorRT 对象的引用计数应用程序实现的错误报告接口。

错误报告机制是一个用户定义的对象,它与分配给它的对象的内部状态交互,以确定有关执行异常的信息。错误记录器获取一个错误枚举,该枚举比 pass/fail 更具描述性,以及一个描述,该描述提供有关确切故障模式的更多详细信息。在安全上下文中,错误字符串的长度都限制为 128 个字符。ErrorRecorder 传递给从另一个分配了 ErrorRecorder 的类创建的任何类。例如,将 ErrorRecorder 分配给 Builder 允许所有 INetwork、ILayer 和 ITensor 使用相同的错误记录器。对于具有自己的 ErrorRecorder 访问器函数的函数。这允许为该特定对象注册不同的错误记录器或注销错误记录器。

如果将相同的 ErrorRecorder 传递给在不同线程中并行执行的不同接口对象,则 ErrorRecorder 对象实现必须是线程安全的。所有锁定和同步都推送到接口实现,并且 TensorRT 在访问接口函数时不会保持任何同步原语。

clear(self: tensorrt.tensorrt.IErrorRecorder) None

清除错误记录器上的错误堆栈。

删除错误记录器跟踪的所有错误。此函数必须保证,在此函数调用之后,并且只要没有错误发生,num_errors 将为零。

get_error_code(self: tensorrt.tensorrt.IErrorRecorder, arg0: int) tensorrt.tensorrt.ErrorCodeTRT

返回 ErrorCode 枚举。

error_idx 指定应用程序要分析的错误代码,从 0 到 num_errors-1,并返回错误代码枚举。

参数:

error_idx – 一个 32 位整数,索引到错误数组中。

返回:

返回与 error_idx 对应的枚举。

get_error_desc(self: tensorrt.tensorrt.IErrorRecorder, arg0: int) str

返回错误描述。

对于 idx 值指定的错误,返回错误描述。在安全上下文中,存在恒定长度要求,以消除任何动态内存分配,并且错误消息可能会被截断。错误描述的格式为“<EnumAsStr> - <Description>”。

参数:

error_idx – 一个 32 位整数,索引到错误数组中。

返回:

返回错误描述。

has_overflowed(self: tensorrt.tensorrt.IErrorRecorder) bool

确定错误堆栈是否已溢出。

当错误数量很大时,此函数用于查询是否由于存储容量不足而丢弃了一个或多个错误。这在汽车安全案例中尤其重要,在汽车安全案例中,内部错误处理机制无法分配内存。

返回:

如果由于错误堆栈溢出而丢弃了错误,则为 True。

num_errors(self: tensorrt.tensorrt.IErrorRecorder) int

返回错误数

确定在当前执行点与上次执行 clear() 之间发生的错误数。由于可能发生异步错误,TensorRT API 可能会返回正确的结果,但仍会在 Error Recorder 中注册错误。getNbErrors 的值必须单调递增,直到调用 clear()。

返回:

返回检测到的错误数,如果没有错误,则返回 0。

report_error(self: tensorrt.tensorrt.IErrorRecorder, arg0: tensorrt.tensorrt.ErrorCodeTRT, arg1: str) bool

清除错误记录器上的错误堆栈。

向用户报告具有给定值和人类可读描述的错误。如果可以继续处理,则该函数返回 false,这意味着报告的错误不是致命的。这不能保证处理继续,但为 TensorRT 提供了提示。

参数:
  • val – 要报告的错误代码枚举。

  • desc – 错误描述。

返回:

如果错误被确定为致命错误,并且必须结束当前函数的处理,则为 True。