| # Getting Started with IREE TensorFlow Integrations |
| |
| NOTE: Iree's Python API is currently being reworked. Some of these |
| instructions may be in a state of flux as they document the end state. |
| |
| ## Prerequisites |
| |
| You should have already completed the |
| [Python getting started guide](../get-started/getting-started-python). Install |
| the TensorFlow pip package: |
| |
| ```shell |
| $ python -m pip install tf-nightly |
| ``` |
| |
| ## Obtaining IREE Integration Binaries |
| |
| IREE's compiler integrations into TensorFlow are mediated by standalone binaries |
| that can be built individually or installed from a distribution. These binaries |
| are: `iree-import-tf`, `iree-import-tflite`, and `iree-import-xla`. They are |
| configured in the |
| [iree_tf_compiler BUILD file](https://github.com/google/iree/blob/main/integrations/tensorflow/iree_tf_compiler/BUILD). |
| You have a few options for how to obtain these binaries |
| |
| ### Option 1. Building with Bazel |
| |
| TensorFlow only supports the Bazel build system. If building any parts of |
| TensorFlow yourself, you must have a working `bazel` command on your path. See |
| the relevant "OS with Bazel" [getting started](../get-started) doc for more |
| information. |
| |
| > Warning:<br> |
| > Building TF binaries takes a very long time, |
| > especially on smallish machines (IREE devs that work on these typically use |
| > machines with 96 cores) |
| |
| For example to run TensorFlow-based tests, you can build `iree-import-tf` |
| |
| ```shell |
| python3 configure_bazel.py |
| cd integrations/tensorflow |
| bazel build \ |
| //iree_tf_compiler:iree-import-tf \ |
| //iree_tf_compiler:iree-import-tflite \ |
| //iree_tf_compiler:iree-import-xla |
| |
| ``` |
| |
| The directory containing the binary will be printed (i.e. |
| `bazel-bin/iree_tf_compiler/iree-import-tf`) and the parent directory must be |
| passed to `-DIREE_TF_TOOLS_ROOT=` in a subsequent CMake invocation. |
| |
| ### Option 2. Install from a release |
| |
| TODO(#4980): Document how this works |
| |
| Roughly: |
| |
| ```shell |
| python -m pip install \ |
| iree-tools-tf-snapshot \ |
| iree-tools-tflite-snapshot \ |
| iree-tools-xla-snapshot \ |
| -f https://github.com/google/iree/releases |
| ``` |
| |
| TODO: Need a more sophisticated mechanism than `IREE_TF_TOOLS_ROOT`, which |
| only supports one directory. Also provide a tool to fetch and unpack |
| release binaries. |
| |
| ## Building |
| |
| The IREE Python bindings are only buildable with CMake. Continuing from above, |
| to build with TensorFlow support, add `-DIREE_BUILD_TENSORFLOW_COMPILER=ON` to |
| your invocation. If you obtained the integration binaries by a method other than |
| building them with Bazel, you will also need to pass the path to the directory |
| in which they are located: `-DIREE_TF_TOOLS_ROOT=path/to/dir` (it defaults to |
| the location where the Bazel build creates them). From the IREE root directory: |
| |
| The following CMake flags control: |
| |
| * `-DIREE_BUILD_TENSORFLOW_COMPILER=ON`: build the TensorFlow integration. |
| * `-DIREE_BUILD_TFLITE_COMPILER=ON`: build the TFLite integration. |
| * `-DIREE_BUILD_XLA_COMPILER=ON`: build the XLA integration. |
| * `-DIREE_TF_TOOLS_ROOT`: path to directory containing separately-built tools |
| for the enabled integrations. |
| |
| ```shell |
| $ cmake -B ../iree-build-tf -G Ninja \ |
| -DIREE_BUILD_PYTHON_BINDINGS=ON \ |
| -DIREE_BUILD_TENSORFLOW_COMPILER=ON . |
| $ cmake --build ../iree-build-tf |
| ``` |
| |
| ## Running Tests |
| |
| To run tests for the TensorFlow integration, which include end-to-end backend |
| comparison tests: |
| |
| ```shell |
| $ cd ../iree-build-tf |
| $ ctest -R 'tensorflow_e2e|bindings/python|integrations/tensorflow/' \ |
| --output-on-failure |
| |
| # Or run individually as: |
| $ export PYTHONPATH=$(pwd)/bindings/python |
| # This is a Python 3 program. On some systems, such as Debian derivatives, |
| # use 'python3' instead of 'python'. |
| $ python ../iree/integrations/tensorflow/e2e/simple_arithmetic_test.py \ |
| --target_backends=iree_vmvx --artifacts_dir=/tmp/artifacts |
| ``` |