日誌記錄與追蹤
內容
開發者日誌記錄
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 記錄,通常透過高效能的記憶體接收器記錄
- 可以在執行時動態啟用,以調查包括生產系統在內的問題
目前僅支援與 Windows ETW 結合使用的 TraceLogging,儘管 TraceLogging 本身是跨平臺的,且未來可以新增對其他作業系統儀表系統的支援。
追蹤 - Windows
有兩個主要的 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
關鍵字: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 提供程式選項。
效能分析(Profiling)
Microsoft.ML.ONNXRuntime 還可以輸出效能分析事件。這部分內容在 效能分析 中有詳細說明。
WinML
WindowsML 擁有自己的追蹤提供程式,可以在上述提供程式之外啟用:
- Microsoft.Windows.WinML - d766d9ff-112c-4dac-9247-241cf99d123f
- Microsoft.Windows.AI.MachineLearning - BCAD6AEE-C08D-4F66-828C-4C43461A033D