性能分析工具

目录

代码内性能分析

onnxruntime_perf_test.exe 工具(可从构建发布中获取)可用于测试各种配置。请使用 onnxruntime_perf_test.exe -h 查找使用说明。perf_view 工具也可用于在浏览器中将统计信息呈现为摘要视图。

您可以在代码中启用 ONNX Runtime 延迟性能分析

import onnxruntime as rt

sess_options = rt.SessionOptions()
sess_options.enable_profiling = True

如果您正在使用 onnxruntime_perf_test.exe 工具,您可以添加 -p [profile_file] 来启用性能分析。

在这两种情况下,您都将获得一个 JSON 文件,其中包含详细的性能数据(线程、每个操作符的延迟等)。此文件是标准的性能追踪文件,您可以使用多种工具打开它,以便以用户友好的方式查看。

  • (Windows)使用 WPA GUI 并通过 Perfetto OSS 插件打开追踪文件 - Microsoft-Performance-Tools-Linux-Android
  • Perfetto UI - Chrome Tracing UI 的继任者
  • chrome://tracing
    • 打开基于 Chromium 的浏览器,例如 Edge 或 Chrome
    • 在地址栏中输入 chrome://tracing
    • 加载生成的 JSON 文件

执行提供者 (EP) 性能分析

从 ONNX 1.17 开始,增加了对 EP 或神经网络处理单元 (NPU) 的性能分析支持,前提是该 EP 在其 SDK 中支持性能分析。

Qualcomm QNN EP

QNN EP 文档中所述,支持性能分析。

跨平台 CSV 追踪

Qualcomm AI Engine Direct SDK (QNN SDK) 支持性能分析。如果开发者直接在 ONNX 之外使用 QNN SDK,QNN 会以文本格式输出到 CSV。为了实现等效功能,ONNX 模仿了这种支持并输出相同的 CSV 格式。

如果提供了 profiling_level,ONNX 将在当前工作目录中附加一个 qnn-profiling-data.csv 文件

TraceLogging ETW (Windows) 性能分析

日志记录中所述,ONNX 支持动态启用 ETW 追踪提供者。具体设置如下。如果 TraceLogging 提供者已启用且提供了 profiling_level,则 CSV 支持将自动禁用。

  • 提供者名称:Microsoft.ML.ONNXRuntime
  • 提供者 GUID:3a26b1ff-7484-7484-7484-15261f42614d
  • 关键字:Profiling = 0x100,参见 logging.h
  • 级别
    • 5 (VERBOSE) = profiling_level=basic(详细信息丰富,无性能损失)
    • 大于 5 = profiling_level=detailed(记录每个操作,会对推理性能造成影响)
  • 事件:QNNProfilingEvent

GPU 性能分析

要分析 CUDA 内核,请将 cupti 库添加到您的 PATH 中,并使用通过 --enable_cuda_profiling 从源代码构建的 onnxruntime 二进制文件。要分析 ROCm 内核,请将 roctracer 库添加到您的 PATH 中,并使用通过 --enable_rocm_profiling 从源代码构建的 onnxruntime 二进制文件。

来自设备的性能数据将随后附加到来自主机的数据。例如:

{"cat":"Node", "name":"Add_1234", "dur":17, ...}
{"cat":"Kernel", "name":"ort_add_cuda_kernel", dur:33, ...}

在这里,主机上的“Add”操作符在设备上启动了一个名为“ort_add_cuda_kernel”的 CUDA 内核,该内核持续了 33 微秒。如果一个操作符在执行期间调用了多个内核,这些内核的性能数据将全部按照调用顺序列出。

{"cat":"Node", "name":<name of the node>, ...}
{"cat":"Kernel", "name":<name of the kernel called first>, ...}
{"cat":"Kernel", "name":<name of the kernel called next>, ...}