性能分析工具

目录

代码内性能分析

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 的 SDK 支持分析,则已添加支持来分析 EP 或神经处理单元 (NPU)。

高通 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>, ...}