@@ -522,3 +522,69 @@ advanced usage, please refer to the original paper:
522522`IR2Vec: LLVM IR Based Scalable Program Embeddings  <https://doi.org/10.1145/3418463 >`_.
523523The LLVM source code for ``IR2Vec `` can also be explored to understand the 
524524implementation details.
525+ 
526+ Building with ML support
527+ ======================== 
528+ 
529+ **NOTE ** For up to date information on custom builds, see the ``ml-* ``
530+ `build bots  <http://lab.llvm.org >`_. They are set up using 
531+ `like this  <https://github.com/google/ml-compiler-opt/blob/main/buildbot/buildbot_init.sh >`_.
532+ 
533+ Embed pre-trained models (aka "release" mode)
534+ --------------------------------------------- 
535+ 
536+ This supports the ``ReleaseModeModelRunner `` model runners.
537+ 
538+ You need a tensorflow pip package for the AOT (ahead-of-time) Saved Model compiler
539+ and a thin wrapper for the native function generated by it. We currently support
540+ TF 2.15. We recommend using a python virtual env (in which case, remember to
541+ pass ``-DPython3_ROOT_DIR `` to ``cmake ``).
542+ 
543+ Once you install the pip package, find where it was installed:
544+ 
545+ .. code-block :: console 
546+ 
547+   TF_PIP=$(sudo -u buildbot python3 -c "import tensorflow as tf; import os; print(os.path.dirname(tf.__file__))")`` 
548+ 
549+  Then build LLVM:
550+ 
551+ .. code-block :: console 
552+ 
553+   cmake -DTENSORFLOW_AOT_PATH=$TF_PIP \ 
554+     -DLLVM_INLINER_MODEL_PATH=<path to inliner saved model dir> \ 
555+     -DLLVM_RAEVICT_MODEL_PATH=<path to regalloc eviction saved model dir> \ 
556+     <...other options...>  
557+ 
558+  The example shows the flags for both inlining and regalloc, but either may be
559+ omitted.
560+ 
561+ You can also specify a URL for the path, and it is also possible to pre-compile
562+ the header and object and then just point to the precompiled artifacts. See for
563+ example ``LLVM_OVERRIDE_MODEL_HEADER_INLINERSIZEMODEL ``.
564+ 
565+ **Note ** that we are transitioning away from the AOT compiler shipping with the
566+ tensorflow package, and to a EmitC, in-tree solution, so these details will
567+ change soon.
568+ 
569+ Using TFLite (aka "development" mode)
570+ ------------------------------------- 
571+ 
572+ This supports the ``ModelUnderTrainingRunner `` model runners.
573+ 
574+ Build the TFLite package using `this script  <https://raw.githubusercontent.com/google/ml-compiler-opt/refs/heads/main/buildbot/build_tflite.sh >`_.
575+ Then, assuming you ran that script in ``/tmp/tflitebuild ``, just pass
576+ ``-C /tmp/tflitebuild/tflite.cmake `` to the ``cmake `` for LLVM.
577+ 
578+ Interactive Mode (for training / research)
579+ ------------------------------------------  
580+ 
581+ The ``InteractiveModelRunner `` is available with no extra dependencies. For the
582+ optimizations that are currently MLGO-enabled, it may be used as follows:
583+ 
584+ - for inlining: ``-mllvm -enable-ml-inliner=release -mllvm -inliner-interactive-channel-base=<name> ``
585+ - for regalloc eviction: ``-mllvm -regalloc-evict-advisor=release -mllvm -regalloc-evict-interactive-channel-base=<name> ``
586+ 
587+ where the ``name `` is a path fragment. We will expect to find 2 files,
588+ ``<name>.in `` (readable, data incoming from the managing process) and
589+ ``<name>.out `` (writable, the model runner sends data to the managing process)
590+ 
0 commit comments