WinMLRunner
WinMLRunner 是一種工具,可在使用 Windows ML API 進行評估時,測試模型是否成功執行。 您也可以擷取 GPU 和/或 CPU 上的評估時間和記憶體使用量。 您可以在輸入和輸出變數為張量或影像的位置評估 .onnx 或 .pb 格式的模型。 有 2 種方式可以使用 WinMLRunner:
- 下載命令列 Python 工具 。
- 在 WinML 儀表板 內使用。 如需詳細資訊,請參閱 WinML 儀表板檔
執行模型
首先,開啟下載的 Python 工具。 流覽至包含 WinMLRunner.exe 的資料夾,然後執行可執行檔,如下所示。 請務必將安裝位置取代為您相符的內容:
.\WinMLRunner.exe -model SqueezeNet.onnx
您也可以使用下列命令來執行模型的資料夾。
WinMLRunner.exe -folder c:\data -perf -iterations 3 -CPU`\
執行良好的模型
以下是成功執行模型的範例。 請注意模型首先如何載入和輸出模型中繼資料。 然後,模型會分別在 CPU 和 GPU 上執行,輸出系結成功、評估成功和模型輸出。
執行不正確的模型
以下是使用不正確參數執行模型的範例。 在 GPU 上評估時,請注意 FAILED 輸出。
裝置選取和優化
根據預設,模型會分別在 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 上使用的記憶體數量。
效能輸出範例:
測試範例輸入
分別在 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
。
請注意,-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 的所有輸入類型。