ONNX 後端測試

什麼是 ONNX 後端測試

ONNX 後端測試是一個測試套件,每個 ONNX 後端都應該執行以驗證它是否符合 ONNX 的標準。它既是後端實作的驗證工具,也是定義每個運算子預期行為的兩種方式之一(另一種方式是將其新增到文件中)。

此套件中有兩種測試類型 – 節點測試和模型測試

  • 節點測試 驗證後端是否執行正確的計算,並具有處理每個個別運算子各種屬性的預期行為。在每個測試案例中,後端會被給予一個具有一些輸入的節點,並且會將返回的輸出與預期的輸出進行比較。

  • 模型測試 在模型層級驗證後端。測試案例與節點測試的案例類似,但後端會被給予一個 ONNX 模型,而不是節點。

貢獻

由於 ONNX 的目標是成為深度學習模型格式的規範,因此務必確保每個 ONNX 運算子的定義都沒有任何模糊之處;新增更多測試案例是強制執行此目標的唯一方法。

節點測試是以 Python/Numpy 程式碼在 onnx/backend/test/case/node 中建立,然後藉由調用 shell 命令 backend-test-tools generate-data 將其匯出為 protobuf 檔案至 onnx/backend/test/data/node 作為事實來源。每個運算子的測試案例都存在於一個獨立的檔案中,例如,對於運算子 Add,其測試案例位於 add.py 中,程式碼中的每個 expect(...) 陳述式都對應一個測試案例。所有 export.* 函式的原始程式碼也會被嵌入在 運算子文件頁面中作為範例程式碼片段。您正在為測試和文件做出貢獻!

對於模型測試,由於每個模型 protobuf 檔案的大小可能很大,我們不會將檔案直接放置在儲存庫中。相反地,我們將它們上傳到雲端,並在執行測試時按需下載它們。每個測試案例都包含一個模型定義 protobuf 檔案,以及數個輸入和輸出檔案對。新增測試案例需要管理員執行一些手動操作(例如將檔案上傳到雲端),因此如果您有想要貢獻的 ONNX 模型,請與我們聯絡。