性能分析工具
目录
代码内性能分析
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>, ...}