日志记录 & 追踪
目录
开发者日志记录
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 TraceLogging 提供程序可以在运行时启用,可以使用 Windows ETW 捕获它们
使用 WPR 快速开始追踪
在 Windows 上,您可以使用 Windows Performance Recorder (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
关键字: 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