iree

👻

Github stars Tracking Chart

IREE: Intermediate Representation Execution Environment

IREE (Intermediate Representation Execution Environment,
pronounced as "eerie") is an MLIR-based end-to-end compiler that lowers ML
models to a unified IR optimized for real-time mobile/edge inference against
heterogeneous hardware accelerators. IREE also provides flexible deployment
solutions for the compiled ML models.

Project Status

IREE is still in its early phase. We have settled down on the overarching
infrastructure and are actively improving various software components as well as
project logistics. It is still quite far from ready for everyday use and is made
available without any support at the moment. With that said, we welcome any kind
of feedback on any communication channels!

Communication Channels

  • MLIR topic within LLVM Discourse:
    IREE is enabled by and heavily relies on MLIR. IREE
    sometimes is referred to in certain MLIR discussions. Useful if you are also
    interested in MLIR evolution.

Getting Started

For development, IREE supports both Bazel and CMake on Windows and Linux. We are
working on enabling macOS support. For deployment, IREE aims to additionally
cover Android and iOS.

Please see the Getting Started
pages on IREE's documentation hub to configure,
compile, and run IREE in your favorite development environment!

Documentation and Talks

IREE hosts all its documentation and project status dashboards on
GitHub Pages. We are still building up the
website; please feel free to
create issues for the documentation
you'd like to see!

We also have some public talks that explain IREE's concepts and architecture:

  • 2020-03-18: Interactive HAL IR Walkthrough (Ben Vanik and core team)
    (recording)
  • 2020-01-31: End-to-end MLIR Workflow in IREE
    (recording
    and
    slides)

Architecture and Goals

IREE adopts a holistic approach towards ML model compilation: the IR produced
contains both the scheduling logic, required to communicate data dependencies
to low-level parallel pipelined hardware/API like Vulkan, and the execution
logic, encoding dense computation on the hardware in the form of
hardware/API-specific binaries like SPIR-V.

The architecture of IREE is best illustrated by the following picture:

IREE Architecture

Being compilation-based means IREE does not have a traditional runtime that
dispatches "ops" to their fat kernel implementations. What IREE provides is a
toolbox for different deployment scenarios. It scales from running generated
code on a particular API (such as emitting C code calling external DSP kernels),
to a HAL (Hardware Abstraction Layer) that allows the same generated
code to target multiple APIs (like Vulkan and Direct3D 12), to a full VM
allowing runtime model loading for flexible deployment options and heterogeneous
execution.

IREE aims to

  • Support advanced models on mobile/edge devices. Dynamic shapes, dynamic flow
    control, dynamic multi-model dispatch, streaming models, tree-based search
    algorithms, and other are all good examples of exciting ML evolution. We are
    trying to build IREE from the ground-up to enable these models and run them
    efficiently on modern hardware, especially on mobile/edge devices.
  • Demonstrate MLIR's ability to develop non-traditional ML compiler backends
    and runtimes. MLIR enables IREE's holistic approach of focusing on the math
    being performed and how that math is scheduled rather than graphs of "ops".
  • Embrace standard-based ML via Vulkan. The graphics world is shifting towards
    favoring modern explicit APIs for performance and predictability and Vulkan
    is emerging as the "compatibility" layer. We would love to allow hardware
    vendors to be able to make ML efficient on their hardware without the need
    for bespoke runtimes and special access. We also would love to let
    developers and users utilize all the hardware available on as many platforms
    as possible.

Roadmap and Milestones

IREE is in the early stages of development and not yet ready for broad adoption.
Check out the long-term design roadmap to get
a sense of where we're headed.

We plan on a quarterly basis using OKRs.
Review our latest objectives to get a sense of what
we're up to in the near term.

We use GitHub Projects to track
progress on IREE components and specific efforts. We use
GitHub Milestones to track the
work associated with plans for each quarter.

Build Status

CI System, Build System, Platform, Architecture, Component, Status
:-------:, :----------:, :------:, :-------------:, :------------------:, :----:
Kokoro, Bazel, Linux, x86, Core, kokoro_status_bazel_linux_x86_core
Kokoro, Bazel, Linux, x86, Bindings, kokoro_status_bazel_linux_x86_bindings
Kokoro, Bazel, Linux, x86-swiftshader, Integrations, kokoro_status_bazel_linux_x86-swiftshader_integrations
Kokoro, Bazel, Linux, x86-turing, Integrations, kokoro_status_bazel_linux_x86-turing_integrations
Kokoro, CMake, Linux, x86-swiftshader, Core + Bindings, kokoro_status_cmake_linux_x86-swiftshader
Kokoro, CMake, Linux, x86-turing, Core + Bindings, kokoro_status_cmake_linux_x86-turing
Kokoro, CMake, Android, arm64-v8a, Runtime (build only), kokoro_status_cmake_android_arm64-v8a
BuildKite, CMake, Android, arm64-v8a, Runtime, buildkite-status-cmake-android-arm

License

IREE is licensed under the terms of the Apache license. See LICENSE
for more information.

Overview

Name With Owneriree-org/iree
Primary LanguageC++
Program languageC++ (Language Count: 20)
Platform
License:Apache License 2.0
Release Count1619
Last Release Namecandidate-20240513.892 (Posted on )
First Release Namesnapshot-20210107.21 (Posted on )
Created At2019-09-12 20:57:39
Pushed At2024-05-13 14:55:16
Last Commit At
Stargazers Count2.4k
Watchers Count84
Fork Count536
Commits Count15.3k
Has Issues Enabled
Issues Count3574
Issue Open Count936
Pull Requests Count10457
Pull Requests Open Count241
Pull Requests Close Count3036
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top