Package: ml-compiler-opt
Infrastructure for MLGO - a Machine Learning Guided Compiler Optimizations Framework.MLGO is a framework for integrating ML techniques systematically in LLVM. It
replaces human-crafted optimization heuristics in LLVM with machine learned
models. The MLGO framework currently supports two optimizations:inlining-for-size(LLVM RFC);register-allocation-for-performance(LLVM RFC)The compiler components are both available in the main LLVM repository. This
repository contains the training infrastructure and related tools for MLGO.We currently use two different ML algorithms: Policy Gradient and Evolution
Strategies to train policies. Currently, this repository only support Policy
Gradient training. The release of Evolution Strategies training is on our
roadmap.Check out thisdemofor an end-to-end demonstration of how
to train your own inlining-for-size policy from the scratch with Policy
Gradient, or check out thisdemofor a demonstration of how
to train your own regalloc-for-performance policy.For more details about MLGO, please refer to our paperMLGO: a Machine Learning Guided Compiler Optimizations Framework.For more details about how to contribute to the project, please refer tocontributions.Pretrained modelsWe occasionally release pretrained models that may be used as-is with LLVM.
Models are released as github releases, and are named as
[task]-[major-version].[minor-version].The versions are semantic: the major
version corresponds to breaking changes on the LLVM/compiler side, and the minor
version corresponds to model updates that are independent of the compiler.When building LLVM, there is a flag-DLLVM_INLINER_MODEL_PATHwhich you may
set to the path to your inlining model. If the path is set todownload, then
cmake will download the most recent (compatible) model from github to use. Other
values for the flag could be:# Model is in /tmp/model, i.e. there is a file /tmp/model/saved_model.pb along# with the rest of the tensorflow saved_model files produced from training.-DLLVM_INLINER_MODEL_PATH=/tmp/model# Download the most recent compatible model-DLLVM_INLINER_MODEL_PATH=downloadPrerequisitesCurrently, the assumptions for the system are:Recent Ubuntu distro, e.g. 20.04python 3.8.x/3.9.x/3.10.xfor local training, which is currently the only supported mode, we recommend
a high-performance workstation (e.g. 96 hardware threads).Training assumes a clang build with ML 'development-mode'. Please refer to:LLVM documentationthe buildbot scriptThe model training - specific prerequisites are:Pipenv:pip3installpipenvThe actual dependencies:pipenvsync--systemNote that the above command will only work from the root of the repository
since it needs to havePipfile.lockin the working directory at the time
of execution.If you plan on doing development work, make sure you grab the development
and CI categories of packages as well:pipenvsync--system--categories"dev-packages ci"Optionally, to run tests (run_tests.sh), you also need:sudoapt-getinstallvirtualenvNote that the same tensorflow package is also needed for building the 'release'
mode for LLVM.DocsAn end-to-enddemousing Fuchsia as a codebase from which
we extract a corpus and train a model.How to add a featureguide.Extensibility model.