Skip to content

[2.15] Pin ExecuTorch 1.6.0 - #4950

Draft
shoumikhin wants to merge 3 commits into
pytorch:release/2.15from
shoumikhin:et16-pin
Draft

shoumikhin wants to merge 3 commits into
pytorch:release/2.15from
shoumikhin:et16-pin

Conversation

@shoumikhin

@shoumikhin shoumikhin commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Moves the ExecuTorch pin on release/2.15 from the nightly 1.6.0.dev20261009 to executorch==1.6.0, so 2.15 ships against an ExecuTorch release instead of a nightly.

Which build this points at. The source commit pin is ExecuTorch's v1.6.0-rc1 tag (72afc214), the first release candidate. The 1.6.0 wheels on PyTorch's test channel are built from that commit, and each wheel records it in executorch/version.py. If ExecuTorch cuts a later release candidate, the pin moves to that commit. The final 1.6.0 keeps the same version string.

Where 1.6.0 comes from. 1.6.0 is on PyTorch's test channel (download.pytorch.org/whl/test/<cuda>), but not on PyPI yet. Until it is on PyPI, the pin resolves from the test channel. The build workflows already install ExecuTorch from there. The nightly channel does not carry releases, so the places that only looked there now name the test channel too (see below).

What changed:

  • Every pin site moves together. The change was made with the repository's own updater (write_pins in .github/scripts/update_executorch_pin.py), so dev_dep_versions.yml, the two files in packaging/, the MODULE.bazel files, the justfile, and the delegate's pyproject.toml and README all agree.
  • uv.lock is refreshed with PYTHON_ONLY=1 uv lock --prerelease=allow. ExecuTorch moves from 1.6.0.dev20261015+cu132 on the nightly channel to 1.6.0+cu134 on the test channel, the same CUDA 13.4 channel the lock already takes torch from. hypothesis, kgb and sortedcontainers leave the lock, because the 1.6.0 wheel no longer depends on them.
  • The test runner's executorch setup step (tests/ci/runner.py) looked only at the nightly channel, so with the 1.6.0 pin the ExecuTorch test suites could not install it ("No matching distribution found for executorch==1.6.0"). It now names the nightly and test channels, the same way the build workflows do. The justfile's install-test-ext names the test channel as well.
  • Comments and build error messages that called the pinned ExecuTorch a nightly are corrected. No behavior changes there.
  • The 0.2.1 delegate (torch-tensorrt-executorch-runtime) is built in CI against the installed 1.6.0 wheel. Its build refuses any ExecuTorch other than the pin, so it is rebuilt as part of this change.

Tested:

  • tests/py/dynamo/executorch/test_executorch_pin.py and test_update_executorch_pin.py pass.
  • uv lock --check --prerelease=allow passes on Linux with uv 0.12.5, the version CI uses.
  • Checked that the 1.6.0 wheels for Linux x86_64, Linux aarch64 and Windows record commit 72afc214.

@meta-cla meta-cla Bot added the cla signed label Oct 30, 2026
@github-actions github-actions Bot added component: tests Issues re: Tests component: build system Issues re: Build system component: api [Python] Issues re: Python API labels Oct 30, 2026
@lanluo-nvidia lanluo-nvidia added this to the v2.15.0 milestone Oct 30, 2026

@lanluo-nvidia lanluo-nvidia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

This branch pinned the ExecuTorch nightly 1.6.0.dev20261009. The
maintainers asked for 2.15 to ship against the ExecuTorch release
instead, so this moves the pin to executorch==1.6.0.

The move was made with the repository's own updater
(write_pins in .github/scripts/update_executorch_pin.py), so every pin
site it lists moves together: dev_dep_versions.yml, the two files in
packaging/, the MODULE.bazel files, the justfile, the delegate's
pyproject.toml and README, and the reference runner README.

The source commit pin is ExecuTorch's v1.6.0-rc1 tag (72afc214). The
1.6.0 wheels on PyTorch's test channel are built from that commit, and
each one records it in executorch/version.py. If a later release
candidate is cut, the pin moves to that commit.

1.6.0 is on the test channel and not yet on PyPI, so it resolves from
the test channel until then. The build workflows already install from
that channel.

uv.lock is refreshed with PYTHON_ONLY=1 uv lock --prerelease=allow. In
the lock, executorch moves from 1.6.0.dev20261015+cu132 on the nightly
channel to 1.6.0+cu134 on the test channel, the same CUDA 13.4 test
channel the lock already takes torch from. hypothesis, kgb and
sortedcontainers drop out because the 1.6.0 wheel no longer depends on
them.

The justfile's install-test-ext also names PyTorch's test index now. A
release of ExecuTorch is published there and on PyPI, not on the nightly
index, so the nightly index alone cannot find it.

The 0.2.1 delegate (torch-tensorrt-executorch-runtime) has to be built
against 1.6.0, since it links the runtime from the installed ExecuTorch
wheel and its build refuses any ExecuTorch other than the pin.
The test runner's executorch setup step looked for ExecuTorch only on
PyTorch's nightly channel. A dated development build lives there, but a
release like 1.6.0 is published on the test channel instead, so with the
pin on 1.6.0 the step failed with "No matching distribution found for
executorch==1.6.0" and the ExecuTorch test suites could not run.

The step now names both channels for the row's CUDA version, the same
way the build workflows already install the pin. Rows without a CUDA 13
build still get no index, as before. The comment above the step, and the
justfile note on running the suite locally, no longer describe the pin
as a nightly.

The runner test now expects both channels, and it fails if the test
channel is dropped again.
Some text still said the pinned ExecuTorch is a nightly build. Now that
the pin is the 1.6.0 release, that text is wrong:

- the comment on the version range in setup.py said the range admits
  later nightlies and the release candidate of the pinned minor, and
  that the floor names a development build because no ExecuTorch
  release had the runtime the delegate needs
- build errors in the delegate's setup.py and CMake file told users to
  install ExecuTorch from the nightly channel, which does not carry
  1.6.0

The comment now says what the range admits from a release floor, and
the errors point at the PyTorch CUDA channel that carries the pinned
version. No behavior changes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants