MLIR 編譯器基礎架構中 ONNX 模型的表示和參考降階
此專案由 onnx 維護
託管於 GitHub Pages — 主題由 orderedlist 提供
third_party ONNX
以進行後端測試或重建 ONNX 操作後端測試由建置目錄中的 make check-onnx-backend
觸發,並且需要幾個初步步驟才能成功執行。同樣地,從 ONNX 描述在 ONNX-MLIR 中重建 ONNX 操作由 make OMONNXOpsIncTranslation
觸發。
如果您的環境中預設不是 Python 3.x,您需要安裝 Python 3.x,並且可能需要在您的頂層 CMake 檔案中設定 CMake PYTHON_EXECUTABLE
變數。
您還需要 pybind11
,可能需要安裝(mac:brew install pybind11
或 linux:例如 apt -y install python3-pybind11
),您可能需要指定軟體的位置(Mac、POWER,可能還有其他平台:export pybind11_DIR=<您的 pybind 路徑>
)。然後安裝 third_party/onnx
軟體(Mac:pip install third_party/onnx
),在頂層目錄中輸入。
## 在 ONNX-MLIR 中升級 ONNX
以下是升級 ONNX 版本所採取的步驟
建立您自己的分支
“cd” 進入 third_party/onnx
並簽出最新版本的 onnx 的提交 (您可以在這裡找到最新的提交:https://github.com/onnx/onnx/releases)
“pip uninstall onnx” (移除舊版本)
在 onnx-mlir/
目錄中,“pip install third_party/onnx” (從提交安裝 onnx,而不是線上版本)
使用正確的版本號更新 utils/gen_onnx_mlir.py
檔案
在 build/
目錄中使用以下命令建置 onnx:設定 CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
在 build/
目錄中執行:“make OMONNXOpsIncTranslation”
在 build/
目錄中執行:“make onnx-mlir-docs”
在 build/
目錄中執行:“make check-onnx-backend-case”
根據 步驟 9
的結果,更新新的後端測試
更新cpu 的 Opset 文件,然後在 build/
目錄中發出以下命令:“make onnx_mlir_supported_ops_cpu”
更新NNPA 的 Opset 文件,然後在 build/
目錄中發出以下命令:“make onnx_mlir_supported_ops_NNPA”
確保 lit 測試和後端測試成功通過,然後您就完成了!
注意:對於可能已變更的檔案,請在使用 PR 之前使用 git add <filename>
。
在 Mac/POWER 和可能其他平台上,安裝 ONNX 時目前存在一個問題。如果在建置期間遇到錯誤,請嘗試修改頂層 CMakefile 的修復方法,如本 PR 中所報告:https://github.com/onnx/onnx/pull/2482/files
。
在 Mac 上執行 make check-onnx-backend
時,您可能會遇到以下錯誤
Fatal Python error: Aborted
Current thread 0x0000000107919e00 (most recent call first):
File "/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 2632 in getproxies_macosx_sysconf
File "/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 2650 in getproxies
File "/usr/local/Cellar/python@3.9/3.9.7/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 795 in __init__
...
一個已知的解決方法是在您的 Shell 中匯出 no_proxy
環境變數,如下所示,然後重新執行測試。
% export no_proxy="*"