WinMLRunner
WinMLRunner est un outil qui permet de tester si un modèle s’exécute correctement lors de l’évaluation avec les API Windows ML. Vous pouvez également capturer le temps d’évaluation et l’utilisation de la mémoire sur le GPU et/ou l’UC. Les modèles au format .onnx ou .pb peuvent être évalués là où les variables d’entrée et de sortie sont des tenseurs ou des images. Vous pouvez utiliser WinMLRunner de deux façons :
- Téléchargez l’outil en ligne de commande Python.
- Utilisez-le dans le Tableau de bord WinML. Pour plus d’informations, consultez la documentation du Tableau de bord WinML
Exécuter un modèle
Tout d’abord, ouvrez l’outil Python téléchargé. Accédez au dossier contenant WinMLRunner.exe, puis exécutez le fichier exécutable comme indiqué ci-dessous. Veillez à remplacer l’emplacement d’installation par le vôtre :
.\WinMLRunner.exe -model SqueezeNet.onnx
Vous pouvez également exécuter un dossier de modèles, avec une commande telle que la suivante.
WinMLRunner.exe -folder c:\data -perf -iterations 3 -CPU`\
Exécution d’un bon modèle
Voici un exemple d’exécution réussie d’un modèle. Notez la manière dont le modèle charge et génère les métadonnées du modèle. Ensuite, le modèle s’exécute sur l’UC et le GPU séparément, ce qui a pour résultat la réussite de la liaison, la réussite de l’évaluation et la sortie du modèle.
Exécution d’un modèle incorrect
Voici un exemple d’exécution d’un modèle avec des paramètres incorrects. Notez la sortie Échec lors de l’évaluation sur le GPU.
Sélection et optimisation des appareils
Par défaut, le modèle s’exécute sur l’UC et le GPU séparément, mais vous pouvez spécifier un appareil avec un indicateur -CPU ou -GPU. Voici un exemple d’exécution d’un modèle à 3 reprises à l’aide de l’UC uniquement :
WinMLRunner.exe -model c:\data\concat.onnx -iterations 3 -CPU
Données de performances des journaux
Utilisez l’indicateur -perf pour capturer les données de performances. Voici un exemple d’exécution de tous les modèles dans le dossier Data de l’UC et du GPU séparément à 3 reprises et de capture des données de performances :
WinMLRunner.exe -folder c:\data iterations 3 -perf
Mesures des performances
Les mesures de performances suivantes sont générées dans la ligne de commande et le fichier .csv pour chaque opération de chargement, de liaison et d’évaluation :
- Temps horloge (ms) : temps réel écoulé entre le début et la fin d’une opération.
- Temps du GPU (ms) : temps pendant lequel une opération doit être passée de l’UC au GPU et exécutée sur le GPU (remarque : Load() n’est pas exécuté sur le GPU).
- Temps processeur (ms) : temps nécessaire à l’exécution d’une opération sur l’UC.
- Utilisation de la mémoire dédiée et partagée (Mo) : utilisation moyenne de la mémoire au niveau du noyau et de l’utilisateur (en Mo) au cours de l’évaluation sur l’UC ou le GPU.
- Mémoire de la plage de travail (Mo) : quantité de mémoire DRAM que le processus sur l’UC requiert pendant l’évaluation. Mémoire dédiée (Mo) : quantité de mémoire utilisée sur la VRAM du GPU dédié.
- Mémoire partagée (Mo) : quantité de mémoire utilisée sur la mémoire DRAM par le GPU.
Exemple de sortie de performances :
Tester les entrées de l’exemple
Exécutez un modèle sur l’UC et le GPU séparément, et en liant séparément l’entrée à l’UC et au GPU (4 exécutions au total) :
WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPU -CPUBoundInput -GPUBoundInput
Exécutez un modèle sur l’UC avec l’entrée liée au GPU et chargée en tant qu’image RVB :
WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPUBoundInput -RGB
Capture des journaux de suivi
Si vous souhaitez capturer des journaux de suivi à l’aide de l’outil, vous pouvez utiliser les commandes logman avec l’indicateur de débogage :
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
Le fichier winmllog.etl s’affiche dans le même répertoire que WinMLRunner.exe.
Lecture des journaux de suivi
À l’aide de traceprt.exe, exécutez la commande suivante à partir de la ligne de commande.
tracerpt.exe winmllog.etl -o logdump.csv -of CSV
Ensuite, ouvrez le fichier logdump.csv
.
Vous pouvez également utiliser l’Analyseur de performances Windows (à partir de Visual Studio). Lancez l’Analyseur de performances Windows, puis ouvrez winmllog.etl
.
Notez que -CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput, -GPUBoundInput ne s’excluent pas mutuellement (c’est-à-dire que vous pouvez en combiner autant que vous le souhaitez pour exécuter le modèle avec différentes configurations).
Chargement des DLL dynamiques
Si vous souhaitez exécuter WinMLRunner avec une autre version de WinML (par exemple, comparer les performances avec une version antérieure ou tester une version plus récente), placez simplement les fichiers windows.ai.machinelearning.dll et directml.dll dans le même dossier que WinMLRunner.exe. WinMLRunner recherche d’abord ces dll et revient à C:/Windows/System32 s’il ne les détecte pas.
Problèmes connus
- Les entrées de séquence/mappage ne sont pas encore prises en charge (le modèle est simplement ignoré, de sorte qu’il ne bloque pas les autres modèles dans un dossier);
- Nous ne pouvons pas exécuter de manière fiable plusieurs modèles avec l’argument -folder avec des données réelles. Étant donné que nous pouvons uniquement spécifier 1 entrée, la taille de l’entrée ne correspondrait pas à la plupart des modèles. À l’heure actuelle, l’utilisation de l’argument -folder fonctionne uniquement avec les données Garbage collection.
- La génération de l’entrée Garbage en gris ou YUV n’est pas prise en charge actuellement. Dans l’idéal, le pipeline de données Garbage de WinMLRunner doit prendre en charge tous les types d’entrées que nous pouvons attribuer à winml.