From a501223129ac083f909e9971e7c8f7324998ce43 Mon Sep 17 00:00:00 2001 From: Jacob Szwejbka Date: Mon, 27 Jul 2026 09:26:16 -0700 Subject: [PATCH 1/6] [RELEASE ONLY CHANGES] Pin test-infra workflows to release/2.13 --- .github/workflows/_android.yml | 2 +- .github/workflows/_llm_server.yml | 2 +- .github/workflows/_test_backend.yml | 4 +- .github/workflows/_test_cadence.yml | 4 +- .github/workflows/_test_cortex_m_e2e.yml | 2 +- .github/workflows/_test_cortex_m_ops.yml | 2 +- .github/workflows/_test_riscv.yml | 2 +- .github/workflows/_unittest.yml | 6 +- .github/workflows/_xtensa_build.yml | 2 +- .github/workflows/_xtensa_test.yml | 2 +- .../workflows/android-release-artifacts.yml | 2 +- .github/workflows/apple.yml | 8 +- .github/workflows/build-cadence-runner.yml | 2 +- .github/workflows/build-cmsis-pack.yml | 2 +- .github/workflows/build-presets.yml | 8 +- .../workflows/build-wheels-aarch64-linux.yml | 8 +- .github/workflows/build-wheels-linux.yml | 8 +- .github/workflows/build-wheels-macos.yml | 8 +- .github/workflows/build-wheels-windows.yml | 8 +- .github/workflows/claude-code.yml | 2 +- .github/workflows/cuda-perf.yml | 6 +- .github/workflows/cuda-windows.yml | 4 +- .github/workflows/cuda.yml | 14 +-- .github/workflows/doc-build.yml | 4 +- .github/workflows/docker-builds.yml | 8 +- .github/workflows/metal.yml | 10 +- .github/workflows/mlx.yml | 18 ++-- .github/workflows/nightly.yml | 6 +- .github/workflows/periodic.yml | 2 +- .github/workflows/pull.yml | 92 +++++++++---------- .github/workflows/qnn-windows-msvc.yml | 2 +- .github/workflows/test-pico2-build.yml | 4 +- .github/workflows/test-webgpu-native.yml | 2 +- .github/workflows/trunk.yml | 46 +++++----- .github/workflows/update-viablestrict.yml | 2 +- .github/workflows/vulkan.yml | 4 +- .github/workflows/windows-msvc.yml | 2 +- docs/README.md | 2 +- docs/source/getting-started.md | 2 +- .../using-executorch-building-from-source.md | 2 +- docs/source/using-executorch-ios.md | 2 +- 41 files changed, 159 insertions(+), 159 deletions(-) diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index 6f152607d7c..b61c4b16fe0 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -70,7 +70,7 @@ jobs: API_LEVEL: 34 steps: - name: Setup SSH (Click me for login details) - uses: pytorch/test-infra/.github/actions/setup-ssh@main + uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.13 with: github-secret: ${{ secrets.GITHUB_TOKEN }} instructions: | diff --git a/.github/workflows/_llm_server.yml b/.github/workflows/_llm_server.yml index e1ef5a30db9..4b45c0c4e6e 100644 --- a/.github/workflows/_llm_server.yml +++ b/.github/workflows/_llm_server.yml @@ -11,7 +11,7 @@ on: jobs: linux: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/_test_backend.yml b/.github/workflows/_test_backend.yml index 6323c007f4a..61eea1a1c7c 100644 --- a/.github/workflows/_test_backend.yml +++ b/.github/workflows/_test_backend.yml @@ -51,7 +51,7 @@ jobs: flow: ${{ fromJSON(inputs.flows) }} suite: [models, operators] - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 with: ref: ${{ inputs.ref }} runner: ${{ inputs.runner-linux }} @@ -127,7 +127,7 @@ jobs: flow: ${{ fromJSON(inputs.flows) }} suite: [models, operators] - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" ref: ${{ inputs.ref }} diff --git a/.github/workflows/_test_cadence.yml b/.github/workflows/_test_cadence.yml index 2e98d21db1c..1766c701c08 100644 --- a/.github/workflows/_test_cadence.yml +++ b/.github/workflows/_test_cadence.yml @@ -30,7 +30,7 @@ on: jobs: test-aot: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 with: job-name: test-aot runner: ${{ inputs.runner }} @@ -50,7 +50,7 @@ jobs: python -m pytest backends/cadence/aot/tests/ -v -n auto --reruns 2 --reruns-delay 1 test-ops: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 with: job-name: test-ops runner: ${{ inputs.runner }} diff --git a/.github/workflows/_test_cortex_m_e2e.yml b/.github/workflows/_test_cortex_m_e2e.yml index 0510b017723..9eee51484d9 100644 --- a/.github/workflows/_test_cortex_m_e2e.yml +++ b/.github/workflows/_test_cortex_m_e2e.yml @@ -24,7 +24,7 @@ on: jobs: run: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 strategy: matrix: model: ${{ fromJSON(inputs.models) }} diff --git a/.github/workflows/_test_cortex_m_ops.yml b/.github/workflows/_test_cortex_m_ops.yml index a9e2e6180c3..a5fde5472af 100644 --- a/.github/workflows/_test_cortex_m_ops.yml +++ b/.github/workflows/_test_cortex_m_ops.yml @@ -19,7 +19,7 @@ on: jobs: run: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 strategy: matrix: target: ${{ fromJSON(inputs.targets) }} diff --git a/.github/workflows/_test_riscv.yml b/.github/workflows/_test_riscv.yml index 223a146e3d8..d47459007fc 100644 --- a/.github/workflows/_test_riscv.yml +++ b/.github/workflows/_test_riscv.yml @@ -38,7 +38,7 @@ on: jobs: run: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 with: runner: linux.2xlarge docker-image: ci-image:executorch-ubuntu-24.04-gcc14 diff --git a/.github/workflows/_unittest.yml b/.github/workflows/_unittest.yml index 4216d3aaa27..71f94f0f59f 100644 --- a/.github/workflows/_unittest.yml +++ b/.github/workflows/_unittest.yml @@ -31,7 +31,7 @@ on: jobs: linux: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -46,7 +46,7 @@ jobs: .ci/scripts/unittest-linux.sh --build-tool "${{ inputs.build-tool }}" --build-mode "${{ inputs.build-mode }}" --editable "${{ inputs.editable }}" macos: - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-m1-stable @@ -62,7 +62,7 @@ jobs: windows: if: ${{ inputs.build-tool == 'cmake' }} - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} timeout: 120 diff --git a/.github/workflows/_xtensa_build.yml b/.github/workflows/_xtensa_build.yml index ac78323aa3e..e79678bdea2 100644 --- a/.github/workflows/_xtensa_build.yml +++ b/.github/workflows/_xtensa_build.yml @@ -39,7 +39,7 @@ jobs: - name: Calculate docker image id: calculate-docker-image - uses: pytorch/test-infra/.github/actions/calculate-docker-image@main + uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.13 with: docker-image-name: ci-image:executorch-ubuntu-22.04-clang12 diff --git a/.github/workflows/_xtensa_test.yml b/.github/workflows/_xtensa_test.yml index ae65b19f24e..09227949e56 100644 --- a/.github/workflows/_xtensa_test.yml +++ b/.github/workflows/_xtensa_test.yml @@ -37,7 +37,7 @@ jobs: - name: Calculate docker image id: calculate-docker-image - uses: pytorch/test-infra/.github/actions/calculate-docker-image@main + uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.13 with: docker-image-name: ci-image:executorch-ubuntu-22.04-clang12 diff --git a/.github/workflows/android-release-artifacts.yml b/.github/workflows/android-release-artifacts.yml index 0cf179109ed..eba34c1c3a4 100644 --- a/.github/workflows/android-release-artifacts.yml +++ b/.github/workflows/android-release-artifacts.yml @@ -73,7 +73,7 @@ jobs: name: build-aar needs: check-if-aar-exists if: ${{ !github.event.pull_request.head.repo.fork && needs.check-if-aar-exists.outputs.should-skip != 'true' }} - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 secrets: inherit permissions: id-token: write diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 20c7352e40d..452ac906f42 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -85,7 +85,7 @@ jobs: name: build-demo-ios # NB: Don't run this on fork PRs because they won't have access to the secret and would fail anyway if: ${{ !github.event.pull_request.head.repo.fork }} - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit with: default-packages: "" @@ -156,7 +156,7 @@ jobs: permissions: id-token: write contents: read - uses: pytorch/test-infra/.github/workflows/mobile_job.yml@main + uses: pytorch/test-infra/.github/workflows/mobile_job.yml@release/2.13 with: device-type: ios # For iOS testing, the runner just needs to call AWS Device Farm, so there is no need to run this on macOS @@ -174,7 +174,7 @@ jobs: build-frameworks-ios: name: build-frameworks-ios needs: set-version - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-14-xlarge @@ -314,7 +314,7 @@ jobs: name: build-benchmark-app # NB: Don't run this on fork PRs because they won't have access to the secret and would fail anyway if: ${{ !github.event.pull_request.head.repo.fork }} - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit with: default-packages: "" diff --git a/.github/workflows/build-cadence-runner.yml b/.github/workflows/build-cadence-runner.yml index c455ad83205..9b78900dd7f 100644 --- a/.github/workflows/build-cadence-runner.yml +++ b/.github/workflows/build-cadence-runner.yml @@ -31,7 +31,7 @@ jobs: (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) || (github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository && contains(github.event.pull_request.labels.*.name, 'CLA Signed') && contains(github.event.pull_request.labels.*.name, 'meta-exported')) - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/build-cmsis-pack.yml b/.github/workflows/build-cmsis-pack.yml index f6938a85e68..86aa77022aa 100644 --- a/.github/workflows/build-cmsis-pack.yml +++ b/.github/workflows/build-cmsis-pack.yml @@ -48,7 +48,7 @@ concurrency: jobs: build-cmsis-pack: name: build-cmsis-pack - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/build-presets.yml b/.github/workflows/build-presets.yml index 37854aed174..e4b9381dae8 100644 --- a/.github/workflows/build-presets.yml +++ b/.github/workflows/build-presets.yml @@ -14,7 +14,7 @@ concurrency: jobs: apple: - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: fail-fast: false matrix: @@ -34,7 +34,7 @@ jobs: ${CONDA_RUN} cmake --build cmake-out -j$(( $(sysctl -n hw.ncpu) - 1 )) zephyr: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 strategy: fail-fast: false matrix: @@ -73,7 +73,7 @@ jobs: cmake --preset ${{ matrix.preset }} cmake --build cmake-out -j$(( $(nproc) - 1 )) linux: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 strategy: fail-fast: false matrix: @@ -106,7 +106,7 @@ jobs: cmake --build cmake-out -j$(( $(nproc) - 1 )) windows: - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 strategy: fail-fast: false matrix: diff --git a/.github/workflows/build-wheels-aarch64-linux.yml b/.github/workflows/build-wheels-aarch64-linux.yml index b0b9a9c0fee..4fa0c4c19e9 100644 --- a/.github/workflows/build-wheels-aarch64-linux.yml +++ b/.github/workflows/build-wheels-aarch64-linux.yml @@ -22,12 +22,12 @@ on: jobs: generate-matrix: - uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@main + uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@release/2.13 with: package-type: wheel os: linux-aarch64 test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 with-cuda: disabled with-rocm: disabled python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' @@ -47,12 +47,12 @@ jobs: smoke-test-script: .ci/scripts/wheel/test_linux_aarch64.py package-name: executorch name: ${{ matrix.repository }} - uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@main + uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@release/2.13 with: repository: ${{ matrix.repository }} ref: "" test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 build-matrix: ${{ needs.generate-matrix.outputs.matrix }} submodules: recursive env-var-script: .ci/scripts/wheel/envvar_linux.sh diff --git a/.github/workflows/build-wheels-linux.yml b/.github/workflows/build-wheels-linux.yml index 1a89079e428..1e56b7cce5b 100644 --- a/.github/workflows/build-wheels-linux.yml +++ b/.github/workflows/build-wheels-linux.yml @@ -22,12 +22,12 @@ on: jobs: generate-matrix: - uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@main + uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@release/2.13 with: package-type: wheel os: linux test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 with-cuda: disabled with-rocm: disabled python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' @@ -47,12 +47,12 @@ jobs: smoke-test-script: .ci/scripts/wheel/test_linux.py package-name: executorch name: ${{ matrix.repository }} - uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@main + uses: pytorch/test-infra/.github/workflows/build_wheels_linux.yml@release/2.13 with: repository: ${{ matrix.repository }} ref: "" test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 build-matrix: ${{ needs.generate-matrix.outputs.matrix }} submodules: recursive env-var-script: .ci/scripts/wheel/envvar_linux.sh diff --git a/.github/workflows/build-wheels-macos.yml b/.github/workflows/build-wheels-macos.yml index 3fddb8e6d26..68f86529cfb 100644 --- a/.github/workflows/build-wheels-macos.yml +++ b/.github/workflows/build-wheels-macos.yml @@ -22,12 +22,12 @@ on: jobs: generate-matrix: - uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@main + uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@release/2.13 with: package-type: wheel os: macos-arm64 test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 with-cuda: disabled with-rocm: disabled python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' @@ -47,12 +47,12 @@ jobs: smoke-test-script: .ci/scripts/wheel/test_macos.py package-name: executorch name: ${{ matrix.repository }} - uses: pytorch/test-infra/.github/workflows/build_wheels_macos.yml@main + uses: pytorch/test-infra/.github/workflows/build_wheels_macos.yml@release/2.13 with: repository: ${{ matrix.repository }} ref: "" test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 build-matrix: ${{ needs.generate-matrix.outputs.matrix }} submodules: recursive delocate-wheel: false diff --git a/.github/workflows/build-wheels-windows.yml b/.github/workflows/build-wheels-windows.yml index 9b1f8663bd2..5848740655b 100644 --- a/.github/workflows/build-wheels-windows.yml +++ b/.github/workflows/build-wheels-windows.yml @@ -25,12 +25,12 @@ permissions: jobs: generate-matrix: - uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@main + uses: pytorch/test-infra/.github/workflows/generate_binary_build_matrix.yml@release/2.13 with: package-type: wheel os: windows test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 with-cuda: disabled with-rocm: disabled python-versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]' @@ -48,12 +48,12 @@ jobs: smoke-test-script: .ci/scripts/wheel/test_windows.py package-name: executorch name: ${{ matrix.repository }} - uses: pytorch/test-infra/.github/workflows/build_wheels_windows.yml@main + uses: pytorch/test-infra/.github/workflows/build_wheels_windows.yml@release/2.13 with: repository: ${{ matrix.repository }} ref: "" test-infra-repository: pytorch/test-infra - test-infra-ref: main + test-infra-ref: release/2.13 build-matrix: ${{ needs.generate-matrix.outputs.matrix }} pre-script: ${{ matrix.pre-script }} env-script: ${{ matrix.env-script }} diff --git a/.github/workflows/claude-code.yml b/.github/workflows/claude-code.yml index ae241c8e754..6bcde050583 100644 --- a/.github/workflows/claude-code.yml +++ b/.github/workflows/claude-code.yml @@ -8,7 +8,7 @@ on: jobs: claude-code: - uses: pytorch/test-infra/.github/workflows/_claude-code.yml@main + uses: pytorch/test-infra/.github/workflows/_claude-code.yml@release/2.13 with: setup_script: | pip install lintrunner==0.12.7 lintrunner-adapters==0.14.0 diff --git a/.github/workflows/cuda-perf.yml b/.github/workflows/cuda-perf.yml index 6c1e6219b60..991a4d81fe4 100644 --- a/.github/workflows/cuda-perf.yml +++ b/.github/workflows/cuda-perf.yml @@ -124,7 +124,7 @@ jobs: export-models: name: export-models needs: set-parameters - uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@release/2.13 permissions: id-token: write contents: read @@ -206,7 +206,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@release/2.13 permissions: id-token: write contents: read @@ -500,7 +500,7 @@ jobs: echo "::endgroup::" - name: Upload benchmark results to dashboard - uses: pytorch/test-infra/.github/actions/upload-benchmark-results@main + uses: pytorch/test-infra/.github/actions/upload-benchmark-results@release/2.13 with: benchmark-results-dir: benchmark-results/v3 dry-run: false diff --git a/.github/workflows/cuda-windows.yml b/.github/workflows/cuda-windows.yml index 175251f7b14..bd4ae1e24c5 100644 --- a/.github/workflows/cuda-windows.yml +++ b/.github/workflows/cuda-windows.yml @@ -54,7 +54,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/cuda-windows.yml') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -161,7 +161,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/cuda-windows.yml') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 strategy: fail-fast: false matrix: diff --git a/.github/workflows/cuda.yml b/.github/workflows/cuda.yml index 03f8556c461..71fbeda7f94 100644 --- a/.github/workflows/cuda.yml +++ b/.github/workflows/cuda.yml @@ -64,7 +64,7 @@ jobs: cuda-version: ["12.6", "13.0"] name: test-executorch-cuda-build-${{ matrix.cuda-version }} - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -123,7 +123,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/export_model_artifact.sh') || contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -167,7 +167,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/export_model_artifact.sh') || contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -224,7 +224,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/export_model_artifact.sh') || contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -265,7 +265,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@release/2.13 permissions: id-token: write contents: read @@ -439,7 +439,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v3.yml@release/2.13 permissions: id-token: write contents: read @@ -584,7 +584,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/test_model_e2e.sh') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/doc-build.yml b/.github/workflows/doc-build.yml index 0921d78f821..ea1ef0ea067 100644 --- a/.github/workflows/doc-build.yml +++ b/.github/workflows/doc-build.yml @@ -19,7 +19,7 @@ concurrency: jobs: build: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -98,7 +98,7 @@ jobs: permissions: id-token: write contents: write - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 secrets: inherit with: repository: pytorch/executorch diff --git a/.github/workflows/docker-builds.yml b/.github/workflows/docker-builds.yml index 39f7f8cdfe4..94702c2a669 100644 --- a/.github/workflows/docker-builds.yml +++ b/.github/workflows/docker-builds.yml @@ -67,7 +67,7 @@ jobs: mkdir "${GITHUB_WORKSPACE}" - name: Setup SSH (Click me for login details) - uses: pytorch/test-infra/.github/actions/setup-ssh@main + uses: pytorch/test-infra/.github/actions/setup-ssh@release/2.13 with: github-secret: ${{ secrets.GITHUB_TOKEN }} @@ -75,12 +75,12 @@ jobs: uses: actions/checkout@v3 - name: Setup Linux - uses: pytorch/test-infra/.github/actions/setup-linux@main + uses: pytorch/test-infra/.github/actions/setup-linux@release/2.13 - name: Build docker image id: build-docker-image timeout-minutes: 145 - uses: pytorch/test-infra/.github/actions/calculate-docker-image@main + uses: pytorch/test-infra/.github/actions/calculate-docker-image@release/2.13 with: docker-image-name: ci-image:${{ matrix.docker-image-name }} always-rebuild: true @@ -88,5 +88,5 @@ jobs: force-push: true - name: Teardown Linux - uses: pytorch/test-infra/.github/actions/teardown-linux@main + uses: pytorch/test-infra/.github/actions/teardown-linux@release/2.13 if: always() diff --git a/.github/workflows/metal.yml b/.github/workflows/metal.yml index 0270820c4ed..f8097d4f3da 100644 --- a/.github/workflows/metal.yml +++ b/.github/workflows/metal.yml @@ -48,7 +48,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, 'extension/llm/export') || contains(needs.changed-files.outputs.changed-files, '.github/workflows/metal.yml') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-m2-stable @@ -73,7 +73,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, 'extension/llm/export') || contains(needs.changed-files.outputs.changed-files, '.github/workflows/metal.yml') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-m2-stable @@ -106,7 +106,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, 'extension/llm/export') || contains(needs.changed-files.outputs.changed-files, '.github/workflows/metal.yml') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-m2-stable @@ -218,7 +218,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/metal.yml') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit strategy: fail-fast: false @@ -304,7 +304,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/metal.yml') || needs.run-decision.outputs.is-full-run == 'true' ) - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: fail-fast: false matrix: diff --git a/.github/workflows/mlx.yml b/.github/workflows/mlx.yml index 4fdea010b40..c799d508fd1 100644 --- a/.github/workflows/mlx.yml +++ b/.github/workflows/mlx.yml @@ -40,7 +40,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" job-name: test-mlx @@ -114,7 +114,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" job-name: test-mlx-qwen35-moe @@ -197,7 +197,7 @@ jobs: fail-fast: false matrix: suite: [models, operators] - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" job-name: test-mlx-backend-${{ matrix.suite }} @@ -243,7 +243,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" job-name: test-mlx-parakeet @@ -304,7 +304,7 @@ jobs: if: | (github.event.pull_request.head.repo.full_name == github.repository || github.event_name != 'pull_request') && (github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true') - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit with: default-packages: "" @@ -368,7 +368,7 @@ jobs: if: | (github.event.pull_request.head.repo.full_name == github.repository || github.event_name != 'pull_request') && (github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true') - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit with: default-packages: "" @@ -449,7 +449,7 @@ jobs: if: | (github.event.pull_request.head.repo.full_name == github.repository || github.event_name != 'pull_request') && (github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true') - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit with: default-packages: "" @@ -504,7 +504,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" job-name: test-mlx-stories110m @@ -600,7 +600,7 @@ jobs: use-custom: false qconfig: "4w" runner: "macos-15-xlarge" - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 secrets: inherit with: default-packages: "" diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 30cbb487aa7..0032feb6ddb 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -21,13 +21,13 @@ jobs: environment: ${{ (github.event_name == 'schedule') && 'update-commit-hash' || '' }} steps: - name: update-pytorch-commit-hash - uses: pytorch/test-infra/.github/actions/update-commit-hash@main + uses: pytorch/test-infra/.github/actions/update-commit-hash@release/2.13 if: ${{ github.event_name == 'schedule' }} with: repo-name: pytorch branch: main pin-folder: .ci/docker/ci_commit_pins - test-infra-ref: main + test-infra-ref: release/2.13 updatebot-token: ${{ secrets.UPDATEBOT_TOKEN }} pytorchbot-token: ${{ secrets.GH_PYTORCHBOT_TOKEN }} @@ -49,7 +49,7 @@ jobs: test-static-hf-llm-qnn-linux: name: test-static-hf-llm-qnn-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/periodic.yml b/.github/workflows/periodic.yml index 01bff087124..a93bde175e6 100644 --- a/.github/workflows/periodic.yml +++ b/.github/workflows/periodic.yml @@ -42,7 +42,7 @@ jobs: test-models-linux: name: test-models-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/pull.yml b/.github/workflows/pull.yml index ddad7eebf61..7ef3e96b51e 100644 --- a/.github/workflows/pull.yml +++ b/.github/workflows/pull.yml @@ -36,7 +36,7 @@ jobs: test-qnn-wheel-packages-linux: name: test-qnn-wheel-packages-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -75,7 +75,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, 'setup.py') || contains(needs.changed-files.outputs.changed-files, 'tools/cmake/') name: test-minimal-wheel-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -93,7 +93,7 @@ jobs: test-setup-linux-gcc: name: test-setup-linux-gcc - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -118,7 +118,7 @@ jobs: test-models-linux-basic: name: test-models-linux-basic - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -162,7 +162,7 @@ jobs: test-models-linux: name: test-models-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -215,7 +215,7 @@ jobs: test-parakeet-xnnpack-linux: name: test-parakeet-xnnpack-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -248,7 +248,7 @@ jobs: test-voxtral-realtime-xnnpack-linux: name: test-voxtral-realtime-xnnpack-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -285,7 +285,7 @@ jobs: test-llama-runner-linux: # Test Both linux x86 and linux aarch64 name: test-llama-runner-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -335,7 +335,7 @@ jobs: test-llama-runner-linux-android: name: test-llama-runner-linux-android - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -360,7 +360,7 @@ jobs: test-custom-ops-linux: name: test-custom-ops-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -384,7 +384,7 @@ jobs: test-selective-build-linux: name: test-selective-build-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -409,7 +409,7 @@ jobs: test-multimodal-linux: if: ${{ !github.event.pull_request.head.repo.fork }} name: test-multimodal-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -447,7 +447,7 @@ jobs: test-moshi-linux: name: test-moshi-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -479,7 +479,7 @@ jobs: test-quantized-aot-lib-linux: name: test-quantized-aot-lib-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -502,7 +502,7 @@ jobs: test-binary-size-linux-gcc: name: test-binary-size-linux-gcc - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -545,7 +545,7 @@ jobs: test-binary-size-linux: name: test-binary-size-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -589,7 +589,7 @@ jobs: test-arm-cortex-m-size-test: name: test-arm-cortex-m-size-test - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -682,7 +682,7 @@ jobs: test-mcu-cortex-m-backend: name: test-mcu-cortex-m-backend - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -749,7 +749,7 @@ jobs: test-qnn-buck-build-linux: name: test-qnn-buck-build-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -783,7 +783,7 @@ jobs: test-arm-backend-no-driver: name: test-arm-backend-no-driver - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -818,7 +818,7 @@ jobs: test-arm-backend-public-api-backward-compatibility: name: test-arm-backend-public-api-backward-compatibility - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -845,7 +845,7 @@ jobs: test-llama-runner-qnn-linux: name: test-llama-runner-qnn-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -884,7 +884,7 @@ jobs: test-static-llama-qnn-linux: name: test-static-llama-qnn-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -918,7 +918,7 @@ jobs: test-sqnr-static-llm-qnn-linux: name: test-sqnr-static-llm-qnn-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -952,7 +952,7 @@ jobs: test-qnn-models-linux: name: test-qnn-models-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -977,7 +977,7 @@ jobs: test-qnn-direct-build-linux: name: test-qnn-direct-build-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1010,7 +1010,7 @@ jobs: test-qnn-passes-linux: name: test-qnn-passes-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1044,7 +1044,7 @@ jobs: test-qnn-delegate-linux: name: test-qnn-delegate-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1082,7 +1082,7 @@ jobs: test-phi-3-mini-runner-linux: name: test-phi-3-mini-runner-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1112,7 +1112,7 @@ jobs: test-qnn-python-imports-linux: name: test-qnn-python-imports-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1160,7 +1160,7 @@ jobs: test-eval_llama-wikitext-linux: name: test-eval_llama-wikitext-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1188,7 +1188,7 @@ jobs: # TODO(larryliu0820): Fix this issue before reenabling it: https://gist.github.com/larryliu0820/7377ecd0d79dbc06076cec8d9f2b85d2 # test-eval_llama-mmlu-linux: # name: test-eval_llama-mmlu-linux - # uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + # uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 # permissions: # id-token: write # contents: read @@ -1215,7 +1215,7 @@ jobs: test-llama_runner_eager-linux: name: test-llama_runner_eager-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1242,7 +1242,7 @@ jobs: test-lora-linux: name: test-lora-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1269,7 +1269,7 @@ jobs: test-lora-multimethod-linux: name: test-lora-multimethod-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1296,7 +1296,7 @@ jobs: test-mediatek-models-linux: name: test-mediatek-models-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1323,7 +1323,7 @@ jobs: test-openvino-linux: name: test-openvino-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1345,7 +1345,7 @@ jobs: test-build-wasm-linux: name: test-build-wasm-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1373,7 +1373,7 @@ jobs: unittest-wasm-bindings: name: unittest-wasm-bindings - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1418,7 +1418,7 @@ jobs: pnpm test unittest-nxp-neutron: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1465,7 +1465,7 @@ jobs: name: test-samsung-quantmodels-linux # Skip this job if the pull request is from a fork (secrets are not available) if: github.event.pull_request.head.repo.full_name == github.repository || github.event_name != 'pull_request' - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1503,7 +1503,7 @@ jobs: name: test-samsung-models-linux # Skip this job if the pull request is from a fork (secrets are not available) if: github.event.pull_request.head.repo.full_name == github.repository || github.event_name != 'pull_request' - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1541,7 +1541,7 @@ jobs: test-vulkan-models-linux: name: test-vulkan-models-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1582,7 +1582,7 @@ jobs: test-vulkan-operators-linux: name: test-vulkan-operators-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1642,7 +1642,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/pull.yml') || needs.run-decision.outputs.is-full-run == 'true' name: test-coreml-bc-macos (${{ matrix.runner }}) - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 permissions: id-token: write contents: read @@ -1674,7 +1674,7 @@ jobs: nxp-build-test: name: nxp-build-test - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/qnn-windows-msvc.yml b/.github/workflows/qnn-windows-msvc.yml index 5a8f632a0c5..915f09684b7 100644 --- a/.github/workflows/qnn-windows-msvc.yml +++ b/.github/workflows/qnn-windows-msvc.yml @@ -58,7 +58,7 @@ permissions: jobs: build-qnn-windows-msvc: name: build-qnn-windows-msvc - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} timeout: 90 diff --git a/.github/workflows/test-pico2-build.yml b/.github/workflows/test-pico2-build.yml index c15c4235baa..343fed8fa4f 100644 --- a/.github/workflows/test-pico2-build.yml +++ b/.github/workflows/test-pico2-build.yml @@ -20,7 +20,7 @@ concurrency: jobs: test-pico2-fp32-build: name: test-pico2-fp32-build - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -90,7 +90,7 @@ jobs: test-pico2-cmsis-build: name: test-pico2-cmsis-nn-build - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read diff --git a/.github/workflows/test-webgpu-native.yml b/.github/workflows/test-webgpu-native.yml index 7220ef9f7b5..924c5bf7c05 100644 --- a/.github/workflows/test-webgpu-native.yml +++ b/.github/workflows/test-webgpu-native.yml @@ -30,7 +30,7 @@ concurrency: jobs: test-webgpu-native: - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} runner: linux.4xlarge.memory diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index 5cecba6dc07..38290fed869 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -44,7 +44,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: matrix: # Mac runners are expensive and limited, and non reliable. @@ -82,7 +82,7 @@ jobs: test-arm-backend-zephyr: name: test-arm-backend-zephyr - uses: pytorch/test-infra/.github/workflows/linux_job.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job.yml@release/2.13 strategy: matrix: include: @@ -120,7 +120,7 @@ jobs: test-models-linux-aarch64: name: test-models-linux-aarch64 - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -174,7 +174,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: matrix: include: @@ -201,7 +201,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: matrix: include: @@ -224,7 +224,7 @@ jobs: test-demo-backend-delegation: name: test-demo-backend-delegation - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -251,7 +251,7 @@ jobs: test-arm-backend-ethos-u: name: test-arm-backend-ethos-u - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -303,7 +303,7 @@ jobs: test-arm-backend-vkml: name: test-arm-backend-vkml - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -354,7 +354,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/trunk.yml') || needs.run-decision.outputs.is-full-run == 'true' name: test-coreml-delegate - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-14-xlarge @@ -384,7 +384,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/trunk.yml') || needs.run-decision.outputs.is-full-run == 'true' name: test-static-llama-ane - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-m1-stable @@ -411,7 +411,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 with: default-packages: "" runner: macos-m1-stable @@ -433,7 +433,7 @@ jobs: test-llama-runner-linux: # Test Both linux x86 and linux aarch64 name: test-llama-runner-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -508,7 +508,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/trunk.yml') || needs.run-decision.outputs.is-full-run == 'true' name: test-llama-runner-mac - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: matrix: dtype: [fp32] @@ -544,7 +544,7 @@ jobs: test-torchao-huggingface-checkpoints: name: test-torchao-huggingface-checkpoints - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -598,7 +598,7 @@ jobs: needs.run-decision.outputs.is-full-run == 'true' ) name: test-multimodal-macos - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 permissions: id-token: write contents: read @@ -638,7 +638,7 @@ jobs: test-qnn-model: name: test-qnn-model - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -664,7 +664,7 @@ jobs: test-qnn-optimum-model: name: test-qnn-optimum-model - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -699,7 +699,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/trunk.yml') || needs.run-decision.outputs.is-full-run == 'true' name: test-models-macos-coreml - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: matrix: model: [dl3, edsr, efficient_sam, emformer_join, emformer_transcribe, ic3, ic4, mobilebert, mv2, mv3, resnet50, vit, w2l] @@ -753,7 +753,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/trunk.yml') || needs.run-decision.outputs.is-full-run == 'true' name: test-models-macos-mps - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 strategy: fail-fast: false with: @@ -781,7 +781,7 @@ jobs: # NB: Don't run this on fork PRs because they won't have access to the secret and would fail anyway if: ${{ !github.event.pull_request.head.repo.fork }} name: test-huggingface-transformers-xnnpack - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -881,7 +881,7 @@ jobs: needs.run-decision.outputs.is-full-run == 'true' ) name: test-huggingface-transformers-macos - uses: pytorch/test-infra/.github/workflows/macos_job.yml@main + uses: pytorch/test-infra/.github/workflows/macos_job.yml@release/2.13 permissions: id-token: write contents: read @@ -944,7 +944,7 @@ jobs: test-llama-runner-qnn-linux: name: test-llama-runner-qnn-linux - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -1027,7 +1027,7 @@ jobs: if: | github.event_name == 'pull_request' || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 strategy: fail-fast: false matrix: diff --git a/.github/workflows/update-viablestrict.yml b/.github/workflows/update-viablestrict.yml index 36d3a3209a8..83e5af32224 100644 --- a/.github/workflows/update-viablestrict.yml +++ b/.github/workflows/update-viablestrict.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Update viable/strict id: update - uses: pytorch/test-infra/.github/actions/update-viablestrict@main + uses: pytorch/test-infra/.github/actions/update-viablestrict@release/2.13 with: repository: pytorch/executorch stable-branch: viable/strict diff --git a/.github/workflows/vulkan.yml b/.github/workflows/vulkan.yml index 276868836b9..c553b3d06ba 100644 --- a/.github/workflows/vulkan.yml +++ b/.github/workflows/vulkan.yml @@ -50,7 +50,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/setup-vulkan-linux-deps.sh') || contains(needs.changed-files.outputs.changed-files, '.github/workflows/vulkan.yml') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@main + uses: pytorch/test-infra/.github/workflows/linux_job_v2.yml@release/2.13 permissions: id-token: write contents: read @@ -134,7 +134,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.github/workflows/vulkan.yml') || needs.run-decision.outputs.is-full-run == 'true' name: build-vulkan-windows-msvc - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} timeout: 90 diff --git a/.github/workflows/windows-msvc.yml b/.github/workflows/windows-msvc.yml index 16939e90c03..7e10219e068 100644 --- a/.github/workflows/windows-msvc.yml +++ b/.github/workflows/windows-msvc.yml @@ -43,7 +43,7 @@ jobs: contains(needs.changed-files.outputs.changed-files, '.ci/scripts/') || contains(needs.changed-files.outputs.changed-files, '.github/workflows/windows-msvc.yml') || needs.run-decision.outputs.is-full-run == 'true' - uses: pytorch/test-infra/.github/workflows/windows_job.yml@main + uses: pytorch/test-infra/.github/workflows/windows_job.yml@release/2.13 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} timeout: 60 diff --git a/docs/README.md b/docs/README.md index da9e6a6a5df..2179ff6d619 100644 --- a/docs/README.md +++ b/docs/README.md @@ -40,7 +40,7 @@ To build the documentation locally: 1. Clone the ExecuTorch repo to your machine. ```bash - git clone -b viable/strict https://github.com/pytorch/executorch.git && cd executorch + git clone -b release/1.4 https://github.com/pytorch/executorch.git && cd executorch ``` 1. If you don't have it already, start either a Python virtual environment: diff --git a/docs/source/getting-started.md b/docs/source/getting-started.md index 39353e2502d..4d05ecb090f 100644 --- a/docs/source/getting-started.md +++ b/docs/source/getting-started.md @@ -174,7 +174,7 @@ ExecuTorch provides C++ APIs, which can be used to target embedded or mobile dev CMake is the preferred build system for the ExecuTorch C++ runtime. To use with CMake, clone the ExecuTorch repository as a subdirectory of your project, and use CMake's `add_subdirectory("executorch")` to include the dependency. The `executorch` target, as well as kernel and backend targets will be made available to link against. The runtime can also be built standalone to support diverse toolchains. See [Using ExecuTorch with C++](using-executorch-cpp.md) and [Building from Source](using-executorch-building-from-source.md) for a detailed description of build integration, targets, and cross compilation. ``` -git clone -b viable/strict https://github.com/pytorch/executorch.git +git clone -b release/1.4 https://github.com/pytorch/executorch.git ``` ```cmake # Set CMAKE_CXX_STANDARD to 17 or above. diff --git a/docs/source/using-executorch-building-from-source.md b/docs/source/using-executorch-building-from-source.md index dee1cc84637..db5468db870 100644 --- a/docs/source/using-executorch-building-from-source.md +++ b/docs/source/using-executorch-building-from-source.md @@ -43,7 +43,7 @@ portability details. ## Environment Setup Clone the ExecuTorch repository from GitHub and create a conda environment. Venv can be used in place of conda. ```bash - git clone -b viable/strict https://github.com/pytorch/executorch.git + git clone -b release/1.4 https://github.com/pytorch/executorch.git cd executorch conda create -yn executorch python=3.10 conda activate executorch diff --git a/docs/source/using-executorch-ios.md b/docs/source/using-executorch-ios.md index 78d22080d8d..0761f167482 100644 --- a/docs/source/using-executorch-ios.md +++ b/docs/source/using-executorch-ios.md @@ -104,7 +104,7 @@ xcode-select --install 2. Clone ExecuTorch: ```bash -git clone -b viable/strict https://github.com/pytorch/executorch.git --depth 1 --recurse-submodules --shallow-submodules && cd executorch +git clone -b release/1.4 https://github.com/pytorch/executorch.git --depth 1 --recurse-submodules --shallow-submodules && cd executorch ``` 3. Set up [Python](https://www.python.org/downloads/macos/) 3.10+ and activate a virtual environment: From 68451f2da12d49ecf0956996645da41f750f7acd Mon Sep 17 00:00:00 2001 From: Jacob Szwejbka Date: Mon, 27 Jul 2026 09:28:51 -0700 Subject: [PATCH 2/6] [RELEASE ONLY CHANGES] Fix release link checks --- .github/workflows/_link_check.yml | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/.github/workflows/_link_check.yml b/.github/workflows/_link_check.yml index 2d55ff62ea1..d500c7f0806 100644 --- a/.github/workflows/_link_check.yml +++ b/.github/workflows/_link_check.yml @@ -15,14 +15,8 @@ jobs: steps: - uses: actions/checkout@v4 with: + fetch-depth: 0 ref: ${{ inputs.ref }} - - name: Fetch base ref - run: | - if [ "${{ github.event_name }}" = "pull_request" ]; then - git fetch --no-tags --depth=1 origin "${{ github.event.pull_request.base.sha }}" - else - git fetch --no-tags --depth=1 origin "${{ github.event.before }}" - fi - name: Lint URLs run: | ./scripts/lint_urls.sh $( @@ -48,14 +42,8 @@ jobs: steps: - uses: actions/checkout@v4 with: + fetch-depth: 0 ref: ${{ inputs.ref }} - - name: Fetch base ref - run: | - if [ "${{ github.event_name }}" = "pull_request" ]; then - git fetch --no-tags --depth=1 origin "${{ github.event.pull_request.base.sha }}" - else - git fetch --no-tags --depth=1 origin "${{ github.event.before }}" - fi - name: Lint cross-references run: | ./scripts/lint_xrefs.sh $( @@ -81,14 +69,8 @@ jobs: steps: - uses: actions/checkout@v4 with: + fetch-depth: 0 ref: ${{ inputs.ref }} - - name: Fetch base ref - run: | - if [ "${{ github.event_name }}" = "pull_request" ]; then - git fetch --no-tags --depth=1 origin "${{ github.event.pull_request.base.sha }}" - else - git fetch --no-tags --depth=1 origin "${{ github.event.before }}" - fi - name: Lint file sizes run: | chmod +x ./scripts/lint_file_size.sh From d09609faa7f8ad815627ecdb2741188e8d4c7489 Mon Sep 17 00:00:00 2001 From: Scott Roy <161522778+metascroy@users.noreply.github.com> Date: Tue, 21 Jul 2026 17:08:37 -0700 Subject: [PATCH 3/6] Flakey CI fix (#21110) --- examples/models/qwen3_5_moe/test_chunked_prefill.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/models/qwen3_5_moe/test_chunked_prefill.py b/examples/models/qwen3_5_moe/test_chunked_prefill.py index 0a3f1e7c89a..00ec55e936e 100644 --- a/examples/models/qwen3_5_moe/test_chunked_prefill.py +++ b/examples/models/qwen3_5_moe/test_chunked_prefill.py @@ -113,7 +113,10 @@ def test_chunked_prefill_matches_unchunked(self): logits_chunk.to(torch.float32), logits_full.to(torch.float32), rtol=1e-2, - atol=1e-2, + # cross-hardware MLX accumulation noise on near-zero logits (the + # greedy-token assert above is the functional guard; a real chunk- + # boundary desync would diverge by orders of magnitude more) + atol=3e-2, ) From a316fe5d07899a27c4746f3b521f638869990aac Mon Sep 17 00:00:00 2001 From: Jacob Szwejbka Date: Wed, 29 Jul 2026 21:02:41 -0700 Subject: [PATCH 4/6] Fix CUDA autotuning with released KV storage --- backends/cuda/cuda_backend.py | 4 ++++ backends/cuda/tests/test_cuda_export.py | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/backends/cuda/cuda_backend.py b/backends/cuda/cuda_backend.py index bf28077c62c..18a37f124ab 100644 --- a/backends/cuda/cuda_backend.py +++ b/backends/cuda/cuda_backend.py @@ -122,6 +122,10 @@ def _cpu_clone_preserve_strides(x: torch.Tensor) -> torch.Tensor: if _is_emptied(x): return _full_zeros_preserving_strides(x, "cpu") return orig_clone(x).cpu() + if _is_emptied(x): + # Autotuning needs device-backed inputs. Rehydrate the zero-filled + # KV buffer temporarily instead of cloning its freed storage. + return _full_zeros_preserving_strides(x, x.device) return orig_clone(x) def _get_const_synthesize_zeros(self, name): diff --git a/backends/cuda/tests/test_cuda_export.py b/backends/cuda/tests/test_cuda_export.py index 2bd3d4db109..71428b9c192 100644 --- a/backends/cuda/tests/test_cuda_export.py +++ b/backends/cuda/tests/test_cuda_export.py @@ -8,7 +8,10 @@ from typing import Tuple import torch -from executorch.backends.cuda.cuda_backend import CudaBackend +from executorch.backends.cuda.cuda_backend import ( + CudaBackend, + _compile_time_cpu_clones, +) from executorch.backends.cuda.cuda_partitioner import CudaPartitioner from executorch.examples.models.toy_model import SdpaModule from executorch.exir import EdgeCompileConfig, schema, to_edge_transform_and_lower @@ -17,6 +20,20 @@ class TestCudaBackendCompileOptions(unittest.TestCase): + def test_low_memory_clone_rehydrates_emptied_tensor_for_autotuning(self): + tensor = torch.empty_strided((2, 3), (3, 1)) + tensor.untyped_storage().resize_(0) + + with _compile_time_cpu_clones(torch.device("cuda")): + from torch._inductor import compile_fx + + clone = compile_fx.clone_preserve_strides(tensor) + + self.assertEqual(clone.shape, tensor.shape) + self.assertEqual(clone.stride(), tensor.stride()) + self.assertEqual(clone.untyped_storage().nbytes(), 6 * tensor.element_size()) + self.assertEqual(torch.count_nonzero(clone), 0) + def test_emulate_precision_casts_compile_spec(self): options = CudaBackend.get_aoti_compile_options( [CompileSpec(key="emulate_precision_casts", value=b"OFF")] From 9c4bc1d13f3026a757c9ee464dcd13f42a2b8605 Mon Sep 17 00:00:00 2001 From: Jacob Szwejbka Date: Wed, 29 Jul 2026 21:10:00 -0700 Subject: [PATCH 5/6] Format CUDA export regression test --- backends/cuda/tests/test_cuda_export.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backends/cuda/tests/test_cuda_export.py b/backends/cuda/tests/test_cuda_export.py index 71428b9c192..b94cabd2519 100644 --- a/backends/cuda/tests/test_cuda_export.py +++ b/backends/cuda/tests/test_cuda_export.py @@ -8,10 +8,7 @@ from typing import Tuple import torch -from executorch.backends.cuda.cuda_backend import ( - CudaBackend, - _compile_time_cpu_clones, -) +from executorch.backends.cuda.cuda_backend import _compile_time_cpu_clones, CudaBackend from executorch.backends.cuda.cuda_partitioner import CudaPartitioner from executorch.examples.models.toy_model import SdpaModule from executorch.exir import EdgeCompileConfig, schema, to_edge_transform_and_lower From ec58b3edb1cddc96d8ec02bbae67721848525bba Mon Sep 17 00:00:00 2001 From: Jacob Szwejbka Date: Thu, 30 Jul 2026 09:53:04 -0700 Subject: [PATCH 6/6] Rehydrate all emptied CUDA autotune arguments --- backends/cuda/cuda_backend.py | 17 +++++++++++++++ backends/cuda/tests/test_cuda_export.py | 28 +++++++++++++++++-------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/backends/cuda/cuda_backend.py b/backends/cuda/cuda_backend.py index 18a37f124ab..9b1bec49576 100644 --- a/backends/cuda/cuda_backend.py +++ b/backends/cuda/cuda_backend.py @@ -89,11 +89,13 @@ def _compile_time_cpu_clones(target_device: torch.device): from torch._inductor import compile_fx as _cfx, graph as _graph from torch._inductor.codegen.cpp_wrapper_cpu import CppWrapperCpu as _Cpp from torch._inductor.graph import GraphLowering as _GL + from torch._inductor.runtime.triton_heuristics import CachingAutotuner as _Autotuner orig_clone = _cfx.clone_preserve_strides orig_codegen_device = _Cpp.codegen_device orig_get_const = _GL.get_original_value_of_constant orig_is_same = _graph.is_same_tensor + orig_maybe_clone_args = _Autotuner.maybe_clone_args def _is_same_skip_emptied(data, value): # KV buffers freed via resize_(0) all have data_ptr 0, so the stock @@ -128,6 +130,19 @@ def _cpu_clone_preserve_strides(x: torch.Tensor) -> torch.Tensor: return _full_zeros_preserving_strides(x, x.device) return orig_clone(x) + def _maybe_clone_args_with_rehydrated_kv(self, exclude, *args, **kwargs): + # Inductor only clones mutated arguments before benchmarking. A fused + # kernel can also receive read-only views of an emptied KV buffer, so + # rehydrate every emptied tensor argument before the clone step. + def rehydrate(arg): + if _is_emptied(arg): + return _full_zeros_preserving_strides(arg, arg.device) + return arg + + args = tuple(rehydrate(arg) for arg in args) + kwargs = {name: rehydrate(arg) for name, arg in kwargs.items()} + return orig_maybe_clone_args(self, exclude, *args, **kwargs) + def _get_const_synthesize_zeros(self, name): # AOTI serializes each constant via get_original_value_of_constant -> # _to_bytes. For KV buffers we freed with resize_(0) this would otherwise @@ -156,6 +171,7 @@ def _codegen_device_target_aware(self, device): _Cpp.codegen_device = _codegen_device_target_aware _GL.get_original_value_of_constant = _get_const_synthesize_zeros _graph.is_same_tensor = _is_same_skip_emptied + _Autotuner.maybe_clone_args = _maybe_clone_args_with_rehydrated_kv prev_active = getattr(_CPU_CLONE_GUARD, "active", False) _CPU_CLONE_GUARD.active = True try: @@ -166,6 +182,7 @@ def _codegen_device_target_aware(self, device): _Cpp.codegen_device = orig_codegen_device _GL.get_original_value_of_constant = orig_get_const _graph.is_same_tensor = orig_is_same + _Autotuner.maybe_clone_args = orig_maybe_clone_args def _is_kv_buffer(name, v) -> bool: diff --git a/backends/cuda/tests/test_cuda_export.py b/backends/cuda/tests/test_cuda_export.py index b94cabd2519..0811b926e69 100644 --- a/backends/cuda/tests/test_cuda_export.py +++ b/backends/cuda/tests/test_cuda_export.py @@ -5,6 +5,7 @@ # LICENSE file in the root directory of this source tree. import unittest +from types import SimpleNamespace from typing import Tuple import torch @@ -18,18 +19,27 @@ class TestCudaBackendCompileOptions(unittest.TestCase): def test_low_memory_clone_rehydrates_emptied_tensor_for_autotuning(self): - tensor = torch.empty_strided((2, 3), (3, 1)) - tensor.untyped_storage().resize_(0) + read_only = torch.empty_strided((2, 3), (3, 1)) + mutated = torch.empty_strided((2, 3), (3, 1)) + read_only.untyped_storage().resize_(0) + mutated.untyped_storage().resize_(0) - with _compile_time_cpu_clones(torch.device("cuda")): - from torch._inductor import compile_fx + from torch._inductor.runtime.triton_heuristics import CachingAutotuner + + autotuner = object.__new__(CachingAutotuner) + autotuner.fn = SimpleNamespace(arg_names=["read_only", "mutated"]) + autotuner.mutated_arg_names = ["mutated"] - clone = compile_fx.clone_preserve_strides(tensor) + with _compile_time_cpu_clones(torch.device("cuda")): + cloned_args, _ = autotuner.maybe_clone_args(set(), read_only, mutated) - self.assertEqual(clone.shape, tensor.shape) - self.assertEqual(clone.stride(), tensor.stride()) - self.assertEqual(clone.untyped_storage().nbytes(), 6 * tensor.element_size()) - self.assertEqual(torch.count_nonzero(clone), 0) + for clone in cloned_args: + self.assertEqual(clone.shape, read_only.shape) + self.assertEqual(clone.stride(), read_only.stride()) + self.assertEqual( + clone.untyped_storage().nbytes(), 6 * read_only.element_size() + ) + self.assertEqual(torch.count_nonzero(clone), 0) def test_emulate_precision_casts_compile_spec(self): options = CudaBackend.get_aoti_compile_options(