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".