1*da0073e9SAndroid Build Coastguard Worker# Releasing PyTorch 2*da0073e9SAndroid Build Coastguard Worker 3*da0073e9SAndroid Build Coastguard Worker<!-- toc --> 4*da0073e9SAndroid Build Coastguard Worker 5*da0073e9SAndroid Build Coastguard Worker - [Release Compatibility Matrix](#release-compatibility-matrix) 6*da0073e9SAndroid Build Coastguard Worker - [Release Cadence](#release-cadence) 7*da0073e9SAndroid Build Coastguard Worker - [General Overview](#general-overview) 8*da0073e9SAndroid Build Coastguard Worker - [Frequently Asked Questions](#frequently-asked-questions) 9*da0073e9SAndroid Build Coastguard Worker - [Cutting a release branch preparations](#cutting-a-release-branch-preparations) 10*da0073e9SAndroid Build Coastguard Worker - [Cutting release branches](#cutting-release-branches) 11*da0073e9SAndroid Build Coastguard Worker - [`pytorch/pytorch`](#pytorchpytorch) 12*da0073e9SAndroid Build Coastguard Worker - [`pytorch/builder` / PyTorch domain libraries](#pytorchbuilder--pytorch-domain-libraries) 13*da0073e9SAndroid Build Coastguard Worker - [Making release branch specific changes for PyTorch](#making-release-branch-specific-changes-for-pytorch) 14*da0073e9SAndroid Build Coastguard Worker - [Making release branch specific changes for domain libraries](#making-release-branch-specific-changes-for-domain-libraries) 15*da0073e9SAndroid Build Coastguard Worker - [Running Launch Execution team Core XFN sync](#running-launch-execution-team-core-xfn-sync) 16*da0073e9SAndroid Build Coastguard Worker - [Drafting RCs (Release Candidates) for PyTorch and domain libraries](#drafting-rcs-release-candidates-for-pytorch-and-domain-libraries) 17*da0073e9SAndroid Build Coastguard Worker - [Release Candidate Storage](#release-candidate-storage) 18*da0073e9SAndroid Build Coastguard Worker - [Release Candidate health validation](#release-candidate-health-validation) 19*da0073e9SAndroid Build Coastguard Worker - [Cherry Picking Fixes](#cherry-picking-fixes) 20*da0073e9SAndroid Build Coastguard Worker - [How to do Cherry Picking](#how-to-do-cherry-picking) 21*da0073e9SAndroid Build Coastguard Worker - [Cherry Picking Reverts](#cherry-picking-reverts) 22*da0073e9SAndroid Build Coastguard Worker - [Preparing and Creating Final Release candidate](#preparing-and-creating-final-release-candidate) 23*da0073e9SAndroid Build Coastguard Worker - [Promoting RCs to Stable](#promoting-rcs-to-stable) 24*da0073e9SAndroid Build Coastguard Worker - [Additional Steps to prepare for release day](#additional-steps-to-prepare-for-release-day) 25*da0073e9SAndroid Build Coastguard Worker - [Modify release matrix](#modify-release-matrix) 26*da0073e9SAndroid Build Coastguard Worker - [Open Google Colab issue](#open-google-colab-issue) 27*da0073e9SAndroid Build Coastguard Worker- [Patch Releases](#patch-releases) 28*da0073e9SAndroid Build Coastguard Worker - [Patch Release Criteria](#patch-release-criteria) 29*da0073e9SAndroid Build Coastguard Worker - [Patch Release Process](#patch-release-process) 30*da0073e9SAndroid Build Coastguard Worker - [Patch Release Process Description](#patch-release-process-description) 31*da0073e9SAndroid Build Coastguard Worker - [Triage](#triage) 32*da0073e9SAndroid Build Coastguard Worker - [Issue Tracker for Patch releases](#issue-tracker-for-patch-releases) 33*da0073e9SAndroid Build Coastguard Worker - [Building a release schedule / cherry picking](#building-a-release-schedule--cherry-picking) 34*da0073e9SAndroid Build Coastguard Worker - [Building Binaries / Promotion to Stable](#building-binaries--promotion-to-stable) 35*da0073e9SAndroid Build Coastguard Worker- [Hardware / Software Support in Binary Build Matrix](#hardware--software-support-in-binary-build-matrix) 36*da0073e9SAndroid Build Coastguard Worker - [Python](#python) 37*da0073e9SAndroid Build Coastguard Worker - [Accelerator Software](#accelerator-software) 38*da0073e9SAndroid Build Coastguard Worker - [Special support cases](#special-support-cases) 39*da0073e9SAndroid Build Coastguard Worker - [Operating Systems](#operating-systems) 40*da0073e9SAndroid Build Coastguard Worker- [Submitting Tutorials](#submitting-tutorials) 41*da0073e9SAndroid Build Coastguard Worker- [Special Topics](#special-topics) 42*da0073e9SAndroid Build Coastguard Worker - [Updating submodules for a release](#updating-submodules-for-a-release) 43*da0073e9SAndroid Build Coastguard Worker - [Triton dependency for the release](#triton-dependency-for-the-release) 44*da0073e9SAndroid Build Coastguard Worker 45*da0073e9SAndroid Build Coastguard Worker<!-- tocstop --> 46*da0073e9SAndroid Build Coastguard Worker 47*da0073e9SAndroid Build Coastguard Worker## Release Compatibility Matrix 48*da0073e9SAndroid Build Coastguard Worker 49*da0073e9SAndroid Build Coastguard WorkerFollowing is the Release Compatibility Matrix for PyTorch releases: 50*da0073e9SAndroid Build Coastguard Worker 51*da0073e9SAndroid Build Coastguard Worker| PyTorch version | Python | C++ | Stable CUDA | Experimental CUDA | Stable ROCm | 52*da0073e9SAndroid Build Coastguard Worker| --- | --- | --- | --- | --- | --- | 53*da0073e9SAndroid Build Coastguard Worker| 2.5 | >=3.9, <=3.12, (3.13 experimental) | C++17 | CUDA 11.8, CUDA 12.1, CUDA 12.4, CUDNN 9.1.0.70 | None | ROCm 6.2 | 54*da0073e9SAndroid Build Coastguard Worker| 2.4 | >=3.8, <=3.12 | C++17 | CUDA 11.8, CUDA 12.1, CUDNN 9.1.0.70 | CUDA 12.4, CUDNN 9.1.0.70 | ROCm 6.1 | 55*da0073e9SAndroid Build Coastguard Worker| 2.3 | >=3.8, <=3.11, (3.12 experimental) | C++17 | CUDA 11.8, CUDNN 8.7.0.84 | CUDA 12.1, CUDNN 8.9.2.26 | ROCm 6.0 | 56*da0073e9SAndroid Build Coastguard Worker| 2.2 | >=3.8, <=3.11, (3.12 experimental) | C++17 | CUDA 11.8, CUDNN 8.7.0.84 | CUDA 12.1, CUDNN 8.9.2.26 | ROCm 5.7 | 57*da0073e9SAndroid Build Coastguard Worker| 2.1 | >=3.8, <=3.11 | C++17 | CUDA 11.8, CUDNN 8.7.0.84 | CUDA 12.1, CUDNN 8.9.2.26 | ROCm 5.6 | 58*da0073e9SAndroid Build Coastguard Worker| 2.0 | >=3.8, <=3.11 | C++14 | CUDA 11.7, CUDNN 8.5.0.96 | CUDA 11.8, CUDNN 8.7.0.84 | ROCm 5.4 | 59*da0073e9SAndroid Build Coastguard Worker| 1.13 | >=3.7, <=3.10 | C++14 | CUDA 11.6, CUDNN 8.3.2.44 | CUDA 11.7, CUDNN 8.5.0.96 | ROCm 5.2 | 60*da0073e9SAndroid Build Coastguard Worker| 1.12 | >=3.7, <=3.10 | C++14 | CUDA 11.3, CUDNN 8.3.2.44 | CUDA 11.6, CUDNN 8.3.2.44 | ROCm 5.0 | 61*da0073e9SAndroid Build Coastguard Worker 62*da0073e9SAndroid Build Coastguard Worker## Release Cadence 63*da0073e9SAndroid Build Coastguard Worker 64*da0073e9SAndroid Build Coastguard WorkerFollowing is the release cadence for year 2023/2024. All dates below are tentative, for latest updates on the release scheduled please follow [dev discuss](https://dev-discuss.pytorch.org/c/release-announcements/27). Please note: Patch Releases are optional. 65*da0073e9SAndroid Build Coastguard Worker 66*da0073e9SAndroid Build Coastguard Worker| Minor Version | Release branch cut | Release date | First patch release date | Second patch release date| 67*da0073e9SAndroid Build Coastguard Worker| --- | --- | --- | --- | --- | 68*da0073e9SAndroid Build Coastguard Worker| 2.1 | Aug 2023 | Oct 2023 | Nov 2023 | Dec 2023 | 69*da0073e9SAndroid Build Coastguard Worker| 2.2 | Dec 2023 | Jan 2024 | Feb 2024 | Mar 2024 | 70*da0073e9SAndroid Build Coastguard Worker| 2.3 | Mar 2024 | Apr 2024 | Jun 2024 | Not planned | 71*da0073e9SAndroid Build Coastguard Worker| 2.4 | Jun 2024 | Jul 2024 | (Sept 2024) | Not planned | 72*da0073e9SAndroid Build Coastguard Worker| 2.5 | Sep 2024 | Oct 2024 | (Nov 2024) | (Dec 2024) | 73*da0073e9SAndroid Build Coastguard Worker| 2.6 | Dec 2024 | Jan 2025 | (Feb 2025) | (Mar 2025) | 74*da0073e9SAndroid Build Coastguard Worker| 2.7 | Mar 2025 | Apr 2025 | (May 2025) | (Jun 2025) | 75*da0073e9SAndroid Build Coastguard Worker| 2.8 | Jun 2025 | Jul 2025 | (Aug 2025) | (Sep 2025) | 76*da0073e9SAndroid Build Coastguard Worker| 2.9 | Aug 2025 | Oct 2025 | (Nov 2025) | (Dec 2025) | 77*da0073e9SAndroid Build Coastguard Worker 78*da0073e9SAndroid Build Coastguard Worker## General Overview 79*da0073e9SAndroid Build Coastguard Worker 80*da0073e9SAndroid Build Coastguard WorkerReleasing a new version of PyTorch generally entails 3 major steps: 81*da0073e9SAndroid Build Coastguard Worker 82*da0073e9SAndroid Build Coastguard Worker0. Cutting a release branch preparations 83*da0073e9SAndroid Build Coastguard Worker1. Cutting a release branch and making release branch specific changes 84*da0073e9SAndroid Build Coastguard Worker2. Drafting RCs (Release Candidates), and merging cherry picks 85*da0073e9SAndroid Build Coastguard Worker3. Preparing and Creating Final Release Candidate 86*da0073e9SAndroid Build Coastguard Worker4. Promoting Final RC to stable and performing release day tasks 87*da0073e9SAndroid Build Coastguard Worker 88*da0073e9SAndroid Build Coastguard Worker### Frequently Asked Questions 89*da0073e9SAndroid Build Coastguard Worker 90*da0073e9SAndroid Build Coastguard Worker* Q: What is release branch cut ? 91*da0073e9SAndroid Build Coastguard Worker * A: When bulk of the tracked features merged into the main branch, the primary release engineer starts the release process of cutting the release branch by creating a new git branch based off of the current `main` development branch of PyTorch. This allows PyTorch development flow on `main` to continue uninterrupted, while the release engineering team focuses on stabilizing the release branch in order to release a series of release candidates (RC). The activities in the release branch include both regression and performance testing as well as polishing new features and fixing release-specific bugs. In general, new features *are not* added to the release branch after it was created. 92*da0073e9SAndroid Build Coastguard Worker 93*da0073e9SAndroid Build Coastguard Worker* Q: What is cherry-pick ? 94*da0073e9SAndroid Build Coastguard Worker * A: A cherry pick is a process of propagating commits from the main into the release branch, utilizing git's built in [cherry-pick feature](https://git-scm.com/docs/git-cherry-pick). These commits are typically limited to small fixes or documentation updates to ensure that the release engineering team has sufficient time to complete a thorough round of testing on the release branch. To nominate a fix for cherry-picking, a separate pull request must be created against the respective release branch and then mentioned in the Release Tracker issue (example: https://github.com/pytorch/pytorch/issues/94937) following the template from the issue description. The comment nominating a particular cherry-pick for inclusion in the release should include the committed PR against main branch, the newly created cherry-pick PR, as well as the acceptance criteria for why the cherry-pick is needed in the first place. 95*da0073e9SAndroid Build Coastguard Worker 96*da0073e9SAndroid Build Coastguard Worker## Cutting a release branch preparations 97*da0073e9SAndroid Build Coastguard Worker 98*da0073e9SAndroid Build Coastguard WorkerFollowing Requirements needs to be met prior to cutting a release branch: 99*da0073e9SAndroid Build Coastguard Worker 100*da0073e9SAndroid Build Coastguard Worker* Resolve all outstanding issues in the milestones(for example [1.11.0](https://github.com/pytorch/pytorch/milestone/28))before first RC cut is completed. After RC cut is completed following script should be executed from builder repo in order to validate the presence of the fixes in the release branch : 101*da0073e9SAndroid Build Coastguard Worker``` python github_analyze.py --repo-path ~/local/pytorch --remote upstream --branch release/1.11 --milestone-id 26 --missing-in-branch ``` 102*da0073e9SAndroid Build Coastguard Worker* Validate that all new workflows have been created in the PyTorch and domain libraries included in the release. Validate it against all dimensions of release matrix, including operating systems(Linux, MacOS, Windows), Python versions as well as CPU architectures(x86 and arm) and accelerator versions(CUDA, ROCm). 103*da0073e9SAndroid Build Coastguard Worker* All the nightly jobs for pytorch and domain libraries should be green. Validate this using following HUD links: 104*da0073e9SAndroid Build Coastguard Worker * [Pytorch](https://hud.pytorch.org/hud/pytorch/pytorch/nightly) 105*da0073e9SAndroid Build Coastguard Worker * [TorchVision](https://hud.pytorch.org/hud/pytorch/vision/nightly) 106*da0073e9SAndroid Build Coastguard Worker * [TorchAudio](https://hud.pytorch.org/hud/pytorch/audio/nightly) 107*da0073e9SAndroid Build Coastguard Worker 108*da0073e9SAndroid Build Coastguard Worker## Cutting release branches 109*da0073e9SAndroid Build Coastguard Worker 110*da0073e9SAndroid Build Coastguard Worker### `pytorch/pytorch` 111*da0073e9SAndroid Build Coastguard Worker 112*da0073e9SAndroid Build Coastguard WorkerRelease branches are typically cut from the branch [`viable/strict`](https://github.com/pytorch/pytorch/tree/viable/strict) as to ensure that tests are passing on the release branch. 113*da0073e9SAndroid Build Coastguard Worker 114*da0073e9SAndroid Build Coastguard WorkerThere's a convenience script to create release branches from current `viable/strict`. Perform following actions : 115*da0073e9SAndroid Build Coastguard Worker* Perform a fresh clone of pytorch repo using 116*da0073e9SAndroid Build Coastguard Worker```bash 117*da0073e9SAndroid Build Coastguard Workergit clone [email protected]:pytorch/pytorch.git 118*da0073e9SAndroid Build Coastguard Worker``` 119*da0073e9SAndroid Build Coastguard Worker 120*da0073e9SAndroid Build Coastguard Worker* Execute following command from PyTorch repository root folder: 121*da0073e9SAndroid Build Coastguard Worker```bash 122*da0073e9SAndroid Build Coastguard WorkerDRY_RUN=disabled scripts/release/cut-release-branch.sh 123*da0073e9SAndroid Build Coastguard Worker``` 124*da0073e9SAndroid Build Coastguard WorkerThis script should create 2 branches: 125*da0073e9SAndroid Build Coastguard Worker* `release/{MAJOR}.{MINOR}` 126*da0073e9SAndroid Build Coastguard Worker* `orig/release/{MAJOR}.{MINOR}` 127*da0073e9SAndroid Build Coastguard Worker 128*da0073e9SAndroid Build Coastguard Worker### `pytorch/builder` / PyTorch domain libraries 129*da0073e9SAndroid Build Coastguard Worker 130*da0073e9SAndroid Build Coastguard Worker*Note*: Release branches for individual domain libraries should be created after first release candidate build of PyTorch is available in staging channels (which happens about a week after PyTorch release branch has been created). This is absolutely required to allow sufficient testing time for each of the domain library. Domain libraries branch cut is performed by Domain Library POC. 131*da0073e9SAndroid Build Coastguard WorkerBuilder branch cut should be performed at the same time as Pytorch core branch cut. Convenience script can also be used domains as well as `pytorch/builder` 132*da0073e9SAndroid Build Coastguard Worker 133*da0073e9SAndroid Build Coastguard Worker> NOTE: RELEASE_VERSION only needs to be specified if version.txt is not available in root directory 134*da0073e9SAndroid Build Coastguard Worker 135*da0073e9SAndroid Build Coastguard Worker```bash 136*da0073e9SAndroid Build Coastguard WorkerDRY_RUN=disabled GIT_BRANCH_TO_CUT_FROM=main RELEASE_VERSION=1.11 scripts/release/cut-release-branch.sh 137*da0073e9SAndroid Build Coastguard Worker``` 138*da0073e9SAndroid Build Coastguard Worker 139*da0073e9SAndroid Build Coastguard Worker### Making release branch specific changes for PyTorch 140*da0073e9SAndroid Build Coastguard Worker 141*da0073e9SAndroid Build Coastguard WorkerThese are examples of changes that should be made to release branches so that CI / tooling can function normally on 142*da0073e9SAndroid Build Coastguard Workerthem: 143*da0073e9SAndroid Build Coastguard Worker 144*da0073e9SAndroid Build Coastguard Worker* Update backwards compatibility tests to use RC binaries instead of nightlies 145*da0073e9SAndroid Build Coastguard Worker * Example: https://github.com/pytorch/pytorch/pull/77983 and https://github.com/pytorch/pytorch/pull/77986 146*da0073e9SAndroid Build Coastguard Worker* A release branches should also be created in [`pytorch/xla`](https://github.com/pytorch/xla) and [`pytorch/builder`](https://github.com/pytorch/builder) repos and pinned in `pytorch/pytorch` 147*da0073e9SAndroid Build Coastguard Worker * Example: https://github.com/pytorch/pytorch/pull/86290 and https://github.com/pytorch/pytorch/pull/90506 148*da0073e9SAndroid Build Coastguard Worker* Update branch used in composite actions from trunk to release (for example, can be done by running `for i in .github/workflows/*.yml; do sed -i -e s#@main#@release/2.0# $i; done` 149*da0073e9SAndroid Build Coastguard Worker * Example: https://github.com/pytorch/pytorch/commit/17f400404f2ca07ea5ac864428e3d08149de2304 150*da0073e9SAndroid Build Coastguard Worker 151*da0073e9SAndroid Build Coastguard WorkerThese are examples of changes that should be made to the *default* branch after a release branch is cut 152*da0073e9SAndroid Build Coastguard Worker 153*da0073e9SAndroid Build Coastguard Worker* Nightly versions should be updated in all version files to the next MINOR release (i.e. 0.9.0 -> 0.10.0) in the default branch: 154*da0073e9SAndroid Build Coastguard Worker * Example: https://github.com/pytorch/pytorch/pull/77984 155*da0073e9SAndroid Build Coastguard Worker 156*da0073e9SAndroid Build Coastguard Worker### Making release branch specific changes for domain libraries 157*da0073e9SAndroid Build Coastguard Worker 158*da0073e9SAndroid Build Coastguard WorkerDomain library branch cut is done a week after branch cut for the `pytorch/pytorch`. The branch cut is performed by the Domain Library POC. 159*da0073e9SAndroid Build Coastguard WorkerAfter the branch cut is performed, the Pytorch Dev Infra member should be informed of the branch cut and Domain Library specific change is required before Drafting RC for this domain library. 160*da0073e9SAndroid Build Coastguard Worker 161*da0073e9SAndroid Build Coastguard WorkerFollow these examples of PR that updates the version and sets RC Candidate upload channel: 162*da0073e9SAndroid Build Coastguard Worker* torchvision : https://github.com/pytorch/vision/pull/5400 163*da0073e9SAndroid Build Coastguard Worker* torchaudio: https://github.com/pytorch/audio/pull/2210 164*da0073e9SAndroid Build Coastguard Worker 165*da0073e9SAndroid Build Coastguard Worker## Running Launch Execution team Core XFN sync 166*da0073e9SAndroid Build Coastguard Worker 167*da0073e9SAndroid Build Coastguard WorkerThe series of meetings for Core XFN sync should be organized. The goal of these meetings are the following: 168*da0073e9SAndroid Build Coastguard Worker1. Establish release POC's from each of the workstreams 169*da0073e9SAndroid Build Coastguard Worker2. Cover the tactical phase of releasing minor releases to the market 170*da0073e9SAndroid Build Coastguard Worker3. Discuss possible release blockers 171*da0073e9SAndroid Build Coastguard Worker 172*da0073e9SAndroid Build Coastguard WorkerFollowing POC's should be assigned from each of the workstreams: 173*da0073e9SAndroid Build Coastguard Worker* Core/Marketing 174*da0073e9SAndroid Build Coastguard Worker* Release Eng 175*da0073e9SAndroid Build Coastguard Worker* Doc Eng 176*da0073e9SAndroid Build Coastguard Worker* Release notes 177*da0073e9SAndroid Build Coastguard Worker* Partner 178*da0073e9SAndroid Build Coastguard Worker 179*da0073e9SAndroid Build Coastguard Worker**NOTE**: The meetings should start after the release branch is created and should continue until the week of the release. 180*da0073e9SAndroid Build Coastguard Worker 181*da0073e9SAndroid Build Coastguard Worker## Drafting RCs (Release Candidates) for PyTorch and domain libraries 182*da0073e9SAndroid Build Coastguard Worker 183*da0073e9SAndroid Build Coastguard WorkerTo draft RCs, a user with the necessary permissions can push a git tag to the main `pytorch/pytorch` git repository. Please note: exactly same process is used for each of the domain library 184*da0073e9SAndroid Build Coastguard Worker 185*da0073e9SAndroid Build Coastguard WorkerThe git tag for a release candidate must follow the following format: 186*da0073e9SAndroid Build Coastguard Worker``` 187*da0073e9SAndroid Build Coastguard Workerv{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUMBER} 188*da0073e9SAndroid Build Coastguard Worker``` 189*da0073e9SAndroid Build Coastguard Worker 190*da0073e9SAndroid Build Coastguard WorkerAn example of this would look like: 191*da0073e9SAndroid Build Coastguard Worker``` 192*da0073e9SAndroid Build Coastguard Workerv1.12.0-rc1 193*da0073e9SAndroid Build Coastguard Worker``` 194*da0073e9SAndroid Build Coastguard WorkerYou can use following commands to perform tag from pytorch core repo (not fork): 195*da0073e9SAndroid Build Coastguard Worker* Checkout and validate the repo history before tagging 196*da0073e9SAndroid Build Coastguard Worker``` 197*da0073e9SAndroid Build Coastguard Workergit checkout release/1.12 198*da0073e9SAndroid Build Coastguard Workergit log --oneline 199*da0073e9SAndroid Build Coastguard Worker``` 200*da0073e9SAndroid Build Coastguard Worker* Perform tag and push it to github (this will trigger the binary release build) 201*da0073e9SAndroid Build Coastguard Worker``` 202*da0073e9SAndroid Build Coastguard Workergit tag -f v1.12.0-rc2 203*da0073e9SAndroid Build Coastguard Workergit push origin v1.12.0-rc2 204*da0073e9SAndroid Build Coastguard Worker``` 205*da0073e9SAndroid Build Coastguard Worker 206*da0073e9SAndroid Build Coastguard WorkerPushing a release candidate should trigger the `binary_builds` workflow within CircleCI using [`pytorch/pytorch-probot`](https://github.com/pytorch/pytorch-probot)'s [`trigger-circleci-workflows`](trigger-circleci-workflows) functionality. 207*da0073e9SAndroid Build Coastguard Worker 208*da0073e9SAndroid Build Coastguard WorkerThis trigger functionality is configured here: [`pytorch-circleci-labels.yml`](https://github.com/pytorch/pytorch/blob/main/.github/pytorch-circleci-labels.yml) 209*da0073e9SAndroid Build Coastguard Worker 210*da0073e9SAndroid Build Coastguard WorkerTo view the state of the release build, please navigate to [HUD](https://hud.pytorch.org/hud/pytorch/pytorch/release%2F1.12). And make sure all binary builds are successful. 211*da0073e9SAndroid Build Coastguard Worker### Release Candidate Storage 212*da0073e9SAndroid Build Coastguard Worker 213*da0073e9SAndroid Build Coastguard WorkerRelease candidates are currently stored in the following places: 214*da0073e9SAndroid Build Coastguard Worker 215*da0073e9SAndroid Build Coastguard Worker* Wheels: https://download.pytorch.org/whl/test/ 216*da0073e9SAndroid Build Coastguard Worker* Conda: https://anaconda.org/pytorch-test 217*da0073e9SAndroid Build Coastguard Worker* Libtorch: https://download.pytorch.org/libtorch/test 218*da0073e9SAndroid Build Coastguard Worker 219*da0073e9SAndroid Build Coastguard WorkerBackups are stored in a non-public S3 bucket at [`s3://pytorch-backup`](https://s3.console.aws.amazon.com/s3/buckets/pytorch-backup?region=us-east-1&tab=objects) 220*da0073e9SAndroid Build Coastguard Worker 221*da0073e9SAndroid Build Coastguard Worker### Release Candidate health validation 222*da0073e9SAndroid Build Coastguard Worker 223*da0073e9SAndroid Build Coastguard WorkerValidate the release jobs for pytorch and domain libraries should be green. Validate this using following HUD links: 224*da0073e9SAndroid Build Coastguard Worker * [Pytorch](https://hud.pytorch.org/hud/pytorch/pytorch/release%2F1.12) 225*da0073e9SAndroid Build Coastguard Worker * [TorchVision](https://hud.pytorch.org/hud/pytorch/vision/release%2F1.12) 226*da0073e9SAndroid Build Coastguard Worker * [TorchAudio](https://hud.pytorch.org/hud/pytorch/audio/release%2F1.12) 227*da0073e9SAndroid Build Coastguard Worker 228*da0073e9SAndroid Build Coastguard WorkerValidate that the documentation build has completed and generated entry corresponding to the release in [docs repository](https://github.com/pytorch/docs/tree/main/). 229*da0073e9SAndroid Build Coastguard Worker 230*da0073e9SAndroid Build Coastguard Worker### Cherry Picking Fixes 231*da0073e9SAndroid Build Coastguard Worker 232*da0073e9SAndroid Build Coastguard WorkerTypically, within a release cycle fixes are necessary for regressions, test fixes, etc. 233*da0073e9SAndroid Build Coastguard Worker 234*da0073e9SAndroid Build Coastguard WorkerFor fixes that are to go into a release after the release branch has been cut we typically employ the use of a cherry pick tracker. 235*da0073e9SAndroid Build Coastguard Worker 236*da0073e9SAndroid Build Coastguard WorkerAn example of this would look like: 237*da0073e9SAndroid Build Coastguard Worker* https://github.com/pytorch/pytorch/issues/51886 238*da0073e9SAndroid Build Coastguard Worker 239*da0073e9SAndroid Build Coastguard WorkerPlease also make sure to add milestone target to the PR/issue, especially if it needs to be considered for inclusion into the dot release. 240*da0073e9SAndroid Build Coastguard Worker 241*da0073e9SAndroid Build Coastguard Worker**NOTE**: The cherry pick process is not an invitation to add new features, it is mainly there to fix regressions 242*da0073e9SAndroid Build Coastguard Worker 243*da0073e9SAndroid Build Coastguard Worker#### How to do Cherry Picking 244*da0073e9SAndroid Build Coastguard Worker 245*da0073e9SAndroid Build Coastguard WorkerYou can now use `pytorchbot` to cherry pick a PyTorch PR that has been committed 246*da0073e9SAndroid Build Coastguard Workerto the main branch using `@pytorchbot cherry-pick` command as follows. 247*da0073e9SAndroid Build Coastguard Worker 248*da0073e9SAndroid Build Coastguard Worker``` 249*da0073e9SAndroid Build Coastguard Workerusage: @pytorchbot cherry-pick --onto ONTO [--fixes FIXES] -c 250*da0073e9SAndroid Build Coastguard Worker {regression,critical,fixnewfeature,docs,release} 251*da0073e9SAndroid Build Coastguard Worker 252*da0073e9SAndroid Build Coastguard WorkerCherry pick a pull request onto a release branch for inclusion in a release 253*da0073e9SAndroid Build Coastguard Worker 254*da0073e9SAndroid Build Coastguard Workeroptional arguments: 255*da0073e9SAndroid Build Coastguard Worker --onto ONTO Branch you would like to cherry pick onto (Example: release/2.2) 256*da0073e9SAndroid Build Coastguard Worker --fixes FIXES Link to the issue that your PR fixes (i.e. https://github.com/pytorch/pytorch/issues/110666) 257*da0073e9SAndroid Build Coastguard Worker -c {regression,critical,fixnewfeature,docs,release} 258*da0073e9SAndroid Build Coastguard Worker A machine-friendly classification of the cherry-pick reason. 259*da0073e9SAndroid Build Coastguard Worker``` 260*da0073e9SAndroid Build Coastguard Worker 261*da0073e9SAndroid Build Coastguard WorkerFor example, [#120567](https://github.com/pytorch/pytorch/pull/120567#issuecomment-1978964376) 262*da0073e9SAndroid Build Coastguard Workercreated a cherry pick PR [#121232](https://github.com/pytorch/pytorch/pull/121232) onto `release/2.2` 263*da0073e9SAndroid Build Coastguard Workerbranch to fix a regression issue. You can then refer to the original 264*da0073e9SAndroid Build Coastguard Workerand the cherry-picked PRs on the release tracker issue. Please note 265*da0073e9SAndroid Build Coastguard Workerthat the cherry-picked PR will still need to be reviewed by PyTorch 266*da0073e9SAndroid Build Coastguard WorkerRelEng team before it can go into the release branch. This feature 267*da0073e9SAndroid Build Coastguard Workerrequires `pytorchbot`, so it's only available in PyTorch atm. 268*da0073e9SAndroid Build Coastguard Worker 269*da0073e9SAndroid Build Coastguard Worker### Cherry Picking Reverts 270*da0073e9SAndroid Build Coastguard Worker 271*da0073e9SAndroid Build Coastguard WorkerIf PR that has been cherry-picked into release branch has been reverted, its cherry-pick must be reverted as well. 272*da0073e9SAndroid Build Coastguard Worker 273*da0073e9SAndroid Build Coastguard WorkerReverts for changes that was committed into the main branch prior to the branch cut, must be propagated into release branch as well. 274*da0073e9SAndroid Build Coastguard Worker 275*da0073e9SAndroid Build Coastguard Worker## Preparing and Creating Final Release candidate 276*da0073e9SAndroid Build Coastguard Worker 277*da0073e9SAndroid Build Coastguard WorkerThe following requirements need to be met prior to creating final Release Candidate : 278*da0073e9SAndroid Build Coastguard Worker 279*da0073e9SAndroid Build Coastguard Worker* Resolve all outstanding open issues in the milestone. There should be no open issues/PRs (for example [2.1.2](https://github.com/pytorch/pytorch/milestone/39)). The issue should either be closed or de-milestoned. 280*da0073e9SAndroid Build Coastguard Worker 281*da0073e9SAndroid Build Coastguard Worker* Validate that all closed milestone PRs are present in the release branch. Confirm this by running: 282*da0073e9SAndroid Build Coastguard Worker``` python github_analyze.py --repo-path ~/local/pytorch --remote upstream --branch release/2.2 --milestone-id 40 --missing-in-branch ``` 283*da0073e9SAndroid Build Coastguard Worker 284*da0073e9SAndroid Build Coastguard Worker* No outstanding cherry-picks that need to be reviewed in the issue tracker: https://github.com/pytorch/pytorch/issues/115300 285*da0073e9SAndroid Build Coastguard Worker 286*da0073e9SAndroid Build Coastguard Worker* Perform [Release Candidate health validation](#release-candidate-health-validation). CI should have the green signal. 287*da0073e9SAndroid Build Coastguard Worker 288*da0073e9SAndroid Build Coastguard WorkerAfter the final RC is created. The following tasks should be performed : 289*da0073e9SAndroid Build Coastguard Worker 290*da0073e9SAndroid Build Coastguard Worker* Perform [Release Candidate health validation](#release-candidate-health-validation). CI should have the green signal. 291*da0073e9SAndroid Build Coastguard Worker 292*da0073e9SAndroid Build Coastguard Worker* Run and inspect the output [Validate Binaries](https://github.com/pytorch/builder/actions/workflows/validate-binaries.yml) workflow. 293*da0073e9SAndroid Build Coastguard Worker 294*da0073e9SAndroid Build Coastguard Worker* All the closed issues from [milestone](https://github.com/pytorch/pytorch/milestone/39) need to be validated. Confirm the validation by commenting on the issue: https://github.com/pytorch/pytorch/issues/113568#issuecomment-1851031064 295*da0073e9SAndroid Build Coastguard Worker 296*da0073e9SAndroid Build Coastguard Worker* Create validation issue for the release, see for example [Validations for 2.1.2 release](https://github.com/pytorch/pytorch/issues/114904) and perform required validations. 297*da0073e9SAndroid Build Coastguard Worker 298*da0073e9SAndroid Build Coastguard Worker* Run performance tests in [benchmark repository](https://github.com/pytorch/benchmark). Make sure there are no performance regressions. 299*da0073e9SAndroid Build Coastguard Worker 300*da0073e9SAndroid Build Coastguard Worker* Prepare and stage PyPI binaries for promotion. This is done with this script: 301*da0073e9SAndroid Build Coastguard Worker[`pytorch/builder:release/pypi/promote_pypi_to_staging.sh`](https://github.com/pytorch/builder/blob/main/release/pypi/promote_pypi_to_staging.sh) 302*da0073e9SAndroid Build Coastguard Worker 303*da0073e9SAndroid Build Coastguard Worker* Validate staged PyPI binaries. Make sure generated packages are correct and package size does not exceeds maximum allowed PyPI package size. 304*da0073e9SAndroid Build Coastguard Worker 305*da0073e9SAndroid Build Coastguard Worker## Promoting RCs to Stable 306*da0073e9SAndroid Build Coastguard Worker 307*da0073e9SAndroid Build Coastguard WorkerPromotion of RCs to stable is done with this script: 308*da0073e9SAndroid Build Coastguard Worker[`pytorch/builder:release/promote.sh`](https://github.com/pytorch/builder/blob/main/release/promote.sh) 309*da0073e9SAndroid Build Coastguard Worker 310*da0073e9SAndroid Build Coastguard WorkerUsers of that script should take care to update the versions necessary for the specific packages you are attempting to promote. 311*da0073e9SAndroid Build Coastguard Worker 312*da0073e9SAndroid Build Coastguard WorkerPromotion should occur in two steps: 313*da0073e9SAndroid Build Coastguard Worker* Promote S3 artifacts (wheels, libtorch) and Conda packages 314*da0073e9SAndroid Build Coastguard Worker* Promote S3 wheels to PyPI 315*da0073e9SAndroid Build Coastguard Worker 316*da0073e9SAndroid Build Coastguard Worker**NOTE**: The promotion of wheels to PyPI can only be done once so take caution when attempting to promote wheels to PyPI, (see https://github.com/pypa/warehouse/issues/726 for a discussion on potential draft releases within PyPI) 317*da0073e9SAndroid Build Coastguard Worker 318*da0073e9SAndroid Build Coastguard Worker## Additional Steps to prepare for release day 319*da0073e9SAndroid Build Coastguard Worker 320*da0073e9SAndroid Build Coastguard WorkerThe following should be prepared for the release day 321*da0073e9SAndroid Build Coastguard Worker 322*da0073e9SAndroid Build Coastguard Worker### Modify release matrix 323*da0073e9SAndroid Build Coastguard Worker 324*da0073e9SAndroid Build Coastguard WorkerNeed to modify release matrix for get started page. See following [PR](https://github.com/pytorch/test-infra/pull/4611) as reference. 325*da0073e9SAndroid Build Coastguard Worker 326*da0073e9SAndroid Build Coastguard WorkerThe PR to update published_versions.json and quick-start-module.js is auto generated. See following [PR](https://github.com/pytorch/pytorch.github.io/pull/1467) as reference. 327*da0073e9SAndroid Build Coastguard Worker 328*da0073e9SAndroid Build Coastguard WorkerPlease note: This PR needs to be merged on the release day and hence it should be absolutely free of any failures. To test this PR, open another test PR but pointing to the Release candidate location as above [Release Candidate Storage](RELEASE.md#release-candidate-storage) 329*da0073e9SAndroid Build Coastguard Worker 330*da0073e9SAndroid Build Coastguard Worker### Open Google Colab issue 331*da0073e9SAndroid Build Coastguard Worker 332*da0073e9SAndroid Build Coastguard WorkerThis is normally done right after the release is completed. We would need to create Google Colab Issue see following [PR](https://github.com/googlecolab/colabtools/issues/2372) 333*da0073e9SAndroid Build Coastguard Worker 334*da0073e9SAndroid Build Coastguard Worker# Patch Releases 335*da0073e9SAndroid Build Coastguard Worker 336*da0073e9SAndroid Build Coastguard WorkerA patch release is a maintenance release of PyTorch that includes fixes for regressions found in a previous minor release. Patch releases typically will bump the `patch` version from semver (i.e. `[major].[minor].[patch]`). 337*da0073e9SAndroid Build Coastguard Worker 338*da0073e9SAndroid Build Coastguard WorkerPlease note: Starting from 2.1 one can expect up to 2 patch releases after every minor ones. Patch releases would only be published for latest minor release. 339*da0073e9SAndroid Build Coastguard Worker 340*da0073e9SAndroid Build Coastguard Worker## Patch Release Criteria 341*da0073e9SAndroid Build Coastguard Worker 342*da0073e9SAndroid Build Coastguard WorkerPatch releases should be considered if a regression meets the following criteria: 343*da0073e9SAndroid Build Coastguard Worker 344*da0073e9SAndroid Build Coastguard Worker1. Does the regression break core functionality (stable / beta features) including functionality in first party domain libraries? 345*da0073e9SAndroid Build Coastguard Worker * First party domain libraries: 346*da0073e9SAndroid Build Coastguard Worker * [pytorch/vision](https://github.com/pytorch/vision) 347*da0073e9SAndroid Build Coastguard Worker * [pytorch/audio](https://github.com/pytorch/audio) 348*da0073e9SAndroid Build Coastguard Worker3. Is there not a viable workaround? 349*da0073e9SAndroid Build Coastguard Worker * Can the regression be solved simply or is it not overcomable? 350*da0073e9SAndroid Build Coastguard Worker 351*da0073e9SAndroid Build Coastguard Worker> *NOTE*: Patch releases should only be considered when functionality is broken, documentation does not typically fall within this category 352*da0073e9SAndroid Build Coastguard Worker 353*da0073e9SAndroid Build Coastguard Worker## Patch Release Process 354*da0073e9SAndroid Build Coastguard Worker 355*da0073e9SAndroid Build Coastguard Worker### Patch Release Process Description 356*da0073e9SAndroid Build Coastguard Worker 357*da0073e9SAndroid Build Coastguard Worker> Main POC: Patch Release Managers, Triage Reviewers 358*da0073e9SAndroid Build Coastguard Worker 359*da0073e9SAndroid Build Coastguard WorkerPatch releases should follow these high-level phases. This process starts immediately after the previous release has completed. 360*da0073e9SAndroid Build Coastguard WorkerPatch release process takes around 4-5 weeks to complete. 361*da0073e9SAndroid Build Coastguard Worker 362*da0073e9SAndroid Build Coastguard Worker1. Triage, is a process where issues are identified, graded, compared to Patch Release Criteria and added to Patch Release milestone. This process normally takes 2 weeks after the release completion. 363*da0073e9SAndroid Build Coastguard Worker2. Go/No Go meeting between PyTorch Releng, PyTorch Core and Project Managers where potential issues triggering a release in milestones are reviewed, and following decisions are made: 364*da0073e9SAndroid Build Coastguard Worker * Should the new patch Release be created ? 365*da0073e9SAndroid Build Coastguard Worker * Timeline execution for the patch release 366*da0073e9SAndroid Build Coastguard Worker3. Cherry picking phase starts after the decision is made to create patch release. At this point a new release tracker for the patch release is created, and an announcement will be made on official channels [example announcement](https://dev-discuss.pytorch.org/t/pytorch-release-2-0-1-important-information/1176). The authors of the fixes to regressions will be asked to create their own cherry picks. This process normally takes 2 weeks. 367*da0073e9SAndroid Build Coastguard Worker4. Building Binaries, Promotion to Stable and testing. After all cherry picks have been merged, Release Managers trigger new build and produce new release candidate. Announcement is made on the official channel about the RC availability at this point. This process normally takes 2 weeks. 368*da0073e9SAndroid Build Coastguard Worker5. General Availability 369*da0073e9SAndroid Build Coastguard Worker 370*da0073e9SAndroid Build Coastguard Worker### Triage 371*da0073e9SAndroid Build Coastguard Worker 372*da0073e9SAndroid Build Coastguard Worker> Main POC: Triage Reviewers 373*da0073e9SAndroid Build Coastguard Worker 374*da0073e9SAndroid Build Coastguard Worker1. Tag issues / pull requests that are candidates for a potential patch release with `triage review` 375*da0073e9SAndroid Build Coastguard Worker *  376*da0073e9SAndroid Build Coastguard Worker2. Triage reviewers will then check if the regression / fix identified fits within above mentioned [Patch Release Criteria](#patch-release-criteria) 377*da0073e9SAndroid Build Coastguard Worker3. Triage reviewers will then add the issue / pull request to the related milestone (i.e. `1.9.1`) if the regressions is found to be within the [Patch Release Criteria](#patch-release-criteria) 378*da0073e9SAndroid Build Coastguard Worker *  379*da0073e9SAndroid Build Coastguard Worker 380*da0073e9SAndroid Build Coastguard Worker### Issue Tracker for Patch releases 381*da0073e9SAndroid Build Coastguard Worker 382*da0073e9SAndroid Build Coastguard WorkerFor patch releases issue tracker needs to be created. For patch release, we require all cherry-pick changes to have links to either a high-priority GitHub issue or a CI failure from previous RC. An example of this would look like: 383*da0073e9SAndroid Build Coastguard Worker* https://github.com/pytorch/pytorch/issues/51886 384*da0073e9SAndroid Build Coastguard Worker 385*da0073e9SAndroid Build Coastguard WorkerOnly following issues are accepted: 386*da0073e9SAndroid Build Coastguard Worker1. Fixes to regressions against previous major version (e.g. regressions introduced in 1.13.0 from 1.12.0 are pickable for 1.13.1) 387*da0073e9SAndroid Build Coastguard Worker2. Low risk critical fixes for: silent correctness, backwards compatibility, crashes, deadlocks, (large) memory leaks 388*da0073e9SAndroid Build Coastguard Worker3. Fixes to new features being introduced in this release 389*da0073e9SAndroid Build Coastguard Worker4. Documentation improvements 390*da0073e9SAndroid Build Coastguard Worker5. Release branch specific changes (e.g. blocking ci fixes, change version identifiers) 391*da0073e9SAndroid Build Coastguard Worker 392*da0073e9SAndroid Build Coastguard Worker### Building a release schedule / cherry picking 393*da0073e9SAndroid Build Coastguard Worker 394*da0073e9SAndroid Build Coastguard Worker> Main POC: Patch Release Managers 395*da0073e9SAndroid Build Coastguard Worker 396*da0073e9SAndroid Build Coastguard Worker1. After regressions / fixes have been triaged Patch Release Managers will work together and build /announce a schedule for the patch release 397*da0073e9SAndroid Build Coastguard Worker * *NOTE*: Ideally this should be ~2-3 weeks after a regression has been identified to allow other regressions to be identified 398*da0073e9SAndroid Build Coastguard Worker2. Patch Release Managers will work with the authors of the regressions / fixes to cherry pick their change into the related release branch (i.e. `release/1.9` for `1.9.1`) 399*da0073e9SAndroid Build Coastguard Worker * *NOTE*: Patch release managers should notify authors of the regressions to post a cherry picks for their changes. It is up to authors of the regressions to post a cherry pick. If cherry pick is not posted the issue will not be included in the release. 400*da0073e9SAndroid Build Coastguard Worker3. If cherry picking deadline is missed by cherry pick author, patch release managers will not accept any requests after the fact. 401*da0073e9SAndroid Build Coastguard Worker 402*da0073e9SAndroid Build Coastguard Worker### Building Binaries / Promotion to Stable 403*da0073e9SAndroid Build Coastguard Worker 404*da0073e9SAndroid Build Coastguard Worker> Main POC: Patch Release managers 405*da0073e9SAndroid Build Coastguard Worker 406*da0073e9SAndroid Build Coastguard Worker1. Patch Release Managers will follow the process of [Drafting RCs (Release Candidates)](#drafting-rcs-release-candidates-for-pytorch-and-domain-libraries) 407*da0073e9SAndroid Build Coastguard Worker2. Patch Release Managers will follow the process of [Promoting RCs to Stable](#promoting-rcs-to-stable) 408*da0073e9SAndroid Build Coastguard Worker 409*da0073e9SAndroid Build Coastguard Worker# Hardware / Software Support in Binary Build Matrix 410*da0073e9SAndroid Build Coastguard Worker 411*da0073e9SAndroid Build Coastguard WorkerPyTorch has a support matrix across a couple of different axis. This section should be used as a decision making framework to drive hardware / software support decisions 412*da0073e9SAndroid Build Coastguard Worker 413*da0073e9SAndroid Build Coastguard Worker## Python 414*da0073e9SAndroid Build Coastguard Worker 415*da0073e9SAndroid Build Coastguard WorkerPyTorch supports all minor versions of CPython that are not EOL: https://devguide.python.org/versions/ 416*da0073e9SAndroid Build Coastguard Worker 417*da0073e9SAndroid Build Coastguard WorkerFor each minor release independently, we only support patch releases as follows: 418*da0073e9SAndroid Build Coastguard Worker- If the latest patch release is a bugfix release, we only support this one. 419*da0073e9SAndroid Build Coastguard Worker- Otherwise, we support all the non-bugfix patch releases. 420*da0073e9SAndroid Build Coastguard Worker 421*da0073e9SAndroid Build Coastguard WorkerSee https://github.com/pytorch/rfcs/blob/master/RFC-0038-cpython-support.md for details on the rules and process for upgrade and sunset of each version. 422*da0073e9SAndroid Build Coastguard Worker 423*da0073e9SAndroid Build Coastguard Worker## Accelerator Software 424*da0073e9SAndroid Build Coastguard Worker 425*da0073e9SAndroid Build Coastguard WorkerFor accelerator software like CUDA and ROCm we will typically use the following criteria: 426*da0073e9SAndroid Build Coastguard Worker* Support latest 2 minor versions 427*da0073e9SAndroid Build Coastguard Worker 428*da0073e9SAndroid Build Coastguard Worker### Special support cases 429*da0073e9SAndroid Build Coastguard Worker 430*da0073e9SAndroid Build Coastguard WorkerIn some instances support for a particular version of software will continue if a need is found. For example, our CUDA 11 binaries do not currently meet 431*da0073e9SAndroid Build Coastguard Workerthe size restrictions for publishing on PyPI so the default version that is published to PyPI is CUDA 10.2. 432*da0073e9SAndroid Build Coastguard Worker 433*da0073e9SAndroid Build Coastguard WorkerThese special support cases will be handled on a case by case basis and support may be continued if current PyTorch maintainers feel as though there may still be a 434*da0073e9SAndroid Build Coastguard Workerneed to support these particular versions of software. 435*da0073e9SAndroid Build Coastguard Worker 436*da0073e9SAndroid Build Coastguard Worker## Operating Systems 437*da0073e9SAndroid Build Coastguard WorkerSupported OS flavors are summarized in the table below: 438*da0073e9SAndroid Build Coastguard Worker| Operating System family | Architecture | Notes | 439*da0073e9SAndroid Build Coastguard Worker| --- | --- | --- | 440*da0073e9SAndroid Build Coastguard Worker| Linux | aarch64, x86_64 | Wheels are manylinux2014 compatible, i.e. they should be runnable on any Linux system with glibc-2.17 or above. | 441*da0073e9SAndroid Build Coastguard Worker| MacOS | arm64 | Builds should be compatible with MacOS 11 (Big Sur) or newer, but are actively tested against MacOS 14 (Sonoma). | 442*da0073e9SAndroid Build Coastguard Worker| MacOS | x86_64 | Requires MacOS Catalina or above, not supported after 2.2, see https://github.com/pytorch/pytorch/issues/114602 | 443*da0073e9SAndroid Build Coastguard Worker| Windows | x86_64 | Builds are compatible with Windows-10 or newer. | 444*da0073e9SAndroid Build Coastguard Worker 445*da0073e9SAndroid Build Coastguard Worker# Submitting Tutorials 446*da0073e9SAndroid Build Coastguard Worker 447*da0073e9SAndroid Build Coastguard WorkerTutorials in support of a release feature must be submitted to the [pytorch/tutorials](https://github.com/pytorch/tutorials) repo at least two weeks before the release date to allow for editorial and technical review. There is no cherry-pick process for tutorials. All tutorials will be merged around the release day and published at [pytorch.org/tutorials](https://pytorch.org/tutorials/). 448*da0073e9SAndroid Build Coastguard Worker 449*da0073e9SAndroid Build Coastguard Worker# Special Topics 450*da0073e9SAndroid Build Coastguard Worker 451*da0073e9SAndroid Build Coastguard Worker## Updating submodules for a release 452*da0073e9SAndroid Build Coastguard Worker 453*da0073e9SAndroid Build Coastguard WorkerIn the event a submodule cannot be fast forwarded, and a patch must be applied we can take two different approaches: 454*da0073e9SAndroid Build Coastguard Worker 455*da0073e9SAndroid Build Coastguard Worker* (preferred) Fork the said repository under the pytorch GitHub organization, apply the patches we need there, and then switch our submodule to accept our fork. 456*da0073e9SAndroid Build Coastguard Worker* Get the dependencies maintainers to support a release branch for us 457*da0073e9SAndroid Build Coastguard Worker 458*da0073e9SAndroid Build Coastguard WorkerEditing submodule remotes can be easily done with: (running from the root of the git repository) 459*da0073e9SAndroid Build Coastguard Worker``` 460*da0073e9SAndroid Build Coastguard Workergit config --file=.gitmodules -e 461*da0073e9SAndroid Build Coastguard Worker``` 462*da0073e9SAndroid Build Coastguard Worker 463*da0073e9SAndroid Build Coastguard WorkerAn example of this process can be found here: 464*da0073e9SAndroid Build Coastguard Worker 465*da0073e9SAndroid Build Coastguard Worker* https://github.com/pytorch/pytorch/pull/48312 466*da0073e9SAndroid Build Coastguard Worker 467*da0073e9SAndroid Build Coastguard Worker## Triton dependency for the release 468*da0073e9SAndroid Build Coastguard Worker 469*da0073e9SAndroid Build Coastguard WorkerIn nightly builds for conda and wheels pytorch depend on Triton build by this workflow: https://hud.pytorch.org/hud/pytorch/pytorch/nightly/1?per_page=50&name_filter=Build%20Triton%20Wheel. The pinned version of triton used by this workflow is specified here: https://github.com/pytorch/pytorch/blob/main/.ci/docker/ci_commit_pins/triton.txt . 470*da0073e9SAndroid Build Coastguard Worker 471*da0073e9SAndroid Build Coastguard WorkerIn Nightly builds we have following configuration: 472*da0073e9SAndroid Build Coastguard Worker* Conda builds, depend on: https://anaconda.org/pytorch-nightly/torchtriton 473*da0073e9SAndroid Build Coastguard Worker* Wheel builds, depend on : https://download.pytorch.org/whl/nightly/pytorch-triton/ 474*da0073e9SAndroid Build Coastguard Worker* Rocm wheel builds, depend on : https://download.pytorch.org/whl/nightly/pytorch-triton-rocm/ 475*da0073e9SAndroid Build Coastguard Worker 476*da0073e9SAndroid Build Coastguard WorkerHowever for release we have following : 477*da0073e9SAndroid Build Coastguard Worker* Conda builds, depend on: https://anaconda.org/pytorch-test/torchtriton for test and https://anaconda.org/pytorch/torchtriton for release 478*da0073e9SAndroid Build Coastguard Worker* Wheel builds, depend only triton pypi package: https://pypi.org/project/triton/ for both test and release 479*da0073e9SAndroid Build Coastguard Worker* Rocm wheel builds, depend on : https://download.pytorch.org/whl/test/pytorch-triton-rocm/ for test and https://download.pytorch.org/whl/pytorch-triton-rocm/ for release 480*da0073e9SAndroid Build Coastguard Worker 481*da0073e9SAndroid Build Coastguard WorkerImportant: The release of https://pypi.org/project/triton/ needs to be requested from OpenAI once branch cut is completed. Please include the release PIN hash in the request: https://github.com/pytorch/pytorch/blob/release/2.1/.ci/docker/ci_commit_pins/triton.txt . 482