MLIR 編譯器基礎架構中 ONNX 模型的表示和參考降階
此專案由 onnx 維護
託管於 GitHub Pages — 主題由 orderedlist 提供
神經網路處理輔助設施 (NNPA) 在 IBM z16 的處理器單元上實作。Onnx-mlir 可以透過 IBM Z 深度神經網路函式庫 (zDNN) 使用它。建置和 lit 測試在其他 IBM Z 系統 (例如 z15) 上執行,但數值測試需要在 z16 上執行。
新增以下 CMake 選項以建置用於 NNPA 的 onnx-mlir。關於 Linux 作業系統的建置命令,請參閱這裡
-DONNX_MLIR_ACCELERATORS=NNPA
NNPA 的 lit 測試包含在 test/mlir/accelerators/nnpa
中。當為 NNPA 建置 onnx-mlir 時,這些 lit 測試也會使用與 CPU 相同的命令執行。
cmake --build . --target check-onnx-lit
NNPA 的數值測試在 test/accelerators/NNPA/numerical
中提供。目前提供 Conv2D、MatMul2D、Gemm、LSTM 和 GRU 的測試,並使用以下命令執行。這些測試可以使用環境變數 TEST_INSTRUCTION
來檢查產生的共享函式庫中是否包含 zDNN 指令。此外,為了檢查結果的準確性,可以使用環境變數 TEST_ATOL
和 TEST_RTOL
設定 ATOL 和 RTOL。環境變數 TEST_DATARANGE
用於設定資料範圍的下限和上限。它們可以設定為 "
cmake --build . --config Release --target check-onnx-numerical-nnpa
這些測試使用與 CPU 的數值測試相同的測試程式碼 (test/modellib
和 test/numerial
),但使用不同的 cmake 檔案 (test/accelerator/NNPA/numerical/CMakeLists.txt
)。
由於 zDNN 函式庫中的 Conv2D 僅支援擴張等於 1 的情況,因此測試中擴張始終設定為 1。此外,填充類型設定為 VALID 和 SAME_UPPER,因為它們是唯一支援的類型。所有維度都是靜態的,因為目前不支援動態高度和權重維度。當使用 --maccel=NNPA
時,這些設定會自動設定,相當於手動將環境變數 TEST_CONFIG
設定為 "-dim=static -dilation=1 -padding=valid_upper"。
Gemm 中的 alpha
和 beta
始終為 1,這是 zDNN 函式庫支援的情況。當使用 --maccel=NNPA
時,這些設定會自動設定,相當於手動將環境變數 TEST_CONFIG
設定為 "-alpha=1 -beta=1"。
不測試窺視張量,因為 zDNN 函式庫中的 LSTM 不支援它。當使用 --maccel=NNPA
時,這些設定會自動設定,相當於手動將環境變數 TEST_CONFIG
設定為 "-peephole=0"。
zDNN 函式庫的 GRU 僅支援在乘以重置閘輸出之前套用線性轉換的情況。當使用 --maccel=NNPA
時,它會自動設定,相當於手動將環境變數 TEST_CONFIG
設定為 "-linearBeforeReset=1"。
NNPA 的後端測試在 test/accelerators/NNPA/backend
中提供。它可以使用以下命令執行。只有 zDNN 支援的測試案例會執行,如 test/accelerators/NNPA/backend/CMakeLists.txt
中所列。
cmake --build . --config Release --target check-onnx-backend-nnpa
NNPA 的 ATOL 和 RTOL 使用環境變數 TEST_ATOL
和 TEST_RTOL
在 CMakeLists.txt
中設定。此外,環境變數 TEST_INSTRUCTION_CHECK
和 TEST_CASE_BY_USER
可讓您檢查共享函式庫中是否產生了 NNPA 指令。在 CMakeLists.txt
中,TEST_INSTRUCTION_CHECK
設定為 true,而 TEST_CASE_BY_USER
包含測試案例和指令名稱。如果共享函式庫中找不到指令名稱,則測試將會失敗。