# @generated DO NOT EDIT MANUALLY # Template is at: .github/templates/windows_binary_build_workflow.yml.j2 # Generation script: .github/scripts/generate_ci_workflows.py name: windows-binary-libtorch-debug on: push: # NOTE: Meta Employees can trigger new nightlies using: https://fburl.com/trigger_pytorch_nightly_build branches: - nightly tags: # NOTE: Binary build pipelines should only get triggered on release candidate builds # Release candidate tags look like: v1.11.0-rc1 - v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+ - 'ciflow/binaries/*' - 'ciflow/binaries_libtorch/*' workflow_dispatch: env: # Needed for conda builds ALPINE_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/tool/alpine" AWS_DEFAULT_REGION: us-east-1 BUILD_ENVIRONMENT: windows-binary-libtorch-debug GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.pull_request.number }} SHA1: ${{ github.event.pull_request.head.sha || github.sha }} SKIP_ALL_TESTS: 1 OS: windows concurrency: group: windows-binary-libtorch-debug-${{ github.event.pull_request.number || github.ref_name }}-${{ github.ref_type == 'branch' && github.sha }}-${{ github.event_name == 'workflow_dispatch' }} cancel-in-progress: true jobs: get-label-type: if: github.repository_owner == 'pytorch' name: get-label-type uses: pytorch/pytorch/.github/workflows/_runner-determinator.yml@main with: triggering_actor: ${{ github.triggering_actor }} issue_owner: ${{ github.event.pull_request.user.login || github.event.issue.user.login }} curr_branch: ${{ github.head_ref || github.ref_name }} curr_ref_type: ${{ github.ref_type }} libtorch-cpu-shared-with-deps-debug-build: if: ${{ github.repository_owner == 'pytorch' }} needs: get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.12xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cpu GPU_ARCH_TYPE: cpu SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Build PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_build.sh" - uses: actions/upload-artifact@v4.4.0 if: always() with: name: libtorch-cpu-shared-with-deps-debug retention-days: 14 if-no-files-found: error path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cpu-shared-with-deps-debug-test: # Testing if: ${{ github.repository_owner == 'pytorch' }} needs: - libtorch-cpu-shared-with-deps-debug-build - get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.4xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cpu GPU_ARCH_TYPE: cpu SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - uses: actions/download-artifact@v4.1.7 name: Download Build Artifacts with: name: libtorch-cpu-shared-with-deps-debug path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Test PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_test.sh" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cpu-shared-with-deps-debug-upload: # Uploading if: ${{ github.repository_owner == 'pytorch' }} permissions: id-token: write contents: read needs: libtorch-cpu-shared-with-deps-debug-test with: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cpu GPU_ARCH_TYPE: cpu LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" build_name: libtorch-cpu-shared-with-deps-debug secrets: github-token: ${{ secrets.GITHUB_TOKEN }} uses: ./.github/workflows/_binary-upload.yml libtorch-cuda12_6-shared-with-deps-debug-build: if: ${{ github.repository_owner == 'pytorch' }} needs: get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.12xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu126 GPU_ARCH_VERSION: "12.6" GPU_ARCH_TYPE: cuda SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Build PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_build.sh" - uses: actions/upload-artifact@v4.4.0 if: always() with: name: libtorch-cuda12_6-shared-with-deps-debug retention-days: 14 if-no-files-found: error path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cuda12_6-shared-with-deps-debug-test: # Testing if: ${{ github.repository_owner == 'pytorch' }} needs: - libtorch-cuda12_6-shared-with-deps-debug-build - get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.g4dn.xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu126 GPU_ARCH_VERSION: "12.6" GPU_ARCH_TYPE: cuda SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - uses: actions/download-artifact@v4.1.7 name: Download Build Artifacts with: name: libtorch-cuda12_6-shared-with-deps-debug path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Test PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_test.sh" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cuda12_6-shared-with-deps-debug-upload: # Uploading if: ${{ github.repository_owner == 'pytorch' }} permissions: id-token: write contents: read needs: libtorch-cuda12_6-shared-with-deps-debug-test with: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu126 GPU_ARCH_VERSION: "12.6" GPU_ARCH_TYPE: cuda LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" build_name: libtorch-cuda12_6-shared-with-deps-debug secrets: github-token: ${{ secrets.GITHUB_TOKEN }} uses: ./.github/workflows/_binary-upload.yml libtorch-cuda12_8-shared-with-deps-debug-build: if: ${{ github.repository_owner == 'pytorch' }} needs: get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.12xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu128 GPU_ARCH_VERSION: "12.8" GPU_ARCH_TYPE: cuda SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Build PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_build.sh" - uses: actions/upload-artifact@v4.4.0 if: always() with: name: libtorch-cuda12_8-shared-with-deps-debug retention-days: 14 if-no-files-found: error path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cuda12_8-shared-with-deps-debug-test: # Testing if: ${{ github.repository_owner == 'pytorch' }} needs: - libtorch-cuda12_8-shared-with-deps-debug-build - get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.g4dn.xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu128 GPU_ARCH_VERSION: "12.8" GPU_ARCH_TYPE: cuda SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - uses: actions/download-artifact@v4.1.7 name: Download Build Artifacts with: name: libtorch-cuda12_8-shared-with-deps-debug path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Test PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_test.sh" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cuda12_8-shared-with-deps-debug-upload: # Uploading if: ${{ github.repository_owner == 'pytorch' }} permissions: id-token: write contents: read needs: libtorch-cuda12_8-shared-with-deps-debug-test with: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu128 GPU_ARCH_VERSION: "12.8" GPU_ARCH_TYPE: cuda LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" build_name: libtorch-cuda12_8-shared-with-deps-debug secrets: github-token: ${{ secrets.GITHUB_TOKEN }} uses: ./.github/workflows/_binary-upload.yml libtorch-cuda13_0-shared-with-deps-debug-build: if: ${{ github.repository_owner == 'pytorch' }} needs: get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.12xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu130 GPU_ARCH_VERSION: "13.0" GPU_ARCH_TYPE: cuda SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Build PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_build.sh" - uses: actions/upload-artifact@v4.4.0 if: always() with: name: libtorch-cuda13_0-shared-with-deps-debug retention-days: 14 if-no-files-found: error path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cuda13_0-shared-with-deps-debug-test: # Testing if: ${{ github.repository_owner == 'pytorch' }} needs: - libtorch-cuda13_0-shared-with-deps-debug-build - get-label-type runs-on: "${{ needs.get-label-type.outputs.label-type }}windows.g4dn.xlarge" timeout-minutes: 360 env: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu130 GPU_ARCH_VERSION: "13.0" GPU_ARCH_TYPE: cuda SKIP_ALL_TESTS: 1 LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" steps: - name: Display EC2 information shell: bash run: | set -euo pipefail function get_ec2_metadata() { # Pulled from instance metadata endpoint for EC2 # see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html category=$1 curl -H "X-aws-ec2-metadata-token: $(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30")" -fsSL "http://169.254.169.254/latest/meta-data/${category}" } echo "ami-id: $(get_ec2_metadata ami-id)" echo "instance-id: $(get_ec2_metadata instance-id)" echo "instance-type: $(get_ec2_metadata instance-type)" echo "system info $(uname -a)" - name: "[FB EMPLOYEES] Enable SSH (Click me for login details)" uses: pytorch/test-infra/.github/actions/setup-ssh@main continue-on-error: true with: github-secret: ${{ secrets.GITHUB_TOKEN }} - name: Enable git long paths and symlinks on Windows and disable fsmonitor daemon shell: bash run: | git config --global core.longpaths true git config --global core.symlinks true # https://git-scm.com/docs/git-fsmonitor--daemon. The daemon could lock # the directory on Windows and prevent GHA from checking out as reported # in https://github.com/actions/checkout/issues/1018 git config --global core.fsmonitor false # Needed for binary builds, see: https://github.com/pytorch/pytorch/issues/73339#issuecomment-1058981560 - name: Enable long paths on Windows shell: powershell run: | Set-ItemProperty -Path "HKLM:\\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 # Since it's just a defensive command, the workflow should continue even the command fails. This step can be # removed once Windows Defender is removed from the AMI - name: Disables Windows Defender scheduled and real-time scanning for files in directories used by PyTorch continue-on-error: true shell: powershell run: | Add-MpPreference -ExclusionPath $(Get-Location).tostring(),$Env:TEMP -ErrorAction Ignore # Let's both exclude the path and disable Windows Defender completely just to be sure # that it doesn't interfere Set-MpPreference -DisableRealtimeMonitoring $True -ErrorAction Ignore - name: Checkout PyTorch uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} submodules: recursive path: pytorch show-progress: false - name: Clean PyTorch checkout run: | # Remove any artifacts from the previous checkouts git clean -fxd working-directory: pytorch # NOTE: These environment variables are put here so that they can be applied on every job equally # They are also here because setting them at a workflow level doesn't give us access to the # runner.temp variable, which we need. - name: Populate binary env shell: bash run: | echo "BINARY_ENV_FILE=${RUNNER_TEMP}/env" >> "${GITHUB_ENV}" echo "PYTORCH_FINAL_PACKAGE_DIR=${RUNNER_TEMP}/artifacts" >> "${GITHUB_ENV}" echo "WIN_PACKAGE_WORK_DIR=${RUNNER_TEMP}" - uses: actions/download-artifact@v4.1.7 name: Download Build Artifacts with: name: libtorch-cuda13_0-shared-with-deps-debug path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" - name: Populate binary env shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_populate_env.sh" - name: Test PyTorch binary shell: bash run: | "${PYTORCH_ROOT}/.circleci/scripts/binary_windows_test.sh" - name: Wait until all sessions have drained shell: powershell working-directory: pytorch if: always() timeout-minutes: 120 run: | .github\scripts\wait_for_ssh_to_drain.ps1 - name: Kill active ssh sessions if still around (Useful if workflow was cancelled) shell: powershell working-directory: pytorch if: always() run: | .github\scripts\kill_active_ssh_sessions.ps1 libtorch-cuda13_0-shared-with-deps-debug-upload: # Uploading if: ${{ github.repository_owner == 'pytorch' }} permissions: id-token: write contents: read needs: libtorch-cuda13_0-shared-with-deps-debug-test with: PYTORCH_ROOT: ${{ github.workspace }}/pytorch PACKAGE_TYPE: libtorch # TODO: This is a legacy variable that we eventually want to get rid of in # favor of GPU_ARCH_VERSION DESIRED_CUDA: cu130 GPU_ARCH_VERSION: "13.0" GPU_ARCH_TYPE: cuda LIBTORCH_CONFIG: debug LIBTORCH_VARIANT: shared-with-deps # This is a dummy value for libtorch to work correctly with our batch scripts # without this value pip does not get installed for some reason DESIRED_PYTHON: "3.10" build_name: libtorch-cuda13_0-shared-with-deps-debug secrets: github-token: ${{ secrets.GITHUB_TOKEN }} uses: ./.github/workflows/_binary-upload.yml