Partager via


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 :

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.

Sample trace log output for running a good model

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.

Sample trace log output for running a bad model

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 :

Sample performance output

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.

Sample the trace log output using Windows Performance Analyzer

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.