Compartir a través de


WinMLRunner

WinMLRunner es una herramienta que se usa para probar si un modelo se ejecuta correctamente cuando se evalúa con las API de Windows ML. También puede capturar el tiempo de evaluación y el uso de memoria en la GPU o CPU. Los modelos en formato .onnx o .pb se pueden evaluar donde las variables de entrada y salida son tensores o imágenes. Hay dos maneras de usar WinMLRunner:

Ejecución de un modelo

En primer lugar, abra la herramienta Python descargada. Vaya a la carpeta que contiene WinMLRunner.exe y ejecute el archivo tal como se muestra a continuación. Asegúrese de reemplazar la ubicación de instalación para la que coincida con la suya:

.\WinMLRunner.exe -model SqueezeNet.onnx

También puede ejecutar una carpeta de modelos, con un comando como el siguiente.

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

Ejecución de un buen modelo

A continuación se muestra un ejemplo de cómo ejecutar un modelo correctamente. Observe cómo primero el modelo carga y genera los metadatos de modelo. A continuación, el modelo se ejecuta en la CPU y la GPU por separado, lo que genera el enlace correcto, el éxito de la evaluación y la salida del modelo.

Sample trace log output for running a good model

Ejecución de un modelo que no es bueno

A continuación, se muestra un ejemplo de ejecución de un modelo con parámetros incorrectos. Observe la salida ERRÓNEA al evaluarla en la GPU.

Sample trace log output for running a bad model

Selección y optimización de dispositivos

De forma predeterminada, el modelo se ejecuta en la CPU y la GPU por separado, pero puede especificar un dispositivo con una marca -CPU o -GPU. A continuación, se muestra un ejemplo de cómo se ejecuta un modelo tres veces usando únicamente la CPU:

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

Registro de los datos de rendimiento

Use la marca -perf para capturar los datos de rendimiento. Este es un ejemplo de cómo se ejecutan tres veces todos los modelos de la carpeta de datos en la CPU y GPU por separado, y la captura de datos de rendimiento:

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

Medidas de rendimiento

Las siguientes medidas de rendimiento se mostrarán en la línea de comandos y el archivo .csv para cada operación de carga, enlace y evaluación:

  • Tiempo del reloj (ms): tiempo real transcurrido entre el principio y el final de una operación.
  • Tiempo de GPU (ms): tiempo para que una operación pase de la CPU a la GPU y se ejecute en la GPU (nota: Load() no se ejecuta en la GPU).
  • Tiempo de CPU (ms): tiempo de ejecución de una operación en la CPU.
  • Uso de la memoria dedicada y compartida (MB): uso medio de la memoria de nivel de usuario y el kernel (en MB) durante la evaluación en la CPU o la GPU.
  • Memoria de espacio de trabajo (MB): cantidad de memoria DRAM que el proceso en la CPU requerirá durante la evaluación. Memoria dedicada (MB): cantidad de memoria que se usó en la VRAM de la GPU dedicada.
  • Memoria compartida (MB): cantidad de memoria que la GPU usó en la VRAM.

Salida de rendimiento de ejemplo:

Sample performance output

Prueba de entradas de ejemplo

Ejecute un modelo en la CPU y la GPU por separado, y enlace la entrada a la CPU y la GPU por separado (4 ejecuciones en total):

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

Ejecute un modelo en la CPU con la entrada enlazada a la GPU y cargada como una imagen RGB:

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

Captura de registros de seguimiento

Si quiere capturar registros de seguimiento mediante la herramienta, puede usar los comandos logman junto con la marca de depuración:

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

El archivo winmllog.etl aparecerá en el mismo directorio que WinMLRunner.exe.

Lectura de los registros de seguimiento

Con el archivo traceprt.exe, ejecute el siguiente comando desde la línea de comandos.

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

A continuación, abra el archivo logdump.csv.

Como alternativa, puede usar Windows Performance Analyzer (desde Visual Studio). Inicie Windows Performance Analyzer y abra winmllog.etl.

Sample the trace log output using Windows Performance Analyzer

Tenga en cuenta que -CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput, -GPUBoundInput no son mutuamente excluyentes (es decir, puede combinar tantas opciones como desee para ejecutar el modelo con distintas configuraciones).

Carga dinámica de DLL

Si quiere ejecutar WinMLRunner con otra versión de WinML (por ejemplo, para comparar el rendimiento con una versión anterior o probar una versión más reciente), simplemente coloque los archivos windows.ai.machinelearning.dll y directml.dll en la misma carpeta que WinMLRunner.exe. WinMLRunner buscará primero estos archivos DLL y volverá a C:/Windows/System32 si no los encuentra.

Problemas conocidos

  • Todavía no se admiten entradas de secuencia o asignación (el modelo simplemente se omite, por lo que no bloquea otros modelos en una carpeta).
  • No se pueden ejecutar varios modelos de forma confiable con el argumento -folder con datos reales. Puesto que solo se puede especificar una entrada, el tamaño de esta no coincide con la mayoría de los modelos. En este momento, el uso del argumento -folder solo funciona bien con los datos de elementos no utilizados.
  • Asimismo, no se admite la generación de entrada de elementos no utilizados como Gray o YUV. Idealmente, la canalización de datos de elementos no utilizados de WinMLRunner debe admitir todos los tipos de entrada que se puedan proporcionar a winml.