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:
- Descargue la herramienta Python de línea de comandos.
- Úsela en el panel de WinML. Para obtener más información, consulte la documentación del panel de WinML.
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.
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.
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:
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
.
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.