Aracılığıyla paylaş


WinMLRunner

WinMLRunner, Bir modelin Windows ML API'leri ile değerlendirildiğinde başarıyla çalıştırılıp çalıştırılamadığını test etmek için bir araçtır. Gpu ve/veya CPU'da değerlendirme süresini ve bellek kullanımını da yakalayabilirsiniz. .onnx veya .pb biçimindeki modeller, giriş ve çıkış değişkenlerinin tensor veya görüntü olduğu durumlarda değerlendirilebilir. WinMLRunner'ı kullanmanın 2 yolu vardır:

Model Çalıştırma

İlk olarak indirilen Python aracını açın. WinMLRunner.exeiçeren klasöre gidin ve aşağıda gösterildiği gibi yürütülebilir dosyayı çalıştırın. Yükleme konumunu sizinkiyle eşleşen konumla değiştirdiğinden emin olun:

.\WinMLRunner.exe -model SqueezeNet.onnx

Ayrıca, aşağıdaki gibi bir komutla bir model klasörü de çalıştırabilirsiniz.

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

İyi bir model çalıştırma

Aşağıda bir modeli başarıyla çalıştırma örneği verilmiştir. Modelin önce nasıl yüklendiğine ve model meta verilerinin nasıl çıktığının alındığına dikkat edin. Ardından model, CPU ve GPU üzerinde bağımsız olarak çalıştırılır ve bağlama başarısı, değerlendirme başarısı ile model çıkışını üretir.

İyi bir modelin çalıştırılmasına ait örnek izleme günlüğü çıktısı

Kötü bir modeli çalıştırma

Aşağıda, yanlış parametrelere sahip bir modeli çalıştırma örneği verilmiştir. GPU'da değerlendirme yaparken "FAILED" çıkışına dikkat edin.

Kötü bir model çalıştırıldığında oluşturulan örnek izleme günlüğü çıktısı

Cihaz seçimi ve iyileştirme

Varsayılan olarak, model CPU ve GPU üzerinde ayrı olarak çalışır, ancak -CPU veya -GPU bayrağına sahip bir cihaz belirtebilirsiniz. Aşağıda yalnızca CPU kullanarak modeli 3 kez çalıştırma örneği verilmiştir:

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

Performans verilerini kaydet

Performans verilerini yakalamak için -perf bayrağını kullanın. Cpu ve GPU üzerindeki veri klasöründeki tüm modelleri ayrı ayrı 3 kez çalıştırmaya ve performans verilerini yakalamaya yönelik bir örnek aşağıda verilmiştir:

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

Performans ölçümleri

Aşağıdaki performans ölçümleri her yükleme, bağlama ve değerlendirme işlemi için komut satırına ve .csv dosyasına çıkış olarak gösterilir:

  • Duvar saati süresi (ms): bir işlemin başlangıcı ve sonu arasında geçen gerçek zaman.
  • GPU süresi (ms): BIR işlemin CPU'dan GPU'ya geçirilip GPU'da yürütülme zamanı (not: Load() GPU'da yürütülmemektedir).
  • CPU süresi (ms): bir işlemin CPU üzerinde yürütülecek zamanı.
  • Ayrılmış ve Paylaşılan Bellek Kullanımı (MB): CPU veya GPU üzerinde değerlendirme sırasında ortalama çekirdek ve kullanıcı düzeyinde bellek kullanımı (MB cinsinden).
  • Çalışma Kümesi Belleği (MB): Değerlendirme sırasında cpu üzerinde işlemin gerektirdiği DRAM belleği miktarı. Ayrılmış Bellek (MB) - Ayrılmış GPU'nun VRAM'sinde kullanılan bellek miktarı.
  • Paylaşılan Bellek (MB): GPU tarafından DRAM üzerinde kullanılan bellek miktarı.

Örnek performans çıkışı:

Örnek performans çıkışı

Örnek girişleri test edin

CPU ve GPU üzerinde ayrı olarak ve girişi CPU ve GPU'ya ayrı olarak bağlayarak bir model çalıştırın (toplam 4 çalıştırma):

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

CPU'da, girişi GPU'ya bağlı ve RGB görüntü olarak yüklenen bir model çalıştırın.

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

İzleme Günlüklerini Yakalama

Aracı kullanarak izleme günlüklerini yakalamak istiyorsanız logman komutlarını hata ayıklama bayrağıyla birlikte kullanabilirsiniz:

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

winmllog.etl dosyası, WinMLRunner.exeile aynı dizinde görünür.

İzleme Günlüklerini Okuma

traceprt.exekullanarak komut satırından aşağıdaki komutu çalıştırın.

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

Ardından dosyayı açın logdump.csv .

Alternatif olarak, Windows Performans Çözümleyicisi'ni (Visual Studio'dan) kullanabilirsiniz. Windows Performance Analyzer'ı başlatın ve winmllog.etl açın.

Windows Performans Çözümleyicisi'ni kullanarak izleme günlüğü çıktısını örnekleyin

-CPU, -GPU, -GPUHighPerformance, -GPUMinPower -BGR, -RGB, -tensor, -CPUBoundInput, -GPUBoundInput birbirini dışlamaz (örneğin, modeli farklı yapılandırmalarla çalıştırmak istediğiniz kadar birleştirebilirsiniz).

Dinamik DLL Yükleniyor

WinMLRunner'ı başka bir WinML sürümüyle çalıştırmak istiyorsanız (örneğin, performansı eski bir sürümle karşılaştırmak veya daha yeni bir sürümü test etmek), windows.ai.machinelearning.dll ve directml.dll dosyalarını WinMLRunner.exeile aynı klasöre yerleştirmeniz yeterlidir. WinMLRunner önce bu DLL'leri arar ve bulamazsa C:/Windows/System32'ye geri döner.

Bilinen sorunlar

  • Dizi/Harita girişleri henüz desteklenmiyor (model yalnızca atlanır, bu nedenle klasördeki diğer modelleri engellemez);
  • Gerçek verilerle -folder bağımsız değişkenini kullanarak birden çok modeli güvenilir bir şekilde çalıştıramıyoruz. Yalnızca 1 giriş belirtebildiğimiz için girişin boyutu modellerin çoğuyla uyuşmaz. Şu anda -folder bağımsız değişkenini kullanmak yalnızca çöp verilerle iyi sonuç verir;
  • Gri veya YUV olarak atık girişi oluşturma şu anda desteklenmiyor. İdeal olarak, WinMLRunner'ın çöp veri işlem hattı winml'ye verebileceğimiz tüm giriş türlerini desteklemelidir.