ONNX 模型在 MLIR 编译器基础设施中的表示与参考降级
本项目由 onnx 维护
托管在 GitHub Pages 上 — 主题由 orderedlist
third_party ONNX
用于后端测试或重建 ONNX Operation后端测试通过在构建目录中运行 make check-onnx-backend
来触发,需要一些前期步骤才能成功运行。类似地,从 ONNX 描述中重建 ONNX-MLIR 中的 ONNX Operation,则是通过 make OMONNXOpsIncTranslation
来触发。
如果您的环境中未默认安装 python 3.x,则需要安装它,并且可能需要在顶层 cmake 文件中设置 cmake 变量 PYTHON_EXECUTABLE
。
您还需要 pybind11
,可能需要安装它(例如,Mac 上使用 brew install pybind11
或 Linux 上使用 apt -y install python3-pybind11
),并且您可能需要指示在哪里找到该软件(Mac、POWER,可能还有其他平台:export pybind11_DIR=<your path to pybind>
)。然后,在顶层目录中输入命令安装 third_party/onnx
软件(Mac 上使用 pip install third_party/onnx
)。
## 在 ONNX-MLIR 中升级 ONNX
以下是升级 ONNX 版本的步骤
创建您自己的分支
“cd” 进入 third_party/onnx
目录并检出 (checkout) 最新 ONNX 版本的提交 (commit)(您可以在此处找到最新的提交:https://github.com/onnx/onnx/releases)
“pip uninstall onnx”(移除旧版本)
在 onnx-mlir/
目录中,“pip install third_party/onnx”(从该提交安装 onnx,而不是在线版本)
使用正确的版本号更新 utils/gen_onnx_mlir.py
文件
在 build/
目录中使用以下命令构建 onnx:set 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 时会出现一个问题。如果在构建过程中遇到错误,请尝试按照此 PR (https://github.com/onnx/onnx/pull/2482/files
) 中报告的方式编辑顶层 CMakefile 来修复它。
在 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="*"