Поделиться через


WinMLRunner

Средство WinMLRunner позволяет убедиться, что модель успешно выполняется при оценке через API-интерфейсы машинного обучения. Кроме того, вы можете получить сведения о времени выполнения и использовании памяти, времени ЦП и (или) GPU. Модели в форматах .onnx или .pb можно оценивать с тензорами или изображениями в качестве входных и выходных переменных. Есть два способа использовать WinMLRunner:

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

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

.\WinMLRunner.exe -model SqueezeNet.onnx

Кроме того, вы можете запустить сразу несколько моделей в одной папке с помощью следующей команды.

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

Выполнение хорошей модели

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

Sample trace log output for running a good model

Выполнение плохой модели

Ниже приведен пример выполнения модели с неверными параметрами. Обратите внимание на сообщение FAILED (Сбой) при оценке модели на GPU.

Sample trace log output for running a bad model

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

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

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

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

Укажите флаг -perf, чтобы собирать данные о производительности. В следующем примере выполняются все модели в указанной папке данных, по три раза отдельно в ЦП и GPU, а также собираются данные о производительности.

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

Показатели производительности

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

  • Wall-clock time (ms) (Время по часам в мс) — прошедшее время с начала до завершения операции.
  • GPU time (ms) (Время GPU в мс) — время, затраченное на передачу операции из ЦП в GPU и ее выполнение в GPU (примечание: операция Load() не передается на выполнение в GPU).
  • CPU time (ms) (Время ЦП в мс) — время выполнения операции в ЦП.
  • Dedicated and Shared Memory Usage (MB) (Использование общей и выделенной памяти в МБ) — средний объем использования памяти на уровне пользователя и ядра в процессе оценки модели в ЦП и GPU.
  • Working Set Memory (MB) (Память рабочего набора в МБ) — объем памяти DRAM, который потребовался процессу в ЦП при выполнении оценки. Dedicated Memory (MB) (Выделенная память в МБ) — объем памяти, который использовался из VRAM выделенного GPU.
  • Shared Memory (MB) (Общая память в МБ) — объем памяти, который использовался из DRAM графическим процессором (GPU).

Пример сведений о производительности

Sample performance output

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

Отдельное выполнение модели в ЦП и 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 в сочетании с флагом debug:

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.

Sample the trace log output using Windows Performance Analyzer

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