A unified ML software stack within the PyTorch platform for edge devices. It defines new compiler entry points as well as a state-of-art runtime.
Compared to the legacy Lite Interpreter, there are some major benefits:
- Performance wins compared to Lite Interpreter
- Faster (orders of magnitude lower framework tax in both DSP and CPU)
- Much smaller binary size, 1.5 MB vs 30 KB without operators.
- Smaller memory footprint because we do ahead of time memory planning in ExecuTorch and also have clear granular control over where the runtime allocations are done.
- Long term alignment with the direction of PyTorch infrastructure
- Lite Interpreter relies on TorchScript, which is being phased out; ExecuTorch is the planned replacement for Lite Interpreter.
- Model Authoring & Productivity gains
- More and better defined entry points to perform model, device, and/or use-case specific optimizations (e.g. better backend delegation, user-defined compiler transformations, default or user-defined memory planning, etc)
- Ability to lower constructs like dynamic control flow to run on device.
- Minimal binary size (< 50KB not including kernels)
- Minimal framework tax: loading program, initializing executor, kernel and backend-delegate dispatch, runtime memory utilization
- Portable (cross-compile across many toolchains)
- Executes ATen kernels (or ATen custom kernels)
- Executes custom op kernels
- Supports inter op asynchronous execution
- Supports static memory allocation (heapless)
- Supports custom allocation across memory hierarchies
- Supports control flow needed by models
- Allows selective build of kernels
- Allows backend delegation with lightweight interface
- Basics: Terminology
- Wiki (internal-only)
- Static docs website (internal-only)
- Testing (internal-only)
- Setting up ExecuTorch from GitHub
- (Optional) Building with CMake
- Exporting to Executorch
- Executorch Google Colab
executorch
├── backends # 1st party backend implementations.
| ├── xnnpack
| ├── vulkan
| ├── backend_api.py # TODO move to exir/backend
| ├── backend_details.py # TODO move to exir/backend
| ├── partioner.py # TODO move to exir/backend
├── build # Utilities for managing the build system.
├── bundled_program # Utilities for attaching reference inputs and outputs to models. TODO move to extension
├── codegen # Tooling to autogenerate bindings between kernels and the runtime. TODO move to tool
├── configurations # TODO delete this
├── docs # Static docs tooling
├── examples # Examples of various user flows, such as model export, delegates, and runtime execution.
| ├── executor_runner
| ├── export
| ├── models
├── exir # Ahead of time library, model capture and lowering apis.
| ├── capture # Program capture.
| ├── dialects # Op sets for various dialects in the export process.
| ├── emit # Conversion from ExportedProgram to Executorch execution instructions.
| ├── program # Export artifacts.
| ├── serialize # Serialize final export artifact.
├── extension # Extensions built on top of the runtime.
| ├── aten_util
| ├── data_loader # 1st party data loader implementations.
| ├── memory_allocator # 1st party memory allocator implementations.
| ├── pybindings # Python api for executorch runtime.
| ├── pytree # C++ and Python flattening and unflattening lib for pytrees.
| ├── testing_util
├── kernels # 1st party kernel implementations.
| ├── aten
| ├── optimized
| ├── portable # Reference implementations of ATen operators.
| ├── prim_ops # Special ops used in executorch runtime for control flow and symbolic primitives.
| ├── quantized
├── profiler # Utilities for profiling. TODO delete in favor of ETDump in sdk/
├── runtime # core cpp runtime of executorch
| ├── backend # Backend definition and registration.
| ├── core # Core structures used across all levels of the runtime
| ├── executor # Model loading, initalization, and execution.
| ├── kernel # Kernel registration and management.
| ├── platform # Layer between architecture specific code and user calls.
├── schema # Executorch program definition, TODO move under serialization/
├── scripts # Utility scripts for size management, dependency management, etc.
├── sdk # Model profiling, debugging, and introspection: NOT READY YET FOR OSS USE
├── shim # Compatibility layer between OSS and Internal builds
├── test # Broad scoped end2end tests
├── third-party # third-party dependencies
├── util # TODO delete this
ExecuTorch is BSD licensed, as found in the LICENSE file.