日誌記錄與追蹤
目錄
開發者日誌記錄
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