WinMLRunner (ВинМЛРаннер)

WinMLRunner — это средство для проверки успешности выполнения модели при оценке с помощью API Машинного обучения Windows. Вы также можете записать время оценки и использование памяти на GPU и ЦП. Модели в формате ONNX или PB можно оценить, где входные и выходные переменные являются тензорами или изображениями. Существует 2 способа использования WinMLRunner:

Запуск модели

Сначала откройте скачанный инструмент Python. Перейдите к папке, содержащей WinMLRunner.exe, и запустите исполняемый файл, как показано ниже. Обязательно замените место установки на соответствующее вашим:

.\WinMLRunner.exe -model SqueezeNet.onnx

Вы также можете запустить папку моделей с помощью следующей команды.

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

Использование хорошей модели

Ниже приведен пример успешного запуска модели. Обратите внимание, как сначала модель загружает и выводит метаданные модели. Затем модель выполняется на ЦП и GPU отдельно, выводя успешное выполнение привязки, успешное вычисление и выходные данные модели.

Пример выходных данных журнала трассировки для выполнения хорошей модели

Запуск неэффективной модели

Ниже приведен пример запуска модели с неправильными параметрами. Обратите внимание на ошибочные выходные данные при оценке на GPU.

Пример выходных данных журнала трассировки для запуска плохой модели

Выбор и оптимизация устройств

По умолчанию модель выполняется на ЦП и GPU отдельно, но можно указать устройство с флагом -CPU или -GPU. Ниже приведен пример запуска модели 3 раза с использованием только ЦП:

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

Данные о производительности журнала

Используйте флаг -perf для записи данных о производительности. Ниже приведен пример запуска всех моделей в папке данных на ЦП и GPU отдельно 3 раза и записи данных о производительности:

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

Измерения производительности

Следующие измерения производительности будут выводиться в командную строку и в .csv-файл для каждой операции загрузки, связывания и оценки.

  • Системное время (мс): прошедшее реальное время между началом и концом операции.
  • Время GPU (мс): время, когда операция передается из ЦП в GPU и выполняется на GPU (примечание. Загрузка() не выполняется на GPU.
  • Время ЦП (мс): время выполнения операции на ЦП.
  • Использование выделенной и общей памяти (МБ): Среднее использование памяти на уровне ядра и пользователя (в МБ) во время вычисления на ЦП или GPU.
  • Рабочая память набора (МБ): Объем памяти DRAM, необходимый процессу ЦПУ в ходе оценки. Выделенная память (МБ) — объем памяти, который использовался в виртуальной памяти выделенного GPU.
  • Общая память (МБ): Объем памяти, используемой в DRAM GPU.

Пример выходных данных производительности:

Пример выходных данных производительности

Тестовые примеры входных данных

Запустите модель на ЦП и GPU отдельно, привязав входные данные к ЦП и GPU отдельно (всего 4 запуска):

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

Запустите модель на ЦП с входными данными, привязанными к 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

Обратите внимание, что -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 работает хорошо только с мусорными данными.
  • Создание ошибочных входных данных в формате серого или YUV в настоящее время не поддерживается. В идеале конвейер для тестовых данных WinMLRunner должен поддерживать все типы входных данных, которые мы можем дать WinML.