共用方式為


WinMLRunner

WinMLRunner 是一種工具,可在使用 Windows ML API 進行評估時,測試模型是否成功執行。 您也可以擷取 GPU 和/或 CPU 上的評估時間和記憶體使用量。 您可以在輸入和輸出變數為張量或影像的位置評估 .onnx 或 .pb 格式的模型。 有 2 種方式可以使用 WinMLRunner:

執行模型

首先,開啟下載的 Python 工具。 流覽至包含 WinMLRunner.exe 的資料夾,然後執行可執行檔,如下所示。 請務必將安裝位置取代為您相符的內容:

.\WinMLRunner.exe -model SqueezeNet.onnx

您也可以使用下列命令來執行模型的資料夾。

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

執行良好的模型

以下是成功執行模型的範例。 請注意模型首先如何載入和輸出模型中繼資料。 然後,模型會分別在 CPU 和 GPU 上執行,輸出系結成功、評估成功和模型輸出。

Sample trace log output for running a good model

執行不正確的模型

以下是使用不正確參數執行模型的範例。 在 GPU 上評估時,請注意 FAILED 輸出。

Sample trace log output for running a bad model

裝置選取和優化

根據預設,模型會分別在 CPU 和 GPU 上執行,但您可以使用 -CPU 或 -GPU 旗標來指定裝置。 以下是僅使用 CPU 執行模型 3 次的範例:

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

記錄效能資料

使用 -perf 旗標來擷取效能資料。 以下是在 CPU 和 GPU 上個別執行資料檔案夾中所有模型,並擷取效能資料的範例:

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

效能測量

下列效能度量會針對每個載入、系結和評估作業輸出至命令列和 .csv 檔案:

  • 時鐘時間 (ms): 作業開始和結束之間的經過即時時間。
  • GPU 時間(ms): 作業從 CPU 傳遞至 GPU 並在 GPU 上執行的時間(注意:GPU 上未執行 Load() 。
  • CPU 時間 (ms): 作業在 CPU 上執行的時間。
  • 專用和共用記憶體使用量(MB): CPU 或 GPU 評估期間的平均核心和使用者層級記憶體使用量(以 MB 為單位)。
  • 工作集記憶體 (MB): 評估期間所需 CPU 上的 DRAM 記憶體數量。 專用記憶體 (MB) - 專用 GPU VRAM 上使用的記憶體數量。
  • 共用記憶體 (MB): GPU 在 DRAM 上使用的記憶體數量。

效能輸出範例:

Sample performance output

測試範例輸入

分別在 CPU 和 GPU 上執行模型,並將輸入分別系結至 CPU 和 GPU(總計執行 4 個):

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

在 CPU 上執行模型,並將輸入系結至 GPU 並載入為 RGB 映射:

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

擷取追蹤記錄

如果您想要使用 工具來擷取追蹤記錄,您可以使用 logman 命令搭配偵錯旗標:

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 檔案會出現在與 WinMLRunner.exe 相同的目錄中。

讀取追蹤記錄

使用 traceprt.exe,從命令列執行下列命令。

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

接著,開啟 logdump.csv 檔案。

或者,您可以使用 Windows 效能分析器 (從 Visual Studio)。 啟動 Windows 效能分析器,然後開啟 winmllog.etl

Sample the trace log output using Windows Performance Analyzer

請注意,-CPU、-GPU、-GPUHighPerformance、-GPUMinPower -BGR、-RGB、-tensor、-CPUBoundInput、-GPUBoundInput 不是互斥的(亦即,您可以結合您想要以不同組態執行模型的次數)。

動態 DLL 載入

如果您想要以另一個版本的 WinML 執行 WinMLRunner (例如比較效能與較舊版本或測試較新版本),只要將 windows.ai.machinelearning.dll 和 directml.dll 檔案放在與 WinMLRunner.exe 相同的資料夾中。 WinMLRunner 會先尋找這些 DLL,如果找不到這些 DLL,請回到 C:/Windows/System32。

已知問題

  • 尚未支援時序/對應輸入(只是略過模型,因此它不會封鎖資料夾中的其他模型):
  • 我們無法使用具有真實資料的 -folder 引數可靠地執行多個模型。 由於我們只能指定 1 個輸入,因此輸入的大小會與大部分的模型不符。 現在,使用 -folder 引數只適用于垃圾資料;
  • 目前不支援將垃圾輸入產生為 Gray 或 YUV。 在理想情況下,WinMLRunner 的垃圾資料管線應該支援我們可以提供給 winml 的所有輸入類型。