onnx-mlir

Logo

MLIR 編譯器基礎架構中 ONNX 模型的表示與參考降低

在 GitHub 上檢視專案 onnx/onnx-mlir

操作指南

使用 Python 進行推論
使用 C/C++ 進行推論
使用 Java 進行推論

參考資料

ONNX 方言
OMTensor C99 執行期 API
OMTensorList C99 執行期 API
OMTensor Java 執行期 API
OMTensorList Java 執行期 API
產生 ONNX 方言
關於文件

開發

新增操作
測試指南
錯誤處理
命令列選項
儀器化
常數傳播
新增加速器

工具

工具

RunONNXModel.py
DocCheck

本專案由 onnx 維護

託管於 GitHub Pages — 主題由 orderedlist 提供

在 Linux / OSX 上安裝 ONNX-MLIR

我們在此提供在 Linux 和 OSX 上安裝 ONNX-MLIR 的說明。在 Mac 上,有幾個命令不同。這些差異將在下面的說明中列出(如果相關)。Apple silicon 原生支援安裝 ONNX-MLIR,建議使用 brew 管理先決條件。

MLIR

首先,安裝 MLIR(作為 LLVM-Project 的一部分)

git clone -n https://github.com/llvm/llvm-project.git
# Check out a specific branch that is known to work with ONNX-MLIR.
cd llvm-project && git checkout 00128a20eec27246719d73ba427bf821883b00b4 && cd ..
mkdir llvm-project/build
cd llvm-project/build

cmake -G Ninja ../llvm \
   -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \
   -DLLVM_TARGETS_TO_BUILD="host" \
   -DCMAKE_BUILD_TYPE=Release \
   -DLLVM_ENABLE_ASSERTIONS=ON \
   -DLLVM_ENABLE_RTTI=ON \
   -DENABLE_LIBOMPTARGET=OFF \
   -DLLVM_ENABLE_LIBEDIT=OFF

cmake --build . -- ${MAKEFLAGS}
cmake --build . --target check-mlir

為了啟用 onnx-mlir 的平行化,llvm-project 應配置為

cmake -G Ninja ../llvm \
   -DLLVM_ENABLE_PROJECTS=mlir \
   -DLLVM_TARGETS_TO_BUILD="host" \
   -DCMAKE_BUILD_TYPE=Release \
   -DLLVM_ENABLE_ASSERTIONS=ON \
   -DLLVM_ENABLE_RTTI=ON \
   -DLLVM_ENABLE_LIBEDIT=OFF

ONNX-MLIR (本專案)

建置

在建置 onnx-mlir 之前,必須設定 MLIR_DIR cmake 變數。它應該指向 llvm-project 建置或安裝目錄內的 mlir cmake 模組 (例如,llvm-project/build/lib/cmake/mlir)。

本專案使用 lit (LLVM 的整合測試器) 進行單元測試。在執行 cmake 時,我們也可以使用 LLVM_EXTERNAL_LIT 變數指定 LLVM 中 lit 工具的路徑,但只要 MLIR_DIR 指向 llvm-project 的建置目錄,就不是必須的。如果 MLIR_DIR 指向 llvm-project 的安裝目錄,則需要 LLVM_EXTERNAL_LIT

要建置 ONNX-MLIR,請使用以下命令 (可能帶有額外的 -DCMAKE_CXX_FLAGS 引數,如下面 所述)

same-as-file: <> ({“ref”: “utils/install-onnx-mlir.sh”, “skip-doc”: 2})

git clone --recursive https://github.com/onnx/onnx-mlir.git

# MLIR_DIR must be set with cmake option now
MLIR_DIR=$(pwd)/llvm-project/build/lib/cmake/mlir
mkdir onnx-mlir/build && cd onnx-mlir/build
if [[ -z "$pythonLocation" ]]; then
  cmake -G Ninja \
        -DCMAKE_CXX_COMPILER=/usr/bin/c++ \
        -DCMAKE_BUILD_TYPE=Release \
        -DLLVM_ENABLE_ASSERTIONS=ON \
        -DMLIR_DIR=${MLIR_DIR} \
        ..
else
  cmake -G Ninja \
        -DCMAKE_CXX_COMPILER=/usr/bin/c++ \
        -DCMAKE_BUILD_TYPE=Release \
        -DLLVM_ENABLE_ASSERTIONS=ON \
        -DPython3_ROOT_DIR=$pythonLocation \
        -DMLIR_DIR=${MLIR_DIR} \
        ..
fi
cmake --build .

# Run lit tests:
export LIT_OPTS=-v
cmake --build . --target check-onnx-lit

由於預設編譯器的變更,從 OSX Big Sur 開始,請將 -DCMAKE_CXX_COMPILER=/usr/bin/c++ 選項新增至上述 cmake .. 命令。

環境變數 $pythonLocation 可用於指定 Python 編譯器的基本目錄。

在上述命令成功後,onnx-mlir 可執行檔應會出現在 Debug/binRelease/bin 目錄中。

啟用 CPU 優化

為了讓編譯器執行得更快(不會對產生的程式碼產生任何影響),您可以將 -DCMAKE_CXX_FLAGS=-march=native 傳遞給上面的 cmake -G Ninja .. 建置配置步驟,以產生利用本機 CPU 所有功能的程式碼,但會犧牲可攜性。或者您可以啟用特定的 CPU 功能,例如,-DCMAKE_CXX_FLAGS=-mf16c 以啟用 F16C 功能,以啟用 float16 和 (32 位) float 之間的本機轉換。它用於 src/Support/SmallFP.hpp 中。

已知的 MacOS 問題

jsoniter 問題

在建置 onnx-mlir 時,有一個已知的問題。如果您看到類似這樣的錯誤

Cloning into '/home/user/onnx-mlir/build/src/Runtime/jni/jsoniter'...

[...]

make[2]: *** [src/Runtime/jni/CMakeFiles/jsoniter.dir/build.make:74: src/Runtime/jni/jsoniter/target/jsoniter-0.9.23.jar] Error 127
make[1]: *** [CMakeFiles/Makefile2:3349: src/Runtime/jni/CMakeFiles/jsoniter.dir/all] Error 2
make: *** [Makefile:146: all] Error 2.

在 jsoniter 修復之前,建議的變通方法如下:安裝 maven (例如,brew install maven) 並在您的 shell 中執行 alias nproc="sysctl -n hw.logicalcpu"

Protobuf 問題 (Mac M1,特定於目前需要的 protobuf 4.21.12)

在 Mac M1 上,您可能會在建置 protobuf 時遇到一些問題。特別是,您可能無法安裝 onnx (透過 pip install -e third_party/onnx) 或您可能無法編譯 onnx-mlir (沒有 InternalMetadata::~InternalMetadata 的 arm64 符號)。

第一個失敗可能是因為有多個 protobuf 版本。使用 brew 安裝版本沒有幫助 (版本 4.21.12,因為有一個已知的錯誤,可以使用下面的修補程式修正)。解除安裝 brew 版本,並確保您使用 pip 安裝正確的版本:pip install protobuf== 4.21.12

第二個失敗可以透過下載 protobuf 原始程式碼、套用修補程式並將其安裝在本機上來補救。請參閱 Dockerfile.llvm-project 第 66 行以取得複製指示。在複製正確的版本後,您應該從上面的連結下載並套用修補程式 patch 。然後,您應該遵循 Dockerfile.llvm-project 檔案中的步驟(省略了 ldconfig 步驟,沒有任何後果)。您可能需要 brew 幾個工具,請參閱上面的 Dockerfile.llvm-project 檔案中的 yum install。然後,您應該能夠成功安裝 protobuf 並編譯 onnx-mlir。由於 third_partyonnx-mlir 之間的依賴關係可能會導致問題,因此刪除 third_party 目錄、使用 git submodule update --init --recursive 重新安裝、重新安裝 onnx、刪除 onnx-mlir/build 並從頭開始重新建置 onnx-mlir 始終是安全的。

疑難排解建置問題

請查看此頁面以取得有用的提示。