MLIR 編譯器基礎架構中 ONNX 模型的表示與參考降低
本專案由 onnx 維護
託管於 GitHub Pages — 主題由 orderedlist 提供
我們在此提供在 Linux 和 OSX 上安裝 ONNX-MLIR 的說明。在 Mac 上,有幾個命令不同。這些差異將在下面的說明中列出(如果相關)。Apple silicon 原生支援安裝 ONNX-MLIR,建議使用 brew 管理先決條件。
首先,安裝 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 之前,必須設定 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/bin
或 Release/bin
目錄中。
為了讓編譯器執行得更快(不會對產生的程式碼產生任何影響),您可以將 -DCMAKE_CXX_FLAGS=-march=native
傳遞給上面的 cmake -G Ninja ..
建置配置步驟,以產生利用本機 CPU 所有功能的程式碼,但會犧牲可攜性。或者您可以啟用特定的 CPU 功能,例如,-DCMAKE_CXX_FLAGS=-mf16c
以啟用 F16C 功能,以啟用 float16 和 (32 位) float 之間的本機轉換。它用於 src/Support/SmallFP.hpp
中。
在建置 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"
。
在 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_party
和 onnx-mlir
之間的依賴關係可能會導致問題,因此刪除 third_party
目錄、使用 git submodule update --init --recursive
重新安裝、重新安裝 onnx
、刪除 onnx-mlir/build
並從頭開始重新建置 onnx-mlir
始終是安全的。
請查看此頁面以取得有用的提示。