Emit C


서론

MLIR-EmitC provides a way to translate ML models into C++ code.

The repository contains scripts and tools to translate Keras and TensorFlow models into the TOSA  and MHLO dialect and to convert those to EmitC.

목차

  1. 사전작업
  2. Git에서 가져오기
  3. 빌드하기
  4. MobileNet 가져오기
  5. Saved Model pb 가져오기

사전작업

LLVM Project가 사전에 빌드되어있어야 한다.

ONNX-MLIR 설치부분까지는 작업할 필요없으니 그 전까지만 빌드하자.

Git에서 가져오기

git clone https://github.com/iml130/mlir-emitc.git
cd mlir-emitc
git submodule update --init

빌드하기

mkdir build && cd build
sudo apt install clang
cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DEMITC_ENABLE_HLO=OFF -DLLVM_ENABLE_PROJECTS=mlir -DLLVM_EXTERNAL_PROJECTS="mlir-emitc" -DLLVM_EXTERNAL_MLIR_EMITC_SOURCE_DIR=`realpath ../` -DLLVM_TARGETS_TO_BUILD=host ${ROOT_PATH_TO_llvm-project}/llvm
cmake --build . --target check-emitc

아래는 위 코드에 대한 실제로 사용된 Sample Code다 빌드할때 참조하자

mkdir build && cd build
cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DEMITC_ENABLE_HLO=OFF -DLLVM_ENABLE_PROJECTS=mlir -DLLVM_EXTERNAL_PROJECTS="mlir-emitc" -DLLVM_EXTERNAL_MLIR_EMITC_SOURCE_DIR=`realpath ../` -DLLVM_TARGETS_TO_BUILD=host /home/jj/llvm-project/llvm
cmake --build . --target check-emitc

MobileNet 가져오기

cd ..
cd scripts
pip3 install -r requirements.txt
mkdir model_saved
python3 get_mobilenet_v2.py --output-file model_saved

Saved Model pb 가져오기

python3 model_to_savedmodel_with_predict_function.py mobilenet_v2.h5 ./result

./e2e_test_tosa.sh ./model_saved /home/jj/llvm-project/mlir-emitc/reference-implementation/include /home/jj/llvm-project/mlir-emitc/build/bin/emitc-opt /usr/bin/g++ 1 0 ./t

https://github.com/iml130/mlir-emitc

g++ test.cpp -I./
./a.out