서론
이 장은 ONNX-MLIR 직접적인 환경설치 방법에 대해 다룬다. 사용되는 OS는 Ubuntu 20.04 LTS
Amd64, Mac os M1 에서 설치가 가능하며
Raspi와 같이 Edge Device에서 사용되는 ARM architecture에서 시도해보았으나 설치가 불가능하다.(LLVM은 지원해주나 ONNX-MLIR는 지원하지 않음)
목차
- Environment Settings
- Protobuf 설치
- CMake 설치
- Ninja, git 설치
- LLVM 설치
- ONNX-MLIR 설치
- ONNX-MLIR Install Command
- ONNX-MLIR 변환하기
- ONNX-MLIR Version
Environment Settings
초기 네트워크 설정, Swap Ram설정은 (여기)를 참고
$ sudo apt update
$ sudo apt install build-essential
$ gcc --version # 9.4.0
Protobuf 설치
protobuf를 설치하기 위해 make 설치
$ sudo apt install gcc make # 3.21.11
아래 링크에서 protobuf 다운

https://github.com/protocolbuffers/protobuf/releases/tag/v21.11
다운받은 파일 압축해제 후 설치
$ tar xvf protobuf-all-21.11.tar.gz
$ cd protobuf-21.11
$ ./configure
$ make -j8
$ sudo make install
$ sudo ldconfig
protobuf 버전확인
$ protoc --version # 3.21.11
CMake 설치
두 가지 설치방법이 있다. 둘 가지 전부 소개한다. 본인은 방법2. 적용하였음
방법1. 먼저 홈페이지에서 직접설치
Requirements : CMake(llvm 16 ≥ 3.20)

$ sudo apt install libssl-dev
$ tar cmake-3.25.1.tar.gz
$ cd cmake-3.25.1
$ ./bootstrap --prefix=/usr
$ make -j4
$ sudo make install
cmake 설치 확인
$ cmake --version
cmake 삭제하는 방법
$ sudo apt purge --auto-remove cmake
방법2. Snap cmake 설치
$ sudo snap install cmake --classic
$ cmake --version
$ which cmake
$ sudo ln -s /snap/bin/cmake /usr/bin/cmake
그리고 오류방지를 위해 아래 명령어를 입력해주자
$ sudo apt install python3-dev
Ninja, git 설치
$ sudo apt install ninja-build
$ sudo apt install git
LLVM 설치
$ 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 e864ac694540342d5e59f59c525c5082f2594fb8 && cd ..
$ mkdir llvm-project/build
$ cd llvm-project/build
$ 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
$ cmake --build . -- ${MAKEFLAGS}
$ cmake --build . --target check-mlir
여기까지가 llvm 빌드하는 과정이고 이 후에는 ONNX-MLIR 빌드하는 과정이다.
ONNX-MLIR 설치
폴더 구조는 llvm-project폴더 안에 onnx-mlir이 있어야 한다.
따라서 llvm-project폴더 안에서 onnx-mlir을 다운받는다.

$ cd ..
$ git clone --recursive https://github.com/onnx/onnx-mlir.git
$ mkdir onnx-mlir/build
$ cd onnx-mlir/build
ONNX-MLIR Install Command
아래는 예시 command이다. 예시 command아래에 sample command가 있는데 작성된 것을 참고하자
# MLIR_DIR must be set with cmake option now
MLIR_DIR=$(pwd)/llvm-project/build/lib/cmake/mlir
if [[ -z "$pythonLocation" ]]; then
cmake -G Ninja \
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
-DMLIR_DIR=${MLIR_DIR} \
..
else
cmake -G Ninja \
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
-DPython3_ROOT_DIR=$pythonLocation \
-DMLIR_DIR=${MLIR_DIR} \
..
fi
cmake --build .
# Run lit tests:
export LIT_OPTS=-v
cmake --build . --target check-onnx-lit
Sample
MLIR_DIR은 절대경로로 줘야 한다. 아래 예시명령어 처럼 terminal에 아래 command들을 적어주자.
MLIR_DIR=/Users/woojaejoo/Documents/Code/llvm-project/build/lib/cmake/mlir
if [[ -z “/Users/woojaejoo/miniforge3/envs/mlir/bin/python3.8” ]]; then
cmake -G Ninja \
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
-DMLIR_DIR=${MLIR_DIR} \
..
else
cmake -G Ninja \
-DCMAKE_CXX_COMPILER=/usr/bin/c++ \
-DPython3_ROOT_DIR=/Users/woojaejoo/miniforge3/envs/mlir/bin/python3.8 \
-DMLIR_DIR=${MLIR_DIR} \
..
fi
cmake --build .
# Run lit tests:
export LIT_OPTS=-v
cmake --build . --target check-onnx-lit
ONNX-MLIR 변환하기
$ cd /Users/woojaejoo/Documents/Code/llvm-project/onnx-mlir/build/Debug/bin
$ ./onnx-mlir --EmitLib mobilenetv2-12.onnx
ONNX-MLIR Version

[reference]
https://github.com/onnx/onnx-mlir/blob/main/docs/BuildOnLinuxOSX.md
Comment