| # The MPACT Project |
| |
| ## Introduction |
| |
| The MPACT project's main objective is to dramatically reduce the effort |
| required to create highly optimizing HPC and ML compilers for a large |
| class of architectures using LLVM and MLIR. We do this by providing |
| a declarative language-based mechanism for collecting and expressing |
| critical aspects of a target architecture in a way that can be reasoned |
| about and leveraged by all passes in both MLIR and LLVM. |
| |
| ## Installing the MPACT compiler |
| |
| To install the MPACT compiler through [PyPI](https://pypi.org/project/mpact/), please use the following command: |
| |
| ```shell |
| pip install mpact |
| ``` |
| |
| ## Building the MPACT compiler |
| |
| To build and run the MPACT compiler from source (for developers), |
| please follow the steps below. |
| |
| ### Check out code and sync submodules |
| |
| Use the following commands to clone the MPACT compiler repository. |
| |
| ```shell |
| git clone https://github.com/MPACT-ORG/mpact-compiler.git |
| cd mpact-compiler |
| git submodule update --init --recursive --progress |
| ``` |
| |
| To always get updated submodules through `git pull`, set the following flag: |
| |
| ```shell |
| git config --global submodule.recurse true |
| ``` |
| |
| NOTE: All following commands assume you remain in the `mpact-compiler` directory. |
| |
| ### Setup Python virtual environment |
| |
| The following commands initialize a virtual environment under bash/sh/etc. For other shells, see Note 1, [below](README.md#notes). |
| |
| ```shell |
| python3.11 -m venv mpact_venv # one time set up |
| source mpact_venv/bin/activate # MUST BE REPEATED FOR EVERY SESSION |
| ``` |
| |
| Next, set the Python paths as follows; for shells not in the bash/sh family, see Note 2, [below](README.md#notes). |
| ```shell |
| export PYTHONPATH=`pwd`/build/tools/mpact/python_packages/mpact |
| ``` |
| |
| ### Install build requirements |
| |
| Note that currently we rely on `torch-mlir` requirements defined in that |
| submodule to ensure all the build requirements are consistent. |
| |
| ```shell |
| python -m pip install --upgrade pip |
| python -m pip install -r externals/torch-mlir/requirements.txt |
| python -m pip install -r externals/torch-mlir/torchvision-requirements.txt |
| ``` |
| For shells not in the bash/sh family, see Note 3, [below](README.md#notes). |
| |
| ### Building the MPACT compiler in-tree |
| |
| The following command generates configuration files to build the MPACT compiler |
| project completely *in-tree*, which means that both LLVM as well as torch-mlir |
| are built from source. |
| |
| ```shell |
| cmake -GNinja -Bbuild \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DPython3_FIND_VIRTUALENV=ONLY \ |
| -DLLVM_ENABLE_PROJECTS=mlir \ |
| -DLLVM_EXTERNAL_PROJECTS="torch-mlir;mpact" \ |
| -DLLVM_EXTERNAL_TORCH_MLIR_SOURCE_DIR="${PWD}/externals/torch-mlir" \ |
| -DLLVM_EXTERNAL_MPACT_SOURCE_DIR="${PWD}" \ |
| -DLLVM_TARGETS_TO_BUILD=host \ |
| -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ |
| externals/torch-mlir/externals/llvm-project/llvm |
| ``` |
| |
| To speed up the build process, you can set up [ccache](https://ccache.dev/download.html) and add the following flags to the command above: |
| |
| ```shell |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache |
| ``` |
| |
| Run the following to ensure the MPACT compiler builds and runs correctly. |
| |
| ```shell |
| cmake --build build --target check-mpact |
| ``` |
| |
| And the following to run all benchmarks |
| (see [Benchmarks](benchmark/README.md) for more details). |
| |
| ```shell |
| cmake --build build --target benchmark-mpact |
| ``` |
| |
| ## Performance |
| |
| Performance of critical kernels for ML models are tracked for each commit. Any regression > 120% will be notified. Graphs could be found in the [github page](https://mpact-org.github.io/mpact-compiler/dev/bench/). |
| |
| ## Notes |
| |
| 1. Shells other than bash/sh/etc. require a different `activate` script, as shown. Because the python environment has to be set up for every session, we recommend putting it in your .*sh startup file. |
| - For csh/tcsh/etc.: |
| ```shell |
| source `pwd`/mpact_venv/bin/activate.csh |
| ``` |
| - For fish/etc.: |
| ```shell |
| source <path_to_mpact_compiler>/mpact_venv/bin/activate.fish |
| ``` |
| 2. Shells other than bash/sh/etc. set their environment variables differently: |
| - For csh/tcsh/etc.: |
| ```shell |
| setenv PYTHONPATH `pwd`/build/tools/mpact/python_packages/mpact |
| ``` |
| 3. If using csh/tcsh/etc., run the following command before trying to build the compiler: |
| ```shell |
| rehash |
| ``` |