WinMLRunner 是一种工具,用于测试使用 Windows ML API 评估模型是否成功运行。 还可以捕获 GPU 和/或 CPU 上的评估时间和内存使用情况。 可以计算 .onnx 或 .pb 格式的模型,其中输入和输出变量是张量或图像。 有 2 种方法可以使用 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 上单独运行数据文件夹中的所有模型并捕获性能数据的示例:
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。
请注意,-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 的所有输入类型。