diff --git a/README.md b/README.md
index 3860c0dd..28f8f343 100644
--- a/README.md
+++ b/README.md
@@ -31,13 +31,13 @@ application.
The pack [`PyTorch::ExecuTorch`](https://www.keil.arm.com/packs/executorch-pytorch/) can be optionally installed manually with:
```bash
-cpackget add PyTorch::ExecuTorch@1.4.1
+cpackget add PyTorch::ExecuTorch@1.5.1
```
> [!Note]
> The pack and Python exporter versions must match, as the generated `.pte`
-> format is consumed by the runtime supplied in `PyTorch::ExecuTorch@1.4.1`.
-> The matching wheel is `executorch==1.4.1` from PyPI, pinned in
+> format is consumed by the runtime supplied in `PyTorch::ExecuTorch@1.5.1`.
+> The matching wheel is `executorch==1.5.1` from PyPI, pinned in
> `requirements.txt`.
## Quick start
@@ -73,7 +73,7 @@ Ethos-U version info:
Arch: v2.0.0
MACs/cc: 256
Cmd stream: v1
-ExecuTorch Ethos-U85 example: 8832 byte model
+ExecuTorch Ethos-U85 example: 8784 byte model
Output: 10 element(s): 0.0079 0.0459 0.0475 -0.0475 0.0791 0.0411 -0.0285 -0.0744 -0.2246 -0.0016
Test_result: PASS
```
diff --git a/RTE/_Debug_SSE-320-U85/Pre_Include_Global.h b/RTE/_Debug_SSE-320-U85/Pre_Include_Global.h
index 37e190f9..83d53110 100644
--- a/RTE/_Debug_SSE-320-U85/Pre_Include_Global.h
+++ b/RTE/_Debug_SSE-320-U85/Pre_Include_Global.h
@@ -12,10 +12,10 @@
/* ARM::Machine Learning:NPU Support:Ethos-U Driver&Generic U85@1.26.2 */
// enabling global pre includes
#define ETHOSU_ARCH u85
-/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.5.1 */
#define EXECUTORCH_BUILD_ARM_BAREMETAL 1
#define ET_USE_ETHOS_U_BACKEND 1
-/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.5.1 */
/* ExecuTorch global configuration */
#define C10_USING_CUSTOM_GENERATED_MACROS
#define FLATBUFFERS_MAX_ALIGNMENT 1024
diff --git a/RTE/_Debug_SSE-320-U85/RTE_Components.h b/RTE/_Debug_SSE-320-U85/RTE_Components.h
index 571f80b4..a80a87c2 100644
--- a/RTE/_Debug_SSE-320-U85/RTE_Components.h
+++ b/RTE/_Debug_SSE-320-U85/RTE_Components.h
@@ -30,17 +30,17 @@
#define RTE_TIMEOUT 1
/* ARM::Machine Learning:NPU Support:Ethos-U Driver&Generic U85@1.26.2 */
#define RTE_ETHOS_U_CORE_DRIVER
-/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized dequantize@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized dequantize@1.5.1 */
#define RTE_ML_EXECUTORCH_OP_QUANTIZED_DEQUANTIZE /* ExecuTorch op_dequantize */
-/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized quantize@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized quantize@1.5.1 */
#define RTE_ML_EXECUTORCH_OP_QUANTIZED_QUANTIZE /* ExecuTorch op_quantize */
-/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.5.1 */
#define RTE_ML_EXECUTORCH_BACKEND_ETHOS_U /* ExecuTorch Ethos-U Backend (Cortex-M host) */
-/* PyTorch::Machine Learning:ExecuTorch:Kernel Registration@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch:Kernel Registration@1.5.1 */
#define RTE_ML_EXECUTORCH_KERNEL_REGISTRATION /* ExecuTorch Kernel Registration */
-/* PyTorch::Machine Learning:ExecuTorch:Kernel Utils@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch:Kernel Utils@1.5.1 */
#define RTE_ML_EXECUTORCH_KERNEL_UTILS /* ExecuTorch Kernel Utils */
-/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.4.1 */
+/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.5.1 */
#define RTE_ML_EXECUTORCH_RUNTIME /* ExecuTorch Runtime */
diff --git a/ai_layer/ai_layer.clayer.yml b/ai_layer/ai_layer.clayer.yml
index 1322ac2c..87928945 100644
--- a/ai_layer/ai_layer.clayer.yml
+++ b/ai_layer/ai_layer.clayer.yml
@@ -6,7 +6,7 @@ layer:
description: TinyCNN int8 image classifier for Ethos-U85
packs:
- - pack: PyTorch::ExecuTorch@1.4.1
+ - pack: PyTorch::ExecuTorch@1.5.1
define:
- ET_LOG_ENABLED: 0
diff --git a/ai_layer/model_pte.c b/ai_layer/model_pte.c
index dd1ffd5c..6de9411d 100644
--- a/ai_layer/model_pte.c
+++ b/ai_layer/model_pte.c
@@ -3,10 +3,10 @@ __attribute__((aligned(16))) const unsigned char model_pte[] = {
0x24, 0x00, 0x00, 0x00, 0x45, 0x54, 0x31, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00,
0x08, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
- 0x2c, 0x00, 0x00, 0x00, 0x8c, 0x1a, 0x00, 0x00, 0x8c, 0x1a, 0x00, 0x00, 0xf0, 0xe1, 0xff, 0xff,
+ 0x2c, 0x00, 0x00, 0x00, 0x8c, 0x1a, 0x00, 0x00, 0x8c, 0x1a, 0x00, 0x00, 0x20, 0xe2, 0xff, 0xff,
0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x72, 0xdf, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x50, 0x1a, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x50, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0xa2, 0xdf, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x50, 0x1a, 0x00, 0x00,
0x76, 0x65, 0x6c, 0x61, 0x5f, 0x62, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x63, 0x6d, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -430,23 +430,20 @@ __attribute__((aligned(16))) const unsigned char model_pte[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00,
0x28, 0x00, 0x24, 0x00, 0x20, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00,
- 0x08, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
- 0x28, 0x02, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x94, 0x03, 0x00, 0x00,
- 0x98, 0x03, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x6c, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+ 0xf8, 0x01, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, 0x60, 0x03, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00,
+ 0x68, 0x03, 0x00, 0x00, 0xf0, 0x05, 0x00, 0x00, 0x3c, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x72, 0xfd, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
- 0xd0, 0x01, 0x00, 0x00, 0xd0, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00,
- 0xd0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x38, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa6, 0xfd, 0xff, 0xff,
+ 0x0c, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x54, 0x01, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x68, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x0d, 0x00, 0x00, 0x00, 0x65, 0x74, 0x68, 0x6f, 0x73, 0x2d, 0x75, 0x38, 0x35, 0x2d, 0x32, 0x35,
0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00,
- 0x64, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x94, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x46, 0x61, 0x6c, 0x73, 0x65, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x70, 0x72, 0x65, 0x73,
0x65, 0x72, 0x76, 0x65, 0x5f, 0x69, 0x6f, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x7a, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x9c, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x70, 0x75,
- 0x74, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x61, 0x72,
- 0x6f, 0x75, 0x6e, 0x64, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x76, 0x65, 0x6c, 0x61, 0x0d, 0x00, 0x00, 0x00,
0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x00, 0x00, 0x00,
0xf4, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00,
diff --git a/cmsis-executorch.cproject.yml b/cmsis-executorch.cproject.yml
index 5128d15f..62ac0773 100644
--- a/cmsis-executorch.cproject.yml
+++ b/cmsis-executorch.cproject.yml
@@ -7,7 +7,7 @@
# the Board layer brings the board bring-up.
project:
packs:
- - pack: PyTorch::ExecuTorch@1.4.1
+ - pack: PyTorch::ExecuTorch@1.5.1
- pack: ARM::CMSIS
misc:
diff --git a/cmsis-executorch.csolution.yml b/cmsis-executorch.csolution.yml
index acb57444..8f034c95 100644
--- a/cmsis-executorch.csolution.yml
+++ b/cmsis-executorch.csolution.yml
@@ -20,7 +20,7 @@ solution:
# Pinned exactly: the pack's C++ runtime and the Python exporter pinned in
# requirements.txt must be the same ExecuTorch version, or the .pte fails
# to load. `cbuild setup --packs` fetches it from the public index.
- - pack: PyTorch::ExecuTorch@1.4.1
+ - pack: PyTorch::ExecuTorch@1.5.1
- pack: ARM::CMSIS
- pack: ARM::CMSIS-NN
- pack: ARM::CMSIS-Compiler
diff --git a/documentation/pack-provenance.md b/documentation/pack-provenance.md
index 6fb19ab9..5cf2144a 100644
--- a/documentation/pack-provenance.md
+++ b/documentation/pack-provenance.md
@@ -11,14 +11,14 @@ The pack is published as an asset of the matching ExecuTorch GitHub release,
which is also what its `.pdsc` declares as its download location:
```xml
-https://github.com/pytorch/executorch/releases/download/v1.4.1/
+https://github.com/pytorch/executorch/releases/download/v1.5.1/
```
So the normal acquisition routes work, and `cbuild setup ... --packs` takes
care of it on a fresh clone. To install it by hand:
```bash
-cpackget add PyTorch::ExecuTorch@1.4.1
+cpackget add PyTorch::ExecuTorch@1.5.1
```
The version is pinned exactly, in `cmsis-executorch.csolution.yml` and
@@ -26,10 +26,10 @@ The version is pinned exactly, in `cmsis-executorch.csolution.yml` and
```yaml
packs:
- - pack: PyTorch::ExecuTorch@1.4.1
+ - pack: PyTorch::ExecuTorch@1.5.1
```
-Both must agree. The pin is exact rather than a `@^1.4.1` range because the
+Both must agree. The pin is exact rather than a `@^1.5.1` range because the
pack's C++ runtime and the Python exporter have to be the *same* ExecuTorch
version — see [Moving to a new ExecuTorch version](#moving-to-a-new-executorch-version).
@@ -63,7 +63,7 @@ ExecuTorch tree at `backends/arm/cmsis_pack/scripts/build_pack.sh`.
```bash
git clone https://github.com/pytorch/executorch.git
cd executorch
-git checkout release/1.4 # or the tag matching your target version
+git checkout release/1.5 # or the tag matching your target version
git submodule update --init --recursive
```
@@ -111,7 +111,7 @@ them); the pack lands in the output directory:
backends/arm/cmsis_pack/scripts/build_pack.sh \
--executorch-root "$PWD" \
--build-dir cmake-out-arm \
- --version 1.4.1-local \
+ --version 1.5.1-local \
--output-dir pack-output
```
@@ -120,7 +120,7 @@ backends/arm/cmsis_pack/scripts/build_pack.sh \
Before trusting a freshly built pack, check the parts that go missing quietly:
```bash
-VERSION=1.4.1-local
+VERSION=1.5.1-local
PACK=pack-output/PyTorch.ExecuTorch.$VERSION
set -e
@@ -158,7 +158,8 @@ in order:
2. **Update both pins** — `PyTorch::ExecuTorch@` in the csolution and in
the cproject.
3. **Update the Python pins**: `executorch`, `torch` and `torchao` in
- `requirements.txt`, following the new release's `install_requirements.py`;
+ `requirements.txt`, following the new release's `torch_pin.py` and
+ `install_requirements.py`;
`requirements-arm-tosa.txt` (the TOSA serializer and its flatbuffers pin)
only changes when the Arm backend's `requirements-arm-tosa.txt` does.
4. **Rebuild the venv, the AI layer and the project:**
diff --git a/requirements.txt b/requirements.txt
index 1fd6d11f..75f8ff19 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,12 +3,13 @@
#
# executorch, torch and torchao must match: a .pte exported by one ExecuTorch
# version only loads in the runtime of the same version, and that runtime is
-# the PyTorch::ExecuTorch@1.4.1 pack pinned in the csolution. ExecuTorch 1.4.1
-# targets torch 2.13.0 and torchao 0.18.0 (install_requirements.py on the
-# release/1.4 branch); prebuilt wheels exist for Linux, macOS and Windows,
-# Python 3.10 to 3.14 (the export venv stays below 3.14: see requirements-arm-tosa.txt).
-executorch==1.4.1
-torch==2.13.0
+# the PyTorch::ExecuTorch@1.5.1 pack pinned in the csolution. ExecuTorch 1.5.1
+# targets torch 2.14.0 (torch_pin.py at the v1.5.1 tag) and torchao 0.18
+# (the wheel requires torchao>=0.18.0,<0.19); prebuilt wheels exist for Linux,
+# macOS and Windows, Python 3.10 to 3.14 (the export venv stays below 3.14:
+# see requirements-arm-tosa.txt).
+executorch==1.5.1
+torch==2.14.0
torchao==0.18.0
# Vela, the Ethos-U compiler. Same pin as executorch's `ethos_u` extra.
diff --git a/setup_venv.py b/setup_venv.py
index 4e987584..0d79bc06 100755
--- a/setup_venv.py
+++ b/setup_venv.py
@@ -22,7 +22,7 @@
HERE = Path(__file__).resolve().parent
VENV_DIR = HERE / ".venv"
-# ExecuTorch 1.4 declares requires-python = ">=3.10,<3.15" in its pyproject.toml,
+# ExecuTorch 1.5 declares requires-python = ">=3.10,<3.15" in its pyproject.toml,
# but the tosa-tools 2026.5.0 it pins for the Arm backend (see
# requirements-arm-tosa.txt) only ships wheels up to CPython 3.13, so on 3.14
# pip reports "No matching distribution found for tosa-tools==2026.5.0".