This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# @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: | |
branches: | |
- main | |
workflow_dispatch: | |
env: | |
# Needed for conda builds | |
ALPINE_IMAGE: "308535385114.dkr.ecr.us-east-1.amazonaws.com/tool/alpine" | |
ANACONDA_USER: pytorch | |
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 | |
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.4xlarge.nonephemeral" | |
timeout-minutes: 240 | |
env: | |
PYTORCH_ROOT: ${{ github.workspace }}/pytorch | |
BUILDER_ROOT: ${{ github.workspace }}/builder | |
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.9" | |
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 | |
# 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: Checkout PyTorch | |
uses: malfet/checkout@silent-checkout | |
with: | |
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
submodules: recursive | |
path: pytorch | |
quiet-checkout: true | |
- name: Clean PyTorch checkout | |
run: | | |
# Remove any artifacts from the previous checkouts | |
git clean -fxd | |
working-directory: pytorch | |
- name: Checkout pytorch/builder | |
uses: malfet/checkout@silent-checkout | |
with: | |
ref: main | |
submodules: recursive | |
repository: pytorch/builder | |
path: builder | |
quiet-checkout: true | |
- name: Clean pytorch/builder checkout | |
run: | | |
# Remove any artifacts from the previous checkouts | |
git clean -fxd | |
working-directory: builder | |
- 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/[email protected] | |
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.nonephemeral" | |
timeout-minutes: 240 | |
env: | |
PYTORCH_ROOT: ${{ github.workspace }}/pytorch | |
BUILDER_ROOT: ${{ github.workspace }}/builder | |
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.9" | |
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 | |
# 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/[email protected] | |
name: Download Build Artifacts | |
with: | |
name: libtorch-cpu-shared-with-deps-debug | |
path: "${{ env.PYTORCH_FINAL_PACKAGE_DIR }}" | |
- name: Checkout PyTorch | |
uses: malfet/checkout@silent-checkout | |
with: | |
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }} | |
submodules: recursive | |
path: pytorch | |
quiet-checkout: true | |
- name: Clean PyTorch checkout | |
run: | | |
# Remove any artifacts from the previous checkouts | |
git clean -fxd | |
working-directory: pytorch | |
- name: Checkout pytorch/builder | |
uses: malfet/checkout@silent-checkout | |
with: | |
ref: main | |
submodules: recursive | |
repository: pytorch/builder | |
path: builder | |
quiet-checkout: true | |
- name: Clean pytorch/builder checkout | |
run: | | |
# Remove any artifacts from the previous checkouts | |
git clean -fxd | |
working-directory: builder | |
- 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 |