Udostępnij przez


WinMLRunner

WinMLRunner to narzędzie do testowania, czy model działa pomyślnie podczas oceny przy użyciu interfejsów API uczenia maszynowego systemu Windows. Możesz również rejestrować czas oceny i użycie pamięci na GPU i/lub CPU. Modele w formacie .onnx lub PB można ocenić, gdzie zmienne wejściowe i wyjściowe są tensorami lub obrazami. Istnieją 2 sposoby używania programu WinMLRunner:

Uruchamianie modelu

Najpierw otwórz pobrane narzędzie języka Python. Przejdź do folderu zawierającego WinMLRunner.exei uruchom plik wykonywalny, jak pokazano poniżej. Pamiętaj, aby zastąpić lokalizację instalacji elementem zgodnym z Twoimi:

.\WinMLRunner.exe -model SqueezeNet.onnx

Możesz również uruchomić folder modeli za pomocą polecenia, takiego jak poniżej.

WinMLRunner.exe -folder c:\data -perf -iterations 3 -CPU`\

Uruchamianie dobrego modelu

Poniżej przedstawiono przykład pomyślnego uruchomienia modelu. Zwróć uwagę, jak pierwszy model ładuje i generuje metadane modelu. Następnie model działa oddzielnie na procesorze CPU i procesorze GPU, wyprowadzając wyniki powiązania, powodzenie oceny i dane wyjściowe modelu.

Przykładowe dane wyjściowe dziennika śledzenia na potrzeby uruchamiania dobrego modelu

Uruchamianie złego modelu

Poniżej przedstawiono przykład uruchamiania modelu z nieprawidłowymi parametrami. Zwróć uwagę na dane wyjściowe FAILED podczas oceny na procesorze GPU.

Przykładowe dane wyjściowe dziennika śledzenia na potrzeby uruchamiania nieprawidłowego modelu

Wybór i optymalizacja urządzenia

Domyślnie model działa oddzielnie na procesorze CPU i procesorze GPU, ale można określić urządzenie z flagą -CPU lub -GPU. Oto przykład uruchamiania modelu 3 razy przy użyciu tylko CPU.

WinMLRunner.exe -model c:\data\concat.onnx -iterations 3 -CPU

Rejestrowanie danych wydajności

Użyj flagi -perf, aby przechwycić dane wydajności. Oto przykład uruchamiania wszystkich modeli w folderze danych na procesorze CPU i procesorze GPU oddzielnie 3 razy i przechwytywaniu danych wydajności:

WinMLRunner.exe -folder c:\data iterations 3 -perf

Pomiary wydajności

Następujące pomiary wydajności będą wyjściem w wierszu polecenia oraz w pliku .csv dla każdej operacji ładowania, wiązania i oceny.

  • Czas rzeczywisty (ms): jest czasem rzeczywistym, który upłynął między rozpoczęciem a zakończeniem operacji.
  • Czas procesora GPU (ms): czas przekazywania operacji z procesora CPU do procesora GPU i wykonywania na procesorze GPU (uwaga: Load() nie jest wykonywany na procesorze GPU.
  • Czas procesora CPU (ms): czas wykonania operacji na procesorze CPU.
  • Użycie pamięci dedykowanej i współdzielonej (MB): Średnie użycie jądra i pamięci na poziomie użytkownika (w MB) podczas oceny procesora CPU lub procesora GPU.
  • Pamięć zestawu roboczego (MB): Ilość pamięci DRAM wymaganej podczas oceny przez proces procesora CPU. Dedykowana pamięć (MB) — ilość pamięci używanej na pamięci VRAM dedykowanego procesora GPU.
  • Pamięć współdzielona (MB): Ilość pamięci używanej na pamięci DRAM przez procesor GPU.

Przykładowe dane wyjściowe wydajności:

Przykładowe dane wyjściowe wydajności

Testowanie przykładowych danych wejściowych

Uruchom model oddzielnie na CPU i GPU, a następnie powiąż wejście z CPU i GPU oddzielnie (w sumie 4 uruchomienia):

WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPU -CPUBoundInput -GPUBoundInput

Uruchom model na CPU z danymi wejściowymi powiązanymi z GPU, załadowanymi w formacie RGB.

WinMLRunner.exe -model c:\data\SqueezeNet.onnx -CPU -GPUBoundInput -RGB

Przechwytywanie dzienników śledzenia

Jeśli chcesz przechwycić dzienniki śledzenia za pomocą narzędzia, możesz użyć poleceń narzędzia logman w połączeniu z flagą debugowania:

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

Plik winmllog.etl zostanie wyświetlony w tym samym katalogu co WinMLRunner.exe.

Odczytywanie dzienników śledzenia

Za pomocą traceprt.exeuruchom następujące polecenie w wierszu polecenia.

tracerpt.exe winmllog.etl -o logdump.csv -of CSV

Następnie otwórz logdump.csv plik.

Alternatywnie możesz użyć Analizatora wydajności systemu Windows (z poziomu programu Visual Studio). Uruchom analizator wydajności systemu Windows i otwórz plik winmllog.etl.

Przykładowe dane wyjściowe dziennika śledzenia przy użyciu analizatora wydajności systemu Windows

Należy pamiętać, że -CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput, -GPUBoundInput nie wykluczają się wzajemnie (tj. można połączyć tyle, ile chcesz uruchomić model z różnymi konfiguracjami).

Dynamiczne ładowanie bibliotek DLL

Jeśli chcesz uruchomić program WinMLRunner z inną wersją winML (np. porównanie wydajności ze starszą wersją lub przetestowanie nowszej wersji), wystarczy umieścić pliki windows.ai.machinelearning.dll i directml.dll w tym samym folderze co WinMLRunner.exe. Program WinMLRunner najpierw wyszuka te biblioteki DLL i wróci do folderu C:/Windows/System32, jeśli ich nie znajdzie.

Znane problemy

  • Dane wejściowe dla sekwencji lub mapy nie są jeszcze obsługiwane (model jest po prostu pomijany, aby nie blokować innych modeli w folderze);
  • Nie można niezawodnie uruchomić wielu modeli z argumentem -folder z rzeczywistymi danymi. Ponieważ możemy określić tylko 1 dane wejściowe, rozmiar danych wejściowych będzie niezgodny z większością modeli. W tej chwili użycie argumentu -folder działa dobrze tylko w przypadku danych bezużytecznych;
  • Generowanie wejściowych danych śmieciowych jako Gray lub YUV nie jest obecnie obsługiwane. W idealnym przypadku potok danych bezużytecznych usługi WinMLRunner powinien obsługiwać wszystkie typy danych wejściowych, które możemy dać winml.