ONNX-MLIR 설치 가이드


서론

이 장은 ONNX-MLIR 직접적인 환경설치 방법에 대해 다룬다. 사용되는 OS는 Ubuntu 20.04 LTS

Amd64, Mac os M1 에서 설치가 가능하며

Raspi와 같이 Edge Device에서 사용되는 ARM architecture에서 시도해보았으나 설치가 불가능하다.(LLVM은 지원해주나 ONNX-MLIR는 지원하지 않음)

목차

  1. Environment Settings
  2. Protobuf 설치
  3. CMake 설치
    1. 방법1. 먼저 홈페이지에서 직접설치
    2. 방법2. Snap cmake 설치
  4. Ninja, git 설치
  5. LLVM 설치
  6. ONNX-MLIR 설치
  7. ONNX-MLIR Install Command
    1. Sample
  8. ONNX-MLIR 변환하기
  9. 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. 먼저 홈페이지에서 직접설치

$ 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