WinMLRunner

WinMLRunner je nástroj k otestování úspěšného spuštění modelu při vyhodnocení pomocí rozhraní API systému Windows ML. Můžete také zaznamenat čas vyhodnocení a využití paměti v GPU nebo procesoru. Modely ve formátu .onnx nebo .pb lze vyhodnotit, kde vstupní a výstupní proměnné jsou tensory nebo obrázky. WinMLRunner můžete použít 2 způsoby:

Spuštění modelu

Nejprve otevřete stažený nástroj Python. Přejděte do složky obsahující WinMLRunner.exea spusťte spustitelný soubor, jak je znázorněno níže. Nezapomeňte nahradit umístění instalace tím, co odpovídá vašemu:

.\WinMLRunner.exe -model SqueezeNet.onnx

Můžete také spustit složku modelů pomocí příkazu, jako je například následující.

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

Spuštění dobrého modelu

Níže je příklad úspěšného spuštění modelu. Všimněte si, jak se jako první model načte a vypíše metadata modelu. Pak se model spustí na procesoru a GPU samostatně, vypíše úspěch vazby, úspěch vyhodnocení a výstup modelu.

Ukázkový výstup protokolu trasování pro spuštění vhodného modelu

Spuštění špatného modelu

Níže je příklad spuštění modelu s nesprávnými parametry. Všimněte si výstupu „FAILED“ při vyhodnocování na GPU.

Ukázkový výstup protokolu trasování pro spuštění chybného modelu

Výběr a optimalizace zařízení

Ve výchozím nastavení model běží na procesoru a GPU samostatně, ale můžete zadat zařízení s příznakem -CPU nebo -GPU. Tady je příklad spuštění modelu 3krát pomocí pouze procesoru:

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

Zaznamenávat data o výkonu

K zaznamenání dat o výkonu použijte příznak -perf. Tady je příklad spuštění všech modelů v datové složce na procesoru a GPU 3krát a zachytávání dat o výkonu:

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

Měření výkonu

Následující měření výkonu budou na příkazovém řádku a v souboru .csv pro každé načtení, navázání a vyhodnocení operací:

  • Nástěnný čas (ms): Uplynulý skutečný čas mezi začátkem a koncem operace.
  • Čas GPU (ms): doba předání operace z procesoru do GPU a spuštění v GPU (poznámka: Load() se na GPU nespustí).
  • Čas procesoru (ms): doba spuštění operace na procesoru.
  • Využití vyhrazené a sdílené paměti (MB): Průměrné využití paměti na úrovni jádra a uživatele (v MB) během vyhodnocení procesoru nebo GPU
  • Paměť pracovní sady (MB): Množství paměti DRAM, kterou proces na procesoru vyžaduje během vyhodnocení. Vyhrazená paměť (MB) – velikost paměti, která byla použita v paměti VRAM vyhrazeného GPU.
  • Sdílená paměť (MB): Velikost paměti, která byla použita v DRAM GPU.

Ukázkový výstup výkonu:

Ukázkový výstup výkonu

Testování ukázkových vstupů

Spustit model na CPU a GPU samostatně, a samostatným připojením vstupu k CPU a GPU (celkem 4 spuštění):

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

Spusťte model na procesoru se vstupem vázaným na GPU a načítáte ho jako obrázek RGB:

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

Zaznamenání protokolů trasování

Pokud chcete zachytit protokoly trasování pomocí nástroje, můžete použít příkazy logman ve spojení s příznakem ladění:

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

Soubor winmllog.etl se zobrazí ve stejném adresáři jako WinMLRunner.exe.

Čtení protokolů trasování

Pomocí traceprt.exespusťte z příkazového řádku následující příkaz.

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

Nejprve otevřete soubor logdump.csv.

Alternativně můžete použít Analyzátor výkonu windows (ze sady Visual Studio). Spusťte Nástroj Windows Performance Analyzer a otevřete winmllog.etl.

Ukázka výstupu protokolu trasování pomocí nástroje Windows Performance Analyzer

Všimněte si, že -CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput, -GPUBoundInput se vzájemně nevylučují (tj. můžete kombinovat tolik, kolik chcete spustit model s různými konfiguracemi).

Dynamické načítání knihovny DLL

Pokud chcete spustit WinMLRunner s jinou verzí WinML (například porovnání výkonu se starší verzí nebo testováním novější verze), jednoduše umístěte windows.ai.machinelearning.dll a directml.dll soubory do stejné složky jako WinMLRunner.exe. WinMLRunner nejprve vyhledá tyto knihovny DLL a vrátí se do C:/Windows/System32, pokud je nenajde.

Známé problémy

  • Vstupy sekvence/mapy se zatím nepodporují, model se jednoduše přeskočí, aby neblokoval ostatní modely ve složce.
  • Nemůžeme spolehlivě spouštět více modelů s argumentem -folder s reálnými daty. Vzhledem k tomu, že můžeme zadat pouze 1 vstup, velikost vstupu by se neshodovala s většinou modelů. Právě teď použití argumentu -folder funguje dobře pouze s nesmyslnými daty;
  • Generování neplatného vstupu jako šedého nebo YUV není v současné době podporováno. V ideálním případě by datový kanál WinMLRunneru měl podporovat všechny typy vstupů, které můžeme dát WinML.