Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
WinMLRunner ist ein Tool, mit dem getestet werden kann, ob ein Modell erfolgreich ausgeführt wird, wenn es mit den Windows ML-APIs ausgewertet wird. Sie können auch die Evaluierungszeit und die Speicherauslastung auf der GPU und/oder CPU erfassen. Modelle im .onnx- oder .pb-Format können ausgewertet werden, bei denen die Ein- und Ausgabevariablen Tensoren oder Bilder sind. Es gibt 2 Möglichkeiten, wie Sie WinMLRunner verwenden können:
- Laden Sie das Befehlszeilen-Python-Tool herunter.
- Verwendung innerhalb des WinML-Dashboards. Weitere Informationen finden Sie in der Dokumentation zum WinML-Dashboard
Ausführen eines Modells
Öffnen Sie zunächst das heruntergeladene Python-Tool. Navigieren Sie zu dem Ordner, der WinMLRunner.exeenthält, und führen Sie die ausführbare Datei wie unten gezeigt aus. Stellen Sie sicher, dass Sie den Installationsort durch einen Speicherort ersetzen, der Ihrem entspricht:
.\WinMLRunner.exe -model SqueezeNet.onnx
Sie können auch einen Ordner mit Modellen mit einem Befehl wie dem folgenden ausführen.
WinMLRunner.exe -folder c:\data -perf -iterations 3 -CPU`\
Ausführen eines guten Modells
Im Folgenden finden Sie ein Beispiel für das erfolgreiche Ausführen eines Modells. Beachten Sie, wie das Modell zuerst Modellmetadaten lädt und ausgibt. Anschließend wird das Modell separat auf der CPU und der GPU ausgeführt, wobei der Bindungserfolg, der Auswertungserfolg und die Modellausgabe ausgegeben werden.
Ausführen eines fehlerhaften Modells
Im Folgenden finden Sie ein Beispiel für das Ausführen eines Modells mit falschen Parametern. Beachten Sie die FAILED-Ausgabe bei der Auswertung auf der GPU.
Geräteauswahl und -optimierung
Standardmäßig wird das Modell auf CPU und GPU separat ausgeführt, Sie können jedoch ein Gerät mit einem -CPU- oder -GPU Flag angeben. Hier ist ein Beispiel für die 3-malige Ausführung eines Modells nur mit der CPU:
WinMLRunner.exe -model c:\data\concat.onnx -iterations 3 -CPU
Protokollieren von Leistungsdaten
Verwenden Sie das Flag -perf, um Leistungsdaten zu erfassen. Hier ist ein Beispiel für das 3-malige Ausführen aller Modelle im Datenordner auf der CPU und GPU separat und das Erfassen von Leistungsdaten:
WinMLRunner.exe -folder c:\data iterations 3 -perf
Leistungsmessungen
Die folgenden Leistungsmessungen werden für jeden Lade-, Bindungs- und Auswertungsvorgang in die Befehlszeile und .csv Datei ausgegeben:
- Wall-Clock-Zeit (ms): Die verstrichene Echtzeit zwischen dem Beginn und dem Ende eines Vorgangs.
- GPU-Zeit (ms): Zeit für eine Operation, die von der CPU an die GPU übergeben und auf der GPU ausgeführt wird (Hinweis: Load() wird nicht auf der GPU ausgeführt).
- CPU-Zeit (ms): Zeit, die benötigt wird, bis ein Vorgang auf der CPU ausgeführt wird.
- Auslastung des dedizierten und gemeinsam genutzten Speichers (MB): Durchschnittliche Speicherauslastung auf Kernel- und Benutzerebene (in MB) während der Auswertung auf der CPU oder GPU.
- Arbeitsspeicher (MB): Die Menge an DRAM-Speicher, die der Prozess auf der CPU während der Evaluierung benötigt hat. Dedizierter Arbeitsspeicher (MB) - Die Menge an Arbeitsspeicher, die auf dem VRAM der dedizierten GPU verwendet wurde.
- Gemeinsamer Speicher (MB): Die Menge an Arbeitsspeicher, die von der GPU auf dem DRAM verwendet wurde.
Beispiel für die Leistungsausgabe:
Testmuster-Eingaben
Führen Sie ein Modell separat auf der CPU und GPU aus, und binden Sie die Eingabe separat an die CPU und die GPU (insgesamt 4 Durchläufe):
WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPU -CPUBoundInput -GPUBoundInput
Führen Sie ein Modell auf der CPU aus, wobei die Eingabe an die GPU gebunden und als RGB-Bild geladen wird:
WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPUBoundInput -RGB
Erfassen von Ablaufverfolgungsprotokollen
Wenn Sie Ablaufverfolgungsprotokolle mit dem Tool erfassen möchten, können Sie logman-Befehle in Verbindung mit dem debug-Flag verwenden:
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
Die Datei winmllog.etl wird im selben Verzeichnis wie die WinMLRunner.exeangezeigt.
Lesen der Trace-Protokolle
Führen Sie mit dem traceprt.exeden folgenden Befehl über die Befehlszeile aus.
tracerpt.exe winmllog.etl -o logdump.csv -of CSV
Öffnen Sie als Nächstes die logdump.csv
Datei.
Alternativ können Sie die Windows-Leistungsanalyse (aus Visual Studio) verwenden. Starten Sie die Windows-Leistungsanalyse, und öffnen Sie winmllog.etl
.
Beachten Sie, dass -CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput -GPUBoundInput sich nicht gegenseitig ausschließen (d. h. Sie können so viele kombinieren, wie Sie möchten, um das Modell mit unterschiedlichen Konfigurationen auszuführen).
Dynamisches Laden von DLL
Wenn Sie WinMLRunner mit einer anderen Version von WinML ausführen möchten (z.B. um die Leistung mit einer älteren Version zu vergleichen oder eine neuere Version zu testen), legen Sie einfach die windows.ai.machinelearning.dll und directml.dll Dateien im selben Ordner wie WinMLRunner.exeab. WinMLRunner sucht zuerst nach diesen DLLs und greift auf C:/Windows/System32 zurück, wenn sie nicht gefunden werden.
Bekannte Probleme
- Sequenz-/Map-Eingaben werden noch nicht unterstützt (das Modell wird einfach übersprungen, so dass es keine anderen Modelle in einem Ordner blockiert);
- Wir können nicht zuverlässig mehrere Modelle mit dem Argument -folder mit echten Daten ausführen lassen. Da wir nur 1 Eingabe angeben können, würde die Größe der Eingabe nicht mit den meisten Modellen übereinstimmen. Im Moment funktioniert die Verwendung des Arguments -folder nur mit Garbage-Daten gut.
- Das Generieren von Garbage Input als Grau oder YUV wird derzeit nicht unterstützt. Im Idealfall sollte die Garbage-Data-Pipeline von WinMLRunner alle Eingabetypen unterstützen, die wir an winml übergeben können.