性能分析工具

目录

代码内性能分析

onnxruntime_perf_test.exe 工具(可从 build drop 获取)可用于测试各种旋钮。请使用 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 在其 SDK 中支持分析,则已添加对 EP 或神经处理单元 (NPU) 进行分析的支持

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,并使用从源代码构建的 onnxruntime 二进制文件,并带上 --enable_cuda_profiling。要分析 ROCm 内核,请将 roctracer 库添加到您的 PATH,并使用从源代码构建的 onnxruntime 二进制文件,并带上 --enable_rocm_profiling

来自设备的性能数字将附加到来自主机的性能数字。例如

{"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>, ...}