日志记录与追踪
目录
开发者日志记录
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
有 2 个主要的 ONNX Runtime TraceLogging 提供者可以在运行时启用,并可以通过 Windows ETW 捕获
使用 WPR 快速开始追踪
在 Windows 上,您可以使用 Windows 性能记录器 (WPR) 来捕获追踪。下面介绍的两个提供者已经配置在这些 WPR 配置文件中。
- 下载 ort.wprp 和 etw_provider.wprp(这些文件也可以稍后合并)
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
关键词:日志 (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