WinMLRunner

WinMLRunner 是一种工具,用于测试使用 Windows ML API 评估模型是否成功运行。 还可以捕获 GPU 和/或 CPU 上的评估时间和内存使用情况。 可以计算 .onnx 或 .pb 格式的模型,其中输入和输出变量是张量或图像。 有 2 种方法可以使用 WinMLRunner:

运行模型

首先,打开下载的 Python 工具。 导航到包含 WinMLRunner.exe的文件夹,并运行可执行文件,如下所示。 请确保将安装位置替换为与您的安装位置一致的位置:

.\WinMLRunner.exe -model SqueezeNet.onnx

还可以使用如下命令运行模型文件夹。

WinMLRunner.exe -folder c:\data -perf -iterations 3 -CPU`\

如何有效运行模型

下面是成功运行模型的示例。 请注意模型首先如何加载和输出模型元数据。 然后模型单独在 CPU 和 GPU 上运行,输出绑定成功、评估成功和模型输出。

用于运行良好模型的示例跟踪日志输出

运行错误的模型

下面是运行具有不正确参数的模型的一个示例。 请注意在 GPU 上评估时失败的输出。

运行错误的模型的示例跟踪日志输出

设备选择和优化

默认情况下,模型单独在 CPU 和 GPU 上运行,但可以使用 -CPU 或 -GPU 标志指定设备。 下面是仅使用 CPU 运行模型 3 次的示例:

WinMLRunner.exe -model c:\data\concat.onnx -iterations 3 -CPU

日志性能数据

使用 -perf 标志捕获性能数据。 下面是在 CPU 和 GPU 上单独运行数据文件夹中的所有模型并捕获性能数据的示例:

WinMLRunner.exe -folder c:\data iterations 3 -perf

性能度量

每个加载、绑定和评估操作都会输出以下性能度值到命令行和 .csv 文件:

  • 时钟时间(毫秒): 指的是从操作开始到结束之间经过的实时时间。
  • GPU 时间(ms): 将作从 CPU 传递到 GPU 并在 GPU 上执行的时间(注意:Load() 未在 GPU 上执行)。
  • CPU 时间(ms): 操作在 CPU 上执行的时间。
  • 专用和共享内存使用情况(MB): CPU 或 GPU 评估期间的平均内核和用户级内存使用率(以 MB 为单位)。
  • 工作集内存(MB): 评估期间所需的 CPU 上进程的 DRAM 内存量。 专用内存 (MB) - 专用 GPU 的 VRAM 上使用的内存量。
  • 共享内存(MB): GPU 在 DRAM 上使用的内存量。

示例性能输出:

示例性能输出

测试输入示例

单独在 CPU 和 GPU 上运行模型,并将输入单独绑定到 CPU 和 GPU(总共 4 次运行):

WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPU -CPUBoundInput -GPUBoundInput

在 CPU 上运行模型,并将输入绑定到 GPU 并作为 RGB 图像加载:

WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPUBoundInput -RGB

捕获跟踪日志

如果要使用该工具捕获跟踪日志,可以将 logman 命令与调试标志结合使用:

logman start winml -ets -o winmllog.etl -nb 128 640 -bs 128logman update trace  winml -p {BCAD6AEE-C08D-4F66-828C-4C43461A033D} 0xffffffffffffffff 0xff -ets         WinMLRunner.exe -model C:\Repos\Windows-Machine-Learning\SharedContent\models\SqueezeNet.onnx -debuglogman stop winml -ets

winmllog.etl 文件将显示在与 WinMLRunner.exe相同的目录中。

读取跟踪日志

使用 traceprt.exe,从命令行运行以下命令。

tracerpt.exe winmllog.etl -o logdump.csv -of CSV

接下来,打开 logdump.csv 该文件。

或者,可以使用 Windows 性能分析器(从 Visual Studio)。 启动 Windows 性能分析器并打开 winmllog.etl

使用 Windows Performance Analyzer 采集跟踪日志输出

请注意,-CPU、-GPU、-GPUHighPerformance、-GPUMinPower -BGR、-RGB、-tensor、-CPUBoundInput、-GPUBoundInput 不是相互排斥的(即,可以根据需要将任意数量的配置选项组合在一起以运行模型)。

动态 DLL 加载

如果要使用另一版本的 WinML 运行 WinMLRunner(例如,将性能与较旧版本进行比较或测试较新版本),只需将 windows.ai.machinelearning.dll 和 directml.dll 文件放在与 WinMLRunner.exe相同的文件夹中。 WinMLRunner 将首先查找这些 DLL,如果找不到这些 DLL,请回退到 C:/Windows/System32。

已知问题

  • 尚不支持序列/映射输入(跳过该模型,因此不会阻碍文件夹中的其他模型);
  • 我们无法可靠地运行具有具有实际数据的 -folder 参数的多个模型。 由于只能指定 1 个输入,因此输入的大小与大多数模型不匹配。 现在,使用 -folder 参数仅适用于垃圾数据;
  • 当前不支持将垃圾输入生成为 Gray 或 YUV。 理想情况下,WinMLRunner 的垃圾数据管道应支持我们可以提供给 winml 的所有输入类型。