Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
WinMLRunner est un outil permettant de tester si un modèle s’exécute correctement lorsqu’il est évalué 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 où les variables d’entrée et de sortie sont des tenseurs ou des images. Il existe 2 façons d’utiliser WinMLRunner :
- Téléchargez l’outil Python en ligne de commande.
- Utiliser 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 l’exécutable comme indiqué ci-dessous. Veillez à remplacer l’emplacement d’installation par ce qui correspond à la 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
Vous trouverez ci-dessous un exemple d’exécution réussie d’un modèle. Notez comment le modèle charge et génère d’abord les métadonnées du modèle. Ensuite, le modèle s’exécute séparément sur le processeur et le GPU, produisant le succès de la liaison, le succès de l’évaluation et le succès 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 de l’appareil
Par défaut, le modèle s’exécute séparément sur l’UC et le GPU, mais vous pouvez spécifier un appareil avec un indicateur -CPU ou -GPU. Voici un exemple d’exécution d’un modèle 3 fois en utilisant uniquement le processeur :
WinMLRunner.exe -model c:\data\concat.onnx -iterations 3 -CPU
Enregistrer les données de performance
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 de données sur le processeur et le GPU séparément 3 fois et la capture des données de performances :
WinMLRunner.exe -folder c:\data iterations 3 -perf
Mesures de performances
Les mesures de performances suivantes seront générées dans la ligne de commande et dans le fichier .csv pour chaque opération de chargement, de liaison et d’évaluation :
- Temps d’horloge murale (ms) : temps réel écoulé entre le début et la fin d’une opération.
- Temps GPU (ms) : heure d’une opération à passer du processeur au GPU et à l’exécution sur le GPU (remarque : Load() n’est pas exécutée sur le GPU).
- Temps processeur (ms) : heure d’exécution d’une opération sur l’UC.
- Utilisation de la mémoire dédiée et partagée (Mo) : Utilisation moyenne du noyau et de la mémoire au niveau de l’utilisateur (en Mo) pendant l’évaluation sur le processeur ou le GPU.
- Mémoire de l'ensemble de travail (Mo) : Quantité de mémoire DRAM requise par le processus sur le processeur pendant l’évaluation. Mémoire dédiée (Mo) : quantité de mémoire utilisée sur la mémoire virtuelle du GPU dédié.
- Mémoire partagée (Mo) : Quantité de mémoire utilisée sur la DRAM par le GPU.
Exemple de résultats de performance :
Tester des exemples d’entrées
Exécutez un modèle sur l’UC et le GPU séparément, et en liant l’entrée à l’UC et au GPU séparément (4 exécutions totales) :
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 apparaît dans le même répertoire que le WinMLRunner.exe.
Lecture des journaux de suivi
À l’aide de la 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 logdump.csv
fichier.
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 sont pas mutuellement exclusifs (c’est-à-dire que vous pouvez combiner autant que vous souhaitez exécuter le modèle avec différentes configurations).
Chargement dynamique de DLL
Si vous souhaitez exécuter WinMLRunner avec une autre version de WinML (par exemple, comparer les performances à 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 trouve pas.
Problèmes connus
- Les entrées sequence/map ne sont pas encore prises en charge (le modèle est simplement ignoré, il ne bloque donc pas d’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 ne pouvons spécifier qu’une 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 correctement avec les données de garbage ;
- 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 indésirables de WinMLRunner doit prendre en charge tous les types d’entrées que nous pouvons donner à WinML.