日志记录与跟踪

目录

开发者日志记录

ONNX Runtime 内置了跨平台的内部 printf 风格的日志记录 LOGS()。在生产版本中,开发者使用 API 可以配置此日志记录。

使用默认输出目标(stdout)并设置较高的日志严重性级别可能会带来性能损失。

log_severity_level

Python (见下文) - C/C++ CreateEnv / OrtLoggingLevel - .NET/C#

sess_opt = SessionOptions()
sess_opt.log_severity_level = 0 // Verbose
sess = ort.InferenceSession('model.onnx', sess_opt)

注意

请注意,log_verbosity_level 是一个单独的设置,仅在 DEBUG 自定义构建中可用。

关于跟踪

跟踪是日志记录的超集,因为跟踪

  • 包含前面提到的日志记录
  • 添加比 printf 风格日志记录更结构化的跟踪事件
  • 可以与操作系统的更大跟踪生态系统集成,从而
    • ONNX、操作系统级别以及使用 ONNX 的用户模式软件的多个系统跟踪可以结合使用
    • 时间戳具有高分辨率,并与其他跟踪组件保持一致
    • 可以高性能地记录大量事件/秒。
    • 事件不通过 stdout 记录,而是通常通过高性能内存接收器记录
    • 可以在运行时动态启用以调查问题,包括在生产系统中

目前,仅支持 Tracelogging 与 Windows ETW 的结合,尽管 TraceLogging 是跨平台的,并且可以添加对其他操作系统检测系统的支持。

跟踪 - Windows

ONNX Runtime 有 2 个主要的 TraceLogging 提供程序,可以在运行时启用,并可以通过 Windows ETW 捕获

使用 WPR 快速开始跟踪

在 Windows 上,您可以使用 Windows Performance Recorder (WPR) 来捕获跟踪。下面介绍的两个提供程序已在这些 WPR 配置中配置。

wpr -start ort.wprp -start etw_provider.wprp
echo Repro the issue allowing ONNX to run
wpr -stop onnx.etl -compress

ONNXRuntimeTraceLoggingProvider

从 ONNX Runtime 1.17 开始,ONNXRuntimeTraceLoggingProvider 也可以启用。

这将以高性能动态跟踪前面提到的 LOGS() 宏 printf 日志,这些日志之前仅由 log_severity_level 控制。使用此提供程序进行跟踪的用户或开发者将根据他们在运行时提供的 ETW 级别动态设置日志严重性级别。

提供程序名称:ONNXRuntimeTraceLoggingProvider
提供程序 GUID:929DD115-1ECB-4CB5-B060-EBD4983C421D
关键词:Logs (0x2) 关键词,参见 logging.h
级别:1 (CRITICAL ) 到 5 (VERBOSE),参见 TraceLoggingLevel

Microsoft.ML.ONNXRuntime

Microsoft.ML.ONNXRuntime 提供程序提供结构化日志记录。

提供程序名称:Microsoft.ML.ONNXRuntime
提供程序 GUID:3a26b1ff-7484-7484-7484-15261f42614d
关键词:多个,参见 logging.h
级别:1 (CRITICAL ) 到 5 (VERBOSE),参见 TraceLoggingLevel
注意:此提供程序支持 ETW CaptureState (Rundown) 以记录状态,例如在保存跟踪时

ORT 1.17 包含新的事件日志记录会话选项和 EP 提供程序选项

性能分析

Microsoft.ML.ONNXRuntime 也可以输出性能分析事件。相关内容在性能分析中介绍

WinML

WindowsML 有其自己的跟踪提供程序,可以在上述提供程序之外启用

  • Microsoft.Windows.WinML - d766d9ff-112c-4dac-9247-241cf99d123f
  • Microsoft.Windows.AI.MachineLearning - BCAD6AEE-C08D-4F66-828C-4C43461A033D