Skip to content

ci(pytorch): drop Python 3.10 release builds - #8396

Merged
ethanwee1 merged 2 commits into
mainfrom
users/ethanwee/drop-python310
Oct 1, 2026
Merged

ethanwee1 merged 2 commits into
mainfrom
users/ethanwee/drop-python310

Conversation

@ethanwee1

@ethanwee1 ethanwee1 commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Python 3.10 reaches upstream end of life in October 2026, but TheRock still schedules new cp310 PyTorch wheels in every release matrix.

Changes

  • Remove Python 3.10 from default PyTorch release builds.
  • Update matrix coverage and PyTorch prerequisites to start at Python 3.11.
  • Exclude the unsupported PyTorch release/2.12 and Python 3.15 combination, including explicit workflow inputs.
  • Retain cp310 tooling and promotion support for historical releases and non-PyTorch packages.

Validation

  • PyTorch matrix tests: 10 passed, including the Python 3.10 default and 2.12/Python 3.15 exclusions.
  • Multi-arch configuration tests, pre-commit, diff check, and IDE lints passed.
  • Explicit cp310 probes were cancelled after confirming the intentional historical-build path remains available.
  • Broad Linux and Windows Multi-Arch CI completed 132 jobs successfully; unrelated JAX and component-test failures remain.

JIRA ID: AIPYTORCH-1245

Stop scheduling new cp310 PyTorch wheels ahead of upstream EOL.
@therock-pr-bot

therock-pr-bot Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
📝 PR Description ✅ Pass —
⛔ Forbidden Files ✅ Pass —
🧪 Unit Test ✅ Pass —
🔎 pre-commit ✅ Pass —
🚫 Draft PR 🔜 To Be Enabled —
🚩 Feature Flag 🔜 To Be Enabled —
📊 Code Coverage 🔜 To Be Enabled —
🤖 therock-pr-bot ✅ Pass —

🎉 All checks passed! This PR is ready for review.

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

🙋 Wish to Override Policy?

@therock-pr-bot

Copy link
Copy Markdown

🎉 All checks passed! This PR is ready for review.

@lumachad

Copy link
Copy Markdown
Contributor

If we're going to drop support for a particular python version, could we please do so across TheRock instead of individual projects/areas of TheRock? Is this a reasonable expectation?

@ethanwee1
ethanwee1 marked this pull request as ready for review September 22, 2026 16:11
Comment on lines +75 to +82
def test_release_defaults_exclude_python310(self):
matrix = m.generate_pytorch_matrix_for_release_type(
release_type="nightly",
amdgpu_families="gfx94X-dcgpu",
platform="linux",
)

self.assertNotIn("3.10", {row["python_version"] for row in matrix})

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Not sure this test is super valuable as-is, we could add similar tests checking that we don't build 3.9, 3.8, 2.7, 4.1234, etc. What's special about 3.10?

We could have a change-detector test checking which versions are built, but all that would really be testing would be the RELEASE_PYTHON_VERSIONS = ["3.11", "3.12", "3.13", "3.14"] list, which is obvious enough to not need a unit test.

@ethanwee1
ethanwee1 merged commit ee75282 into main Oct 1, 2026
185 of 192 checks passed
@ethanwee1
ethanwee1 deleted the users/ethanwee/drop-python310 branch October 1, 2026 16:13
@lumachad

lumachad commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

Just a FYI, we still build against dist/shared 3.10 pythons in manylinux. So dropping it here doesn't drop 3.10 throughout TheRock. That might be fine, but just thought I'd mention.

jithunnair-amd pushed a commit to ROCm/pytorch that referenced this pull request Oct 16, 2026
## Summary

Pin Python dependencies for the `release/2.15` bringup so CI and builds
are reproducible, and make everything resolve cleanly on Python **3.10 /
3.11 / 3.12 / 3.13 / 3.14 / 3.15**. Mirrors the 2.14 bringup (#3574),
plus the 3.15 handling that is new in this release.

Three commits, one per file:

- `requirements.txt`: pin all direct dev/install deps (with
`python_version` splits for `filelock`, `hypothesis` and `networkx`).
- `requirements-build.txt`: pin all build-system deps (with a
`python_version` split for `numpy`).
- `.ci/docker/requirements-ci.txt`: pin the previously-loose entries
(`click`, `psutil`, `pytest-rerunfailures`, `unittest-xml-reporting`,
`redis`, `pyzstd` split, `six`, `cuda-bindings`, `cupti-python`, `tqdm`,
`uv`, `librosa`) and add `python_version` conditionals for 3.14/3.15.

## Per-version splits (dev/build)

- **numpy** (build): `2.2.6` (<3.11), `2.4.6` (==3.11), `2.5.4`
(>=3.12).
- **networkx** (dev): `3.4.2` (<3.11), `3.6.1` (==3.11), `3.7` (>=3.12).
- **filelock** (dev): `4.1.0` (<3.11), `4.2.0` (>=3.11).
- **hypothesis** (dev): `6.168.5` (<3.11), `6.169.2` (>=3.11).

Every other dev/build dep resolved identically across 3.10-3.15, so
those are flat-pinned.

## 3.14 / 3.15 conditionals in requirements-ci.txt

Restored from 2.14 (lost in the 2.15 branch):

- **pywavelets**: `1.9.0` for 3.14 (1.7.0 has no cp314 wheel).
- **fbscribelogger**: guarded to `< 3.14` (its `thriftpy2` dep has no
cp314/cp315 wheel and would source-build in the compiler-less test
image).

New for 3.15 (earliest release with a cp315 wheel):

- **numpy** `2.5.2` (the existing `2.4.6` pin for 3.15 has no cp315
wheel), **pandas** `3.0.6`, **optree** `0.20.0`, **pywavelets**
`1.10.0`, **aiohttp** `3.14.4`.
- **scikit-image**: skipped on 3.15 (no release ships a cp315 wheel
yet).

## How versions were resolved

Per the documented process: installed each requirements file in a fresh
venv inside an `ubuntu:24.04` container with no C compiler (deadsnakes
for the non-native Python versions) and pinned the `pip freeze` output.
All three files install on **3.10-3.15** with `pip check` clean and no
new compiler-dependent source builds (only the pre-existing pure-Python
`pwlf` and `coremltools` sdists, plus `pyyaml` on 3.15, which builds
without its optional C extension).

## Test plan

TheRock CI `multi_arch_build_portable_linux_pytorch_wheels.yml`
(gfx94X-dcgpu, ROCm 10.2.0a20261013, `pytorch_git_ref` =
`pablo-garay/release-2.15-integration`, which is this PR plus the
related_commits from #3816):

- [x] Python 3.11: build passed, [run
38705512288](https://github.com/ROCm/TheRock/actions/runs/38705512288)
- [x] Python 3.12: build passed, [run
38705525582](https://github.com/ROCm/TheRock/actions/runs/38705525582)
- [x] Python 3.13: build passed, [run
38705535781](https://github.com/ROCm/TheRock/actions/runs/38705535781)
- [x] Python 3.14: build passed, [run
38705545732](https://github.com/ROCm/TheRock/actions/runs/38705545732)
- Python 3.10: n/a. Triton 3.9 requires Python >=3.11, and TheRock
dropped 3.10 release builds in ROCm/TheRock#8396 ([run
38705500960](https://github.com/ROCm/TheRock/actions/runs/38705500960)
fails installing the triton wheel).
- Python 3.15: n/a until ROCm/TheRock#8394 adds 3.15 to the build image
([run
38705556076](https://github.com/ROCm/TheRock/actions/runs/38705556076)
fails at setup: `Could not find python: /opt/python/cp315-cp315`). The
3.15 pins were validated by the container install above.

---------

Signed-off-by: pablo-garay <pgarayfe@amd.com>
jithunnair-amd pushed a commit to ROCm/pytorch that referenced this pull request Nov 4, 2026
## Summary

Pin Python dependencies for the `release/2.15` bringup so CI and builds
are reproducible, and make everything resolve cleanly on Python **3.10 /
3.11 / 3.12 / 3.13 / 3.14 / 3.15**. Mirrors the 2.14 bringup (#3574),
plus the 3.15 handling that is new in this release.

Three commits, one per file:

- `requirements.txt`: pin all direct dev/install deps (with
`python_version` splits for `filelock`, `hypothesis` and `networkx`).
- `requirements-build.txt`: pin all build-system deps (with a
`python_version` split for `numpy`).
- `.ci/docker/requirements-ci.txt`: pin the previously-loose entries
(`click`, `psutil`, `pytest-rerunfailures`, `unittest-xml-reporting`,
`redis`, `pyzstd` split, `six`, `cuda-bindings`, `cupti-python`, `tqdm`,
`uv`, `librosa`) and add `python_version` conditionals for 3.14/3.15.

## Per-version splits (dev/build)

- **numpy** (build): `2.2.6` (<3.11), `2.4.6` (==3.11), `2.5.4`
(>=3.12).
- **networkx** (dev): `3.4.2` (<3.11), `3.6.1` (==3.11), `3.7` (>=3.12).
- **filelock** (dev): `4.1.0` (<3.11), `4.2.0` (>=3.11).
- **hypothesis** (dev): `6.168.5` (<3.11), `6.169.2` (>=3.11).

Every other dev/build dep resolved identically across 3.10-3.15, so
those are flat-pinned.

## 3.14 / 3.15 conditionals in requirements-ci.txt

Restored from 2.14 (lost in the 2.15 branch):

- **pywavelets**: `1.9.0` for 3.14 (1.7.0 has no cp314 wheel).
- **fbscribelogger**: guarded to `< 3.14` (its `thriftpy2` dep has no
cp314/cp315 wheel and would source-build in the compiler-less test
image).

New for 3.15 (earliest release with a cp315 wheel):

- **numpy** `2.5.2` (the existing `2.4.6` pin for 3.15 has no cp315
wheel), **pandas** `3.0.6`, **optree** `0.20.0`, **pywavelets**
`1.10.0`, **aiohttp** `3.14.4`.
- **scikit-image**: skipped on 3.15 (no release ships a cp315 wheel
yet).

## How versions were resolved

Per the documented process: installed each requirements file in a fresh
venv inside an `ubuntu:24.04` container with no C compiler (deadsnakes
for the non-native Python versions) and pinned the `pip freeze` output.
All three files install on **3.10-3.15** with `pip check` clean and no
new compiler-dependent source builds (only the pre-existing pure-Python
`pwlf` and `coremltools` sdists, plus `pyyaml` on 3.15, which builds
without its optional C extension).

## Test plan

TheRock CI `multi_arch_build_portable_linux_pytorch_wheels.yml`
(gfx94X-dcgpu, ROCm 10.2.0a20261013, `pytorch_git_ref` =
`pablo-garay/release-2.15-integration`, which is this PR plus the
related_commits from #3816):

- [x] Python 3.11: build passed, [run
38705512288](https://github.com/ROCm/TheRock/actions/runs/38705512288)
- [x] Python 3.12: build passed, [run
38705525582](https://github.com/ROCm/TheRock/actions/runs/38705525582)
- [x] Python 3.13: build passed, [run
38705535781](https://github.com/ROCm/TheRock/actions/runs/38705535781)
- [x] Python 3.14: build passed, [run
38705545732](https://github.com/ROCm/TheRock/actions/runs/38705545732)
- Python 3.10: n/a. Triton 3.9 requires Python >=3.11, and TheRock
dropped 3.10 release builds in ROCm/TheRock#8396 ([run
38705500960](https://github.com/ROCm/TheRock/actions/runs/38705500960)
fails installing the triton wheel).
- Python 3.15: n/a until ROCm/TheRock#8394 adds 3.15 to the build image
([run
38705556076](https://github.com/ROCm/TheRock/actions/runs/38705556076)
fails at setup: `Could not find python: /opt/python/cp315-cp315`). The
3.15 pins were validated by the container install above.

---------

Signed-off-by: pablo-garay <pgarayfe@amd.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants