intel / graph-compiler

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Graph Compiler

Graph Compiler is an end-to-end, MLIR-based compiler designed to enhance the performance of deep learning workloads. It accepts computation graphs from the frontend, applies domain-specific optimizations and transformations, generates code, and manages runtime execution.

The current frontend for Graph Compiler is oneDNN Graph API.

Build instructions

All-in-one compile script

It is recommended for the users to use the all-in-one compile script at scripts/compile.sh. It downloads the LLVM dependency and builds the project.

Step-by-step build intructions

To build this project step by step, first you need to find the LLVM commit-id we are using at cmake/llvm-version.txt. Then clone specific version of LLVM:

export LLVM_COMMIT_HASH=$(< cmake/llvm-version.txt)
git clone https://github.com/llvm/llvm-project
cd llvm-project
git checkout $LLVM_COMMIT_HASH

Build LLVM with the command lines given in .github/workflows/build-llvm.yml:

mkdir llvm-install
cmake -G Ninja llvm -B build -DCMAKE_INSTALL_PREFIX=llvm-install \
  -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=true -DLLVM_ENABLE_PROJECTS="mlir" -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_INSTALL_UTILS=true -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DLLVM_INSTALL_GTEST=ON
cmake --build build --target install

Notes

  • It is recommended to add optional options -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON to the command cmake -G Ninja llvm ... above if you are building for CPU only. These will enable the build of LLVM/MLIR dynamic libraries and let MLIR/LLVM tools link to them, to reduce the installed binary size of LLVM/MLIR. These options also enable the GC_DEV_LINK_LLVM_DYLIB option of graph-compiler repo (see below).
  • The option -DLLVM_INSTALL_GTEST=ON is optional, if the tests of graph-compiler are disabled (see GC_TEST_ENABLE below).
  • If you would like to enable GPU components of Graph Compiler, please make sure to statically link Graph Compiler and LLVM(MLIR). It is a known issue that LLVM shared library cannot be linked together with IGC (Intel's low level GPU compiler). Make sure LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB are OFF (they are off by default). Also make sure Graph Compiler's cmake option GC_DEV_LINK_LLVM_DYLIB is OFF when configuring Graph Compiler (see below).

We have now installed LLVM at llvm-project/llvm-install.

Change working directory to graph-compiler repo and prepare the build directory:

cd /PATH/TO/graph-compiler
mkdir build && cd build

Build and run tests:

cmake .. -G Ninja \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DMLIR_DIR=/PATH/TO/llvm-project/llvm-install/lib/cmake/mlir \
    -DLLVM_EXTERNAL_LIT=$(which lit)
cmake --build . --target gc-check

Notes:

  • /PATH/TO/llvm-project/llvm-install should be the install path of LLVM. If you installed LLVM elsewhere by -DCMAKE_INSTALL_PREFIX option when building LLVM, you need to change the path in -DMLIR_DIR accordingly.
  • The cmake option -DLLVM_EXTERNAL_LIT is for the tests of this project. It requires the lit tool to be installed in the system. You can install it via pip install lit. If you don't need to run the tests of this repo, you can omit this option in the command line.
  • If GPU components are on (-DGC_USE_GPU=ON), make sure the Level-zero runtime is installed in your system. Either install Level-zero runtime via system package managers (e.g. apt), or follow the instructions of IMEX.

Graph Compiler supports the following build-time options.

CMake Option Supported values (defaults in bold) Description
GC_LEGACY_ENABLE ON, OFF Controls building the legacy graph-compiler component
GC_TEST_ENABLE ON, OFF Controls building the tests
GC_DEV_LINK_LLVM_DYLIB ON, OFF Controls dynamic link LLVM/MLIR libraries, mainly for developer
GC_ENABLE_BINDINGS_PYTHON ON, OFF Controls building the Python API
GC_USE_GPU ON, OFF Whether to enable the GPU components

About

License:Apache License 2.0


Languages

Language:C++ 98.0%Language:MLIR 1.0%Language:CMake 0.7%Language:Python 0.2%Language:Shell 0.1%Language:C 0.0%