blob: 3c3dd8a81095d3f158bab8fe6f27586fd3d40fad [file] [log] [blame] [view]
# IREE Benchmarks
This directory contains configuration definition for IREE's continuous
benchmarks suite. Benchmark results are posted to https://perf.iree.dev.
The https://buildkite.com/iree/iree-benchmark Buildkite pipeline runs on each
commit to the `main` branch and posts those results to the dashboard. The
pipeline also runs on pull requests with the `buildkite:benchmark` label,
posting results compared against their base commit as comments.
## Types of benchmarks
```
├── TensorFlow
│ * models authored in TensorFlow and imported with `iree-import-tf`
└── TFLite
* models converted to TensorFlow Lite and imported with `iree-import-tflite`
```
## Adding new benchmarks
### Machine learning model latency
1. Pick the model you want to benchmark and find its source, which could be
a Python script, TensorFlow SavedModel from https://tfhub.dev/, TensorFlow
Lite FlatBuffer, or some other format with a supported path into IREE. The
model can optionally include trained weights if those are important for
benchmarking.
2. Import the model into an MLIR file that IREE can compile using the core
`iree-translate` tool. For TensorFlow models use `iree-import-tf`, for
TensorFlow Lite models use `iree-import-tflite`, etc. Take notes for where
the model came from and how it was imported in case the MLIR file needs to
be regenerated in the future.
We may further automate this over time, such as by importing from Python
sources as part of the benchmarks pipeline directly (see
https://github.com/google/iree/issues/6942). For now, here are some
references:
* https://gist.github.com/antiagainst/35b0989bd0188dd9df4630bb0cf778f2
* https://colab.research.google.com/gist/ScottTodd/10838c0ccc87fa6d1b1c72e0fabea064/iree-keyword_spotting_streaming-benchmarks.ipynb
3. Package the imported .mlir model file(s) for storage (see
[iree_mlir_benchmark_suite.cmake](../build_tools/cmake/iree_mlir_benchmark_suite.cmake)
and [download_file.py](../scripts/download_file.py)), then upload them to the
`iree-model-artifacts` Google Cloud Storage bucket with the help of a team
member. Files currently hosted in that bucket can be viewed at
https://storage.googleapis.com/iree-model-artifacts/index.html.
4. Edit the appropriate `CMakeLists.txt` file under this directory to include
your desired benchmark configuration with the `iree_mlir_benchmark_suite`
function. You can test your change by running the
https://buildkite.com/iree/iree-benchmark pipeline on a GitHub pull request
with the `buildkite:benchmark` label.
5. Once your changes are merged to the `main` branch, results will start to
appear on the benchmarks dashboard at https://perf.iree.dev.
### Other project metrics
TODO(#6161): Collect metrics for miscellaneous IREE system states
## Developer notes
These are ad-hoc notes added for developers to help triage errors.
### Repro of TFLite model errors
These steps help reproduce the failures in TFLite models.
1. Install `iree-import-tflite`.
```
$ python -m pip install iree-tools-tflite -f https://github.com/google/iree/releases
```
2. Confirm the binary `iree-import-tflite` is in your path by running
```
$ iree-import-tflite --help
```
3. Download the TFLite flatbuffer for the failing benchmarks. The
location can be found from [this CMakeLists.txt file](./TFLite/CMakeLists.txt)
4. The input TOSA model can be generated by running
```
$ iree-import-tflite <tflite file> -o <tosa output file>
```
5. The exact flags used to compile and run the benchmarks can be
found in [this CMakeLists.txt file](./TFLite/CMakeLists.txt)