WinMLRunner
WinMLRunner 是一种工具,用于在使用 Windows ML API 评估模型时测试该模型是否成功运行。 还可以捕获 GPU 和/或 CPU 上的评估时间和内存使用量。 可以评估 .onnx 或 .pb 格式的模型,其中输入变量和输出变量为张量或图像。 可以通过两种方法使用 WinMLRunner:
- 下载 Python 命令行工具。
- 在 WinML 仪表板内使用。 有关详细信息,请参阅 WinML 仪表板文档
运行模型
首先,打开下载的 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 上分别运行数据文件夹中的所有模型 3 次并捕获性能数据的示例:
WinMLRunner.exe -folder c:\data iterations 3 -perf
性能度量值
每个加载、绑定和评估操作都会输出以下性能度值到命令行和 .csv 文件:
- 时钟时间 (ms):操作开始和结束之间经过的实际时间。
- 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 Performance Analyzer(来自 Visual Studio)。 启动 Windows Performance Analyzer,然后打开 winmllog.etl
。
请注意,-CPU、-GPU、-GPUHighPerformance、-GPUMinPower -BGR、-RGB、-tensor、-CPUBoundInput、-GPUBoundInput 并不会相互冲突(也就是说,可以任意搭配使用来运行具有不同配置的模型)。
动态 DLL 加载
如果要将 WinMLRunner 与另一个版本的 WinML 一起运行(例如与旧版本比较性能或测试新版本),只需将 windows.ai.machinelearning.dll 和 directml.dll 文件与 WinMLRunner.exe 放在同一文件夹中。 WinMLRunner 将首先查找这些 DLL,如果找不到它们,则回退到 C:/Windows/System32。
已知问题
- 尚不支持序列/映射输入(只是跳过模型,它不会阻止文件夹中的其他模型);
- 我们无法可靠地使用 -folder 参数运行多个包含真实数据的模型。 由于只能指定 1 个输入,因此输入的大小与大多数模型都不匹配。 目前,-folder 参数仅适用于垃圾数据;
- 当前不支持将垃圾输入生成为 Gray 或 YUV。 理想情况下,WinMLRunner 的垃圾数据管道应该支持可提供给 winml 的所有输入类型。