From 28ecee49b605ec3afa1708a76dca702382677a36 Mon Sep 17 00:00:00 2001 From: Jack <32371937+jackzhxng@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:41:12 -0400 Subject: [PATCH 01/10] Update Voxral README.md (#14324) Remove manual pip install for transformers --- examples/models/voxtral/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/models/voxtral/README.md b/examples/models/voxtral/README.md index 5f4eeb2ff95..0e7a095af45 100644 --- a/examples/models/voxtral/README.md +++ b/examples/models/voxtral/README.md @@ -18,11 +18,6 @@ cd optimum-executorch python install_dev.py ``` -We are currently working on a Transformers pin bump for Optimum. In the meantime, manually override the Transformers dep to the earliest compatible version. -``` -pip install git+https://github.com/huggingface/transformers@6121e9e46c4fc4e5c91d9f927aef5490691850cf#egg=transformers -``` - ## Using the export CLI We export Voxtral using the Optimum CLI, which will export `model.pte` to the `voxtral` output directory: ``` From b1743dbf8a26d12a0537844ca56b1c7d0890892c Mon Sep 17 00:00:00 2001 From: Jack <32371937+jackzhxng@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:47:55 -0400 Subject: [PATCH 02/10] Update Voxtral README.md (#14414) --- examples/models/voxtral/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/models/voxtral/README.md b/examples/models/voxtral/README.md index 0e7a095af45..a9bd5c9b1af 100644 --- a/examples/models/voxtral/README.md +++ b/examples/models/voxtral/README.md @@ -44,7 +44,7 @@ The Voxtral runner will do the following things: - Feed the formatted inputs to the multimodal modal runner. -# [Option A] Exporting the audio preprocessor +## Exporting the audio preprocessor The exported model takes in a mel spectrogram input tensor as its audio inputs. We provide a simple way to transform raw audio data into a mel spectrogram by exporting a version of Voxtral's audio preprocessor used directly by Transformers. From 8da1ef2ff7468fa3ccf37c8f98081df3847dd1f3 Mon Sep 17 00:00:00 2001 From: Scott Wolchok Date: Mon, 22 Sep 2025 06:10:45 -0700 Subject: [PATCH 03/10] Fix outdated lintrunner directions (#14449) They had the wrong version, but also should just point people toward the script that will install the right version. --- CONTRIBUTING.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1edbacd598a..71e097042d7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -199,8 +199,7 @@ We use [`lintrunner`](https://pypi.org/project/lintrunner/) to help make sure th code follows our standards. Set it up with: ``` -pip install lintrunner==0.12.7 -pip install lintrunner-adapters==0.12.4 +./install_requirements.sh # (automatically run by install_executorch.sh) lintrunner init ``` From 3e72d8612e0b1ff72177f15911dffcd3cf294d4d Mon Sep 17 00:00:00 2001 From: Jack <32371937+jackzhxng@users.noreply.github.com> Date: Thu, 25 Sep 2025 17:07:18 -0400 Subject: [PATCH 04/10] Update Voxtral README.md (#14544) --- examples/models/voxtral/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/models/voxtral/README.md b/examples/models/voxtral/README.md index a9bd5c9b1af..8cac4264bba 100644 --- a/examples/models/voxtral/README.md +++ b/examples/models/voxtral/README.md @@ -27,7 +27,9 @@ optimum-cli export executorch \ --recipe "xnnpack" \ --use_custom_sdpa \ --use_custom_kv_cache \ + --max_seq_len 2048 \ --qlinear 8da4w \ + --qlinear_encoder 8da4w \ --qembedding 4w \ --output_dir="voxtral" ``` From 54f22d0a8e0c667c56ad707245dce5b2fdc44323 Mon Sep 17 00:00:00 2001 From: Gregory Comer Date: Wed, 1 Oct 2025 19:45:58 -0600 Subject: [PATCH 05/10] [Backend Tester] Update README (#14739) ### Summary Update the readme for the backend test suite to describe how to run with pytest and to generally update for recent changes. Add CLI examples for common invocation patterns (filter by test, flow, or backend) and add some brief info on the JSON report format. --- backends/test/suite/README.md | 80 +++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 23 deletions(-) diff --git a/backends/test/suite/README.md b/backends/test/suite/README.md index 564f44362ad..901cd461dbe 100644 --- a/backends/test/suite/README.md +++ b/backends/test/suite/README.md @@ -5,37 +5,71 @@ This directory contains tests that validate correctness and coverage of backends These tests are intended to ensure that backends are robust and provide a smooth, "out-of-box" experience for users across the full span of input patterns. They are not intended to be a replacement for backend-specific tests, as they do not attempt to validate performance or that backends delegate operators that they expect to. ## Running Tests and Interpreting Output -Tests can be run from the command line, either using the runner.py entry point or the standard Python unittest runner. When running through runner.py, the test runner will report test statistics, including the number of tests with each result type. +Tests can be run from the command line using pytest. When generating a JSON test report, the runner will report detailed test statistics, including output accuracy, delegated nodes, lowering timing, and more. -Backends can be specified with the `ET_TEST_ENABLED_BACKENDS` environment variable. By default, all available backends are enabled. Note that backends such as Core ML or Vulkan may require specific hardware or software to be available. See the documentation for each backend for information on requirements. +Each backend and test flow (recipe) registers a pytest [marker](https://docs.pytest.org/en/stable/example/markers.html) that can be passed to pytest with the `-m marker` argument to filter execution. -Example: +To run all XNNPACK backend operator tests: ``` -ET_TEST_ENABLED_BACKENDS=xnnpack python -m executorch.backends.test.suite.runner +pytest -c /dev/nul backends/test/suite/operators/ -m backend_xnnpack -n auto ``` +To run all model tests for the CoreML static int8 lowering flow: +``` +pytest -c /dev/nul backends/test/suite/models/ -m flow_coreml_static_int8 -n auto ``` -2465 Passed / 2494 -16 Failed -13 Skipped -[Success] -736 Delegated -1729 Undelegated +To run a specific test: +``` +pytest -c /dev/nul backends/test/suite/ -k "test_prelu_f32_custom_init[xnnpack]" +``` -[Failure] -5 Lowering Fail -3 PTE Run Fail -8 Output Mismatch Fail +To generate a JSON report: +``` +pytest -c /dev/nul backends/test/suite/operators/ -n auto --json-report --json-report-file="test_report.json" ``` -Outcomes can be interpreted as follows: - * Success (delegated): The test passed and at least one op was delegated by the backend. - * Success (undelegated): The test passed with no ops delegated by the backend. This is a pass, as the partitioner works as intended. - * Skipped: test fails in eager or export (indicative of a test or dynamo issue). - * Lowering fail: The test fails in to_edge_transform_and_lower. - * PTE run failure: The test errors out when loading or running the method. - * Output mismatch failure: Output delta (vs eager) exceeds the configured tolerance. +See [pytest-json-report](https://pypi.org/project/pytest-json-report/) for information on the report format. The test logic in this repository attaches additional metadata to each test entry under the `metadata`/`subtests` keys. One entry is created for each call to `test_runner.lower_and_run_model`. + +Here is a excerpt from a test run, showing a successful run of the `test_add_f32_bcast_first[xnnpack]` test. +```json +"tests": [ + { + "nodeid": "operators/test_add.py::test_add_f32_bcast_first[xnnpack]", + "lineno": 38, + "outcome": "passed", + "keywords": [ + "test_add_f32_bcast_first[xnnpack]", + "flow_xnnpack", + "backend_xnnpack", + ... + ], + "metadata": { + "subtests": [ + { + "Test ID": "test_add_f32_bcast_first[xnnpack]", + "Test Case": "test_add_f32_bcast_first", + "Subtest": 0, + "Flow": "xnnpack", + "Result": "Pass", + "Result Detail": "", + "Error": "", + "Delegated": "True", + "Quantize Time (s)": null, + "Lower Time (s)": "2.881", + "Output 0 Error Max": "0.000", + "Output 0 Error MAE": "0.000", + "Output 0 SNR": "inf", + "Delegated Nodes": 1, + "Undelegated Nodes": 0, + "Delegated Ops": { + "aten::add.Tensor": 1 + }, + "PTE Size (Kb)": "1.600" + } + ] + } +``` ## Backend Registration @@ -43,11 +77,11 @@ To plug into the test framework, each backend should provide an implementation o At a minimum, the backend will likely need to provide a custom implementation of the Partition and ToEdgeTransformAndLower stages using the appropriate backend partitioner. See backends/xnnpack/test/tester/tester.py for an example implementation. -Once a tester is available, the backend flow(s) can be added in __init__.py in this directory by adding an entry to `ALL_TESTER_FLOWS`. Each flow entry consists of a name (used in the test case naming) and a function to instantiate a tester for a given model and input tuple. +Once a tester is available, the backend flow(s) can be added under flows/ and registered in flow.py. It is intended that this will be unified with the lowering recipes under executorch/export in the near future. ## Test Cases -Operator test cases are defined under the operators/ directory. Tests are written in a backend-independent manner, and each test is programmatically expanded to generate a variant for each registered backend flow. The `@operator_test` decorator is applied to each test class to trigger this behavior. Tests can also be tagged with an appropriate type specifier, such as `@dtype_test`, to generate variants for each dtype. The decorators and "magic" live in __init__.py in this directory. +Operator test cases are defined under the operators/ directory. Model tests are under models/. Tests are written in a backend-independent manner, and each test is programmatically expanded to generate a variant for each registered backend flow by use of the `test_runner` fixture parameter. Tests can additionally be parameterized using standard pytest decorators. Parameterizing over dtype is a common use case. ## Evolution of this Test Suite From 441d36227869924a0a14caad07dad71512f081fb Mon Sep 17 00:00:00 2001 From: Abhinayk Date: Thu, 9 Oct 2025 14:59:32 -0700 Subject: [PATCH 06/10] Fix typos in docs ahead of GA (#14964) From c2149aff09c843932707ba82234ccaed7773ba67 Mon Sep 17 00:00:00 2001 From: Mergen Nachin Date: Mon, 13 Oct 2025 12:49:37 -0400 Subject: [PATCH 07/10] Update top-level README.md file (#15049) --- README.md | 278 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 228 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 17327990a1d..d2d115e32d2 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,250 @@
- Logo -

ExecuTorch: A powerful on-device AI Framework

+ ExecuTorch logo mark +

ExecuTorch

+

On-device AI inference powered by PyTorch

-
- Contributors - Stargazers - Join our Discord community - Check out the documentation -
+ PyPI - Version + GitHub - Contributors + GitHub - Stars + Discord - Chat with Us + Documentation
-**ExecuTorch** is an end-to-end solution for on-device inference and training. It powers much of Meta's on-device AI experiences across Facebook, Instagram, Meta Quest, Ray-Ban Meta Smart Glasses, WhatsApp, and more. +**ExecuTorch** is PyTorch's unified solution for deploying AI models on-deviceโ€”from smartphones to microcontrollersโ€”built for privacy, performance, and portability. It powers Meta's on-device AI across **Instagram, WhatsApp, Quest 3, Ray-Ban Meta Smart Glasses**, and [more](https://docs.pytorch.org/executorch/main/success-stories.html). + +Deploy **LLMs, vision, speech, and multimodal models** with the same PyTorch APIs you already knowโ€”accelerating research to production with seamless model export, optimization, and deployment. No manual C++ rewrites. No format conversions. No vendor lock-in. + +
+ ๐Ÿ“˜ Table of Contents + +- [Why ExecuTorch?](#why-executorch) +- [How It Works](#how-it-works) +- [Quick Start](#quick-start) + - [Installation](#installation) + - [Export and Deploy in 3 Steps](#export-and-deploy-in-3-steps) + - [Run on Device](#run-on-device) + - [LLM Example: Llama](#llm-example-llama) +- [Platform & Hardware Support](#platform--hardware-support) +- [Production Deployments](#production-deployments) +- [Examples & Models](#examples--models) +- [Key Features](#key-features) +- [Documentation](#documentation) +- [Community & Contributing](#community--contributing) +- [License](#license) + +
+ +## Why ExecuTorch? + +- **๐Ÿ”’ Native PyTorch Export** โ€” Direct export from PyTorch. No .onnx, .tflite, or intermediate format conversions. Preserve model semantics. +- **โšก Production-Proven** โ€” Powers billions of users at [Meta with real-time on-device inference](https://engineering.fb.com/2025/07/28/android/executorch-on-device-ml-meta-family-of-apps/). +- **๐Ÿ’พ Tiny Runtime** โ€” 50KB base footprint. Runs on microcontrollers to high-end smartphones. +- **๐Ÿš€ [12+ Hardware Backends](https://docs.pytorch.org/executorch/main/backends-overview.html)** โ€” Open-source acceleration for Apple, Qualcomm, ARM, MediaTek, Vulkan, and more. +- **๐ŸŽฏ One Export, Multiple Backends** โ€” Switch hardware targets with a single line change. Deploy the same model everywhere. + +## How It Works + +ExecuTorch uses **ahead-of-time (AOT) compilation** to prepare PyTorch models for edge deployment: + +1. **๐Ÿงฉ Export** โ€” Capture your PyTorch model graph with `torch.export()` +2. **โš™๏ธ Compile** โ€” Quantize, optimize, and partition to hardware backends โ†’ `.pte` +3. **๐Ÿš€ Execute** โ€” Load `.pte` on-device via lightweight C++ runtime + +Models use a standardized [Core ATen operator set](https://docs.pytorch.org/executorch/main/concepts.html#core-aten-operators). [Partitioners](https://docs.pytorch.org/executorch/main/compiler-delegate-and-partitioner.html) delegate subgraphs to specialized hardware (NPU/GPU) with CPU fallback. + +Learn more: [How ExecuTorch Works](https://docs.pytorch.org/executorch/main/intro-how-it-works.html) โ€ข [Architecture Guide](https://docs.pytorch.org/executorch/main/getting-started-architecture.html) + +## Quick Start + +### Installation + +```bash +pip install executorch +``` + +For platform-specific setup (Android, iOS, embedded systems), see the [Quick Start](https://docs.pytorch.org/executorch/main/quick-start-section.html) documentation for additional info. + +### Export and Deploy in 3 Steps + +```python +import torch +from executorch.exir import to_edge_transform_and_lower +from executorch.backends.xnnpack.partition.xnnpack_partitioner import XnnpackPartitioner + +# 1. Export your PyTorch model +model = MyModel().eval() +example_inputs = (torch.randn(1, 3, 224, 224),) +exported_program = torch.export.export(model, example_inputs) + +# 2. Optimize for target hardware (switch backends with one line) +program = to_edge_transform_and_lower( + exported_program, + partitioner=[XnnpackPartitioner()] # CPU | CoreMLPartitioner() for iOS | QnnPartitioner() for Qualcomm +).to_executorch() + +# 3. Save for deployment +with open("model.pte", "wb") as f: + f.write(program.buffer) + +# Test locally via ExecuTorch runtime's pybind API (optional) +from executorch.runtime import Runtime +runtime = Runtime.get() +method = runtime.load_program("model.pte").load_method("forward") +outputs = method.execute([torch.randn(1, 3, 224, 224)]) +``` + +### Run on Device + +**[C++](https://docs.pytorch.org/executorch/main/using-executorch-cpp.html)** +```cpp +#include +#include + +Module module("model.pte"); +auto tensor = make_tensor_ptr({2, 2}, {1.0f, 2.0f, 3.0f, 4.0f}); +auto outputs = module.forward({tensor}); +``` + +**[Swift (iOS)](https://docs.pytorch.org/executorch/main/ios-section.html)** +```swift +let module = Module(filePath: "model.pte") +let input = Tensor([1.0, 2.0, 3.0, 4.0]) +let outputs: [Value] = try module.forward([input]) +``` + +**[Kotlin (Android)](https://docs.pytorch.org/executorch/main/android-section.html)** +```kotlin +val module = Module.load("model.pte") +val inputTensor = Tensor.fromBlob(floatArrayOf(1.0f, 2.0f, 3.0f, 4.0f), longArrayOf(2, 2)) +val outputs = module.forward(EValue.from(inputTensor)) +``` + +### LLM Example: Llama + +Export Llama models using the [`export_llm`](https://docs.pytorch.org/executorch/main/llm/export-llm.html) script or [Optimum-ExecuTorch](https://github.com/huggingface/optimum-executorch): + +```bash +# Using export_llm +python -m executorch.extension.llm.export.export_llm --model llama3_2 --output llama.pte + +# Using Optimum-ExecuTorch +optimum-cli export executorch \ + --model meta-llama/Llama-3.2-1B \ + --task text-generation \ + --recipe xnnpack \ + --output_dir llama_model +``` -It supports a wide range of models including LLMs (Large Language Models), CV (Computer Vision), ASR (Automatic Speech Recognition), and TTS (Text to Speech). +Run on-device with the LLM runner API: -Platform Support: -- Operating Systems: - - iOS - - MacOS (ARM64) - - Android - - Linux - - Microcontrollers +**[C++](https://docs.pytorch.org/executorch/main/llm/run-with-c-plus-plus.html)** +```cpp +#include -- Hardware Acceleration: - - Apple - - Arm - - Cadence - - MediaTek - - NXP - - OpenVINO - - Qualcomm - - Vulkan - - XNNPACK +auto runner = create_llama_runner("llama.pte", "tiktoken.bin"); +executorch::extension::llm::GenerationConfig config{ + .seq_len = 128, .temperature = 0.8f}; +runner->generate("Hello, how are you?", config); +``` -Key value propositions of ExecuTorch are: +**[Swift (iOS)](https://docs.pytorch.org/executorch/main/llm/run-on-ios.html)** +```swift +let runner = TextRunner(modelPath: "llama.pte", tokenizerPath: "tiktoken.bin") +try runner.generate("Hello, how are you?", Config { + $0.sequenceLength = 128 +}) { token in + print(token, terminator: "") +} +``` -- **Portability:** Compatibility with a wide variety of computing platforms, - from high-end mobile phones to highly constrained embedded systems and - microcontrollers. -- **Productivity:** Enabling developers to use the same toolchains and Developer - Tools from PyTorch model authoring and conversion, to debugging and deployment - to a wide variety of platforms. -- **Performance:** Providing end users with a seamless and high-performance - experience due to a lightweight runtime and utilizing full hardware - capabilities such as CPUs, NPUs, and DSPs. +**Kotlin (Android)** โ€” [API Docs](https://docs.pytorch.org/executorch/main/javadoc/org/pytorch/executorch/extension/llm/package-summary.html) โ€ข [Demo App](https://github.com/meta-pytorch/executorch-examples/tree/main/llm/android/LlamaDemo) +```kotlin +val llmModule = LlmModule("llama.pte", "tiktoken.bin", 0.8f) +llmModule.load() +llmModule.generate("Hello, how are you?", 128, object : LlmCallback { + override fun onResult(result: String) { print(result) } + override fun onStats(stats: String) { } +}) +``` -## Getting Started -To get started you can: +For multimodal models (vision, audio), use the [MultiModal runner API](extension/llm/runner) which extends the LLM runner to handle image and audio inputs alongside text. See [Llava](examples/models/llava/README.md) and [Voxtral](examples/models/voxtral/README.md) examples. -- Visit the [Step by Step Tutorial](https://pytorch.org/executorch/stable/getting-started.html) to get things running locally and deploy a model to a device -- Use this [Colab Notebook](https://colab.research.google.com/drive/1qpxrXC3YdJQzly3mRg-4ayYiOjC6rue3?usp=sharing) to start playing around right away -- Jump straight into LLM use cases by following specific instructions for popular open-source models such as [Llama](examples/models/llama/README.md), [Qwen 3](examples/models/qwen3/README.md), [Phi-4-mini](examples/models/phi_4_mini/README.md), [Llava](examples/models/llava/README.md), [Voxtral](examples/models/voxtral/README.md), and [LFM2](examples/models/lfm2/README.md). +See [examples/models/llama](examples/models/llama/README.md) for complete workflow including quantization, mobile deployment, and advanced options. -## Feedback and Engagement +**Next Steps:** +- ๐Ÿ“– [Step-by-step tutorial](https://docs.pytorch.org/executorch/main/getting-started.html) โ€” Complete walkthrough for your first model +- โšก [Colab notebook](https://colab.research.google.com/drive/1qpxrXC3YdJQzly3mRg-4ayYiOjC6rue3?usp=sharing) โ€” Try ExecuTorch instantly in your browser +- ๐Ÿค– [Deploy Llama models](examples/models/llama/README.md) โ€” LLM workflow with quantization and mobile demos -We welcome any feedback, suggestions, and bug reports from the community to help -us improve our technology. Check out the [Discussion Board](https://github.com/pytorch/executorch/discussions) or chat real time with us on [Discord](https://discord.gg/Dh43CKSAdc) +## Platform & Hardware Support -## Contributing +| **Platform** | **Supported Backends** | +|------------------|----------------------------------------------------------| +| Android | XNNPACK, Vulkan, Qualcomm, MediaTek, Samsung Exynos | +| iOS | XNNPACK, MPS, CoreML (Neural Engine) | +| Linux / Windows | XNNPACK, OpenVINO, CUDA *(experimental)* | +| macOS | XNNPACK, MPS, Metal *(experimental)* | +| Embedded / MCU | XNNPACK, ARM Ethos-U, NXP, Cadence DSP | -We welcome contributions. To get started review the [guidelines](CONTRIBUTING.md) and chat with us on [Discord](https://discord.gg/Dh43CKSAdc) +See [Backend Documentation](https://docs.pytorch.org/executorch/main/backends-overview.html) for detailed hardware requirements and optimization guides. +## Production Deployments -## Directory Structure +ExecuTorch powers on-device AI at scale across Meta's family of apps, VR/AR devices, and partner deployments. [View success stories โ†’](https://docs.pytorch.org/executorch/main/success-stories.html) -Please refer to the [Codebase structure](CONTRIBUTING.md#codebase-structure) section of the [Contributing Guidelines](CONTRIBUTING.md) for more details. +## Examples & Models + +**LLMs:** [Llama 3.2/3.1/3](examples/models/llama/README.md), [Qwen 3](examples/models/qwen3/README.md), [Phi-4-mini](examples/models/phi_4_mini/README.md), [LiquidAI LFM2](examples/models/lfm2/README.md) + +**Multimodal:** [Llava](examples/models/llava/README.md) (vision-language), [Voxtral](examples/models/voxtral/README.md) (audio-language) + +**Vision/Speech:** [MobileNetV2](https://github.com/meta-pytorch/executorch-examples/tree/main/mv2), [DeepLabV3](https://github.com/meta-pytorch/executorch-examples/tree/main/dl3) + +**Resources:** [`examples/`](examples/) directory โ€ข [executorch-examples](https://github.com/meta-pytorch/executorch-examples) mobile demos โ€ข [Optimum-ExecuTorch](https://github.com/huggingface/optimum-executorch) for HuggingFace models + +## Key Features + +ExecuTorch provides advanced capabilities for production deployment: + +- **Quantization** โ€” Built-in support via [torchao](https://docs.pytorch.org/ao) for 8-bit, 4-bit, and dynamic quantization +- **Memory Planning** โ€” Optimize memory usage with ahead-of-time allocation strategies +- **Developer Tools** โ€” ETDump profiler, ETRecord inspector, and model debugger +- **Selective Build** โ€” Strip unused operators to minimize binary size +- **Custom Operators** โ€” Extend with domain-specific kernels +- **Dynamic Shapes** โ€” Support variable input sizes with bounded ranges + +See [Advanced Topics](https://docs.pytorch.org/executorch/main/advanced-topics-section.html) for quantization techniques, custom backends, and compiler passes. + +## Documentation + +- [**Documentation Home**](https://docs.pytorch.org/executorch/main/index.html) โ€” Complete guides and tutorials +- [**API Reference**](https://docs.pytorch.org/executorch/main/api-section.html) โ€” Python, C++, Java/Kotlin APIs +- [**Backend Integration**](https://docs.pytorch.org/executorch/main/backend-delegates-integration.html) โ€” Build custom hardware backends +- [**Troubleshooting**](https://docs.pytorch.org/executorch/main/using-executorch-troubleshooting.html) โ€” Common issues and solutions + +## Community & Contributing + +We welcome contributions from the community! + +- ๐Ÿ’ฌ [**GitHub Discussions**](https://github.com/pytorch/executorch/discussions) โ€” Ask questions and share ideas +- ๐ŸŽฎ [**Discord**](https://discord.gg/Dh43CKSAdc) โ€” Chat with the team and community +- ๐Ÿ› [**Issues**](https://github.com/pytorch/executorch/issues) โ€” Report bugs or request features +- ๐Ÿค [**Contributing Guide**](CONTRIBUTING.md) โ€” Guidelines and codebase structure ## License -ExecuTorch is BSD licensed, as found in the LICENSE file. + +ExecuTorch is BSD licensed, as found in the [LICENSE](LICENSE) file. + +

+ +--- + +
+

Part of the PyTorch ecosystem

+

+ GitHub โ€ข + Documentation +

+
From dc21d281c1845a873e7ab9b2d8b3e436bcb32502 Mon Sep 17 00:00:00 2001 From: Mergen Nachin Date: Mon, 13 Oct 2025 13:06:34 -0400 Subject: [PATCH 08/10] Fix documentation link for Core ATen operators (#15050) Updated link to Core ATen operator set documentation. ### Summary [PLEASE REMOVE] See [CONTRIBUTING.md's Pull Requests](https://github.com/pytorch/executorch/blob/main/CONTRIBUTING.md#pull-requests) for ExecuTorch PR guidelines. [PLEASE REMOVE] If this PR closes an issue, please add a `Fixes #` line. [PLEASE REMOVE] If this PR introduces a fix or feature that should be the upcoming release notes, please add a "Release notes: " label. For a list of available release notes labels, check out [CONTRIBUTING.md's Pull Requests](https://github.com/pytorch/executorch/blob/main/CONTRIBUTING.md#pull-requests). ### Test plan [PLEASE REMOVE] How did you test this PR? Please write down any manual commands you used and note down tests that you have written if applicable. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2d115e32d2..531fcc3b4ef 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ ExecuTorch uses **ahead-of-time (AOT) compilation** to prepare PyTorch models fo 2. **โš™๏ธ Compile** โ€” Quantize, optimize, and partition to hardware backends โ†’ `.pte` 3. **๐Ÿš€ Execute** โ€” Load `.pte` on-device via lightweight C++ runtime -Models use a standardized [Core ATen operator set](https://docs.pytorch.org/executorch/main/concepts.html#core-aten-operators). [Partitioners](https://docs.pytorch.org/executorch/main/compiler-delegate-and-partitioner.html) delegate subgraphs to specialized hardware (NPU/GPU) with CPU fallback. +Models use a standardized [Core ATen operator set](https://docs.pytorch.org/executorch/main/compiler-ir-advanced.html#intermediate-representation). [Partitioners](https://docs.pytorch.org/executorch/main/compiler-delegate-and-partitioner.html) delegate subgraphs to specialized hardware (NPU/GPU) with CPU fallback. Learn more: [How ExecuTorch Works](https://docs.pytorch.org/executorch/main/intro-how-it-works.html) โ€ข [Architecture Guide](https://docs.pytorch.org/executorch/main/getting-started-architecture.html) From 2d82a9399e1e38ccd76e261fbe978518110717ca Mon Sep 17 00:00:00 2001 From: Mergen Nachin Date: Mon, 13 Oct 2025 15:23:07 -0400 Subject: [PATCH 09/10] Use new logo in ExecuTorch (#14782) Summary: Copied assets from https://github.com/dbort/executorch-logos/ --- .../_static/img/ExecuTorch-Logo-cropped.svg | 57 ----- .../img/executorch-chip-logo-circle-16.png | Bin 0 -> 632 bytes .../img/executorch-chip-logo-circle-32.png | Bin 0 -> 1925 bytes .../_static/img/executorch-chip-logo.svg | 205 ++++++++++++++++++ docs/source/conf.py | 2 +- 5 files changed, 206 insertions(+), 58 deletions(-) delete mode 100644 docs/source/_static/img/ExecuTorch-Logo-cropped.svg create mode 100644 docs/source/_static/img/executorch-chip-logo-circle-16.png create mode 100644 docs/source/_static/img/executorch-chip-logo-circle-32.png create mode 100644 docs/source/_static/img/executorch-chip-logo.svg diff --git a/docs/source/_static/img/ExecuTorch-Logo-cropped.svg b/docs/source/_static/img/ExecuTorch-Logo-cropped.svg deleted file mode 100644 index 9e0ef52fbd8..00000000000 --- a/docs/source/_static/img/ExecuTorch-Logo-cropped.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - diff --git a/docs/source/_static/img/executorch-chip-logo-circle-16.png b/docs/source/_static/img/executorch-chip-logo-circle-16.png new file mode 100644 index 0000000000000000000000000000000000000000..a3966ae27db497d0ca07c438fd6eec1e339fde77 GIT binary patch literal 632 zcmV-;0*C#HP)MS_0JYUE>9(YtB&%2~s#dGXvMlxY_iJoyOp*dg4<%ibv?WO)sT+7p zTaM$9N~NfOU%>M`GMNnH_!633*ClW!FjuY;mAO1ZaBDL9 zlB&w(@ zt*-8zoB*tBHv1!yNGPArt6r}wHgrVIXD>SZJb$U!&`~uS4ULYDs<*dSnM`I;?G3}W zZBnTezh>v~2agjxc?w%wu(?U_=rMls7%QJXlgs5O6bfNwCDB?>vlHUI`+&Ka#y@lz z|KI>-_!2AcKSs?4NQAZA3r|Cc>$+eJ_&%QJMa{Iwzuk~7;LUE3JyvHU;b*!p>AEC8I+8GwzywgOR4VJ!)6?rf6(|9TX#QU{jHka- Sl?Pe?000082 literal 0 HcmV?d00001 diff --git a/docs/source/_static/img/executorch-chip-logo-circle-32.png b/docs/source/_static/img/executorch-chip-logo-circle-32.png new file mode 100644 index 0000000000000000000000000000000000000000..83f1018a76c3e35d59ae6ec57cbcfe8fcadeab33 GIT binary patch literal 1925 zcmV;02YUF4P)iwz_T z6!S90Bzuub%s{MJn^wF`kj%ow8q7$Ox)nt~T`HqOZBqA0O`SSMMeG$1QBDX~3uOjki z5lKFkRbap8DDXD0dF|RY_LIfMMSxAii8)r>bbHqzeS&c?<@5pX;n z$L)4gUtg~u{tWN|2R<)>Bfvj3E7Q}{B$G+f=`=Q*4YS!yG#X`jd6}CxZ?d|&N_lxX zR;!iG%}q8pH<_84(G$52JhvOxGrO$H%ObKUBHz*mZr!>i4u?ZlR#s$qcvvbcDSZR;yJ81_tELojcOp+$@nuL~pZ3L~e-4i~Hrk5#VEu_So1Mu~-ZM zyWNh-WFj06bN>8!M1-NCAx1_<5E1(O`?7N(}Ah{a;Gw6t*U+&M&q;o)Hti3F)sic6O+AtH2lcjIt4h(@DaxpIZd z%1VO4;LdbeLd~xt0_Qc2(a}*tp%4I_ot=mXe!rg!7cLZlEARaspn$~Lvu7C`97IHL zyWIfH&CM}6IjJY%-AUjmx@?cdVpuE|y1KfE$K$wMt|HHs_akJj-^^Rw8Hv``R^stE z9*>8LiVC99sGdMlTMCW9+W>(;fS#Tn0463T5D{E1SFz`d?~}EBgY5Ad)tsV0YO^R3 zE|&`tVSIdCb=&LJFUji~frF@pgJd#EU0oe^yPa4phTres-SbKnT=~yE0CKzZqx zYv2IN-Fqlk|D=9w7DvMAbYe6bi9{k~G8vkin^{;`0C-J+O8^}m9aybaLZJ}haJbm> zyZ6W*JzfN^7v-II$-Yzr|NF2g60@_j%+AhYv)O2CYeP{KfHwrV0ct5Vo6XeJ)a3WM z1`e?G<5Of`IEM1C)m^~>lp9NApR=*`)1MV3W`BP_)z#IMm6Z{X$F*Os3-F2d6^%ye z@9!@H=hIKgK5rv;`WJhGYqHh)bFzoO1`iTNB>MXLSXo)otA8ZGBkgN>c^QMjz|hbT z$z<}eXV(_V9 zPjUEpmEiin_r+&zTjwi>MMUJ`!-o2`)k;T4 zhxXU+1^E8L!UE0B&15neB9RD2qYfBG-$fVPGaIe>k)9J)yGO@I@L^_?Osi{dTMBfvj6tygpNF=DOt;OMRu(q~_ z&*v+Q#Qpo^e1l}a`gO90EQQYt$H@KW0-02*z;nOfPb?P0ZnslcSEt`yDWFt4jNSqW z27`FLUI50&$Mc6#K_n6h`1liYf4EGpx1U^(m)!Uy#6KzsyVvW@A4XbJ($mvJAP~?9 zyov5KJc8Ol0%}33sHni>@eq&4X>DyS%88w_bIn~Y7x8$UuC6XD7E8Xf+LlLvl^qR< zPn(^boMdip4gj~?jfgNfI9MEsUBJCwFMhut5uvlQ6Hq&=(a}*ofnT#nOLkqa6$}Qc ztgPh9l`E{SuHtYwiXySo^OlwtVzC%gQ&U(hmV9TWllOpUcOxLEUCIZV=ETGV>+9

lq9uC5Y^M2JKpM59s6W-~UMjdVIqGMQw0dU|Kr%XhO=bQ9t|$_!YV}|2zcrdGR`s+P-)`QMNCzDc}vZ zx7w2)1G^lNdq}CM*Yj6JXe!Nr0%6!00000 LNkvXXu0mjfCt0oV literal 0 HcmV?d00001 diff --git a/docs/source/_static/img/executorch-chip-logo.svg b/docs/source/_static/img/executorch-chip-logo.svg new file mode 100644 index 00000000000..11e5ed60956 --- /dev/null +++ b/docs/source/_static/img/executorch-chip-logo.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/conf.py b/docs/source/conf.py index f1869d38a46..ac9d7458222 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -74,7 +74,7 @@ "xml", # {repo_root}/docs/cpp/build/xml ) -html_favicon = "_static/img/ExecuTorch-Logo-cropped.svg" +html_favicon = "_static/img/executorch-chip-logo.svg" # Get ET_VERSION_DOCS during the build. et_version_docs = os.environ.get("ET_VERSION_DOCS", None) From 3d313e9fbef2ef7f44daedc5531ee9d573948a06 Mon Sep 17 00:00:00 2001 From: Mergen Nachin Date: Mon, 13 Oct 2025 16:51:39 -0400 Subject: [PATCH 10/10] Fix various minor links in top-level README.md (#15052) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 531fcc3b4ef..66be37bedc8 100644 --- a/README.md +++ b/README.md @@ -200,9 +200,9 @@ ExecuTorch powers on-device AI at scale across Meta's family of apps, VR/AR devi **Multimodal:** [Llava](examples/models/llava/README.md) (vision-language), [Voxtral](examples/models/voxtral/README.md) (audio-language) -**Vision/Speech:** [MobileNetV2](https://github.com/meta-pytorch/executorch-examples/tree/main/mv2), [DeepLabV3](https://github.com/meta-pytorch/executorch-examples/tree/main/dl3) +**Vision/Speech:** [MobileNetV2](https://github.com/meta-pytorch/executorch-examples/tree/main/mv2), [DeepLabV3](https://github.com/meta-pytorch/executorch-examples/tree/main/dl3), [Whisper](https://github.com/meta-pytorch/executorch-examples/tree/main/whisper/android/WhisperApp) -**Resources:** [`examples/`](examples/) directory โ€ข [executorch-examples](https://github.com/meta-pytorch/executorch-examples) mobile demos โ€ข [Optimum-ExecuTorch](https://github.com/huggingface/optimum-executorch) for HuggingFace models +**Resources:** [`examples/`](examples/) directory โ€ข [executorch-examples](https://github.com/meta-pytorch/executorch-examples) out-of-tree demos โ€ข [Optimum-ExecuTorch](https://github.com/huggingface/optimum-executorch) for HuggingFace models ## Key Features @@ -222,7 +222,7 @@ See [Advanced Topics](https://docs.pytorch.org/executorch/main/advanced-topics-s - [**Documentation Home**](https://docs.pytorch.org/executorch/main/index.html) โ€” Complete guides and tutorials - [**API Reference**](https://docs.pytorch.org/executorch/main/api-section.html) โ€” Python, C++, Java/Kotlin APIs - [**Backend Integration**](https://docs.pytorch.org/executorch/main/backend-delegates-integration.html) โ€” Build custom hardware backends -- [**Troubleshooting**](https://docs.pytorch.org/executorch/main/using-executorch-troubleshooting.html) โ€” Common issues and solutions +- [**Troubleshooting**](https://docs.pytorch.org/executorch/main/support-section.html) โ€” Common issues and solutions ## Community & Contributing