mirror of
https://github.com/saymrwulf/pytorch.git
synced 2026-05-14 20:57:59 +00:00
Companion with https://github.com/pytorch/test-infra/pull/4424 Uses the file rating generated by the test infra PR to re order tests. For each test file, sum the file ratings from the changed files in the PR, and put the tests in order of sum. A lot of tests are probably going to end up as "prioritized" since it takes anything with a rating > 0 right now. Sharding is done twice, once on the prioritized tests, and once on the general/non prioritized tests. Prioritized tests have an order, so they should be sharded according to that order, while general tests don't have an order and are sharded by test time, which should result in more balanced shards. I'll change the metric name before I merge, i want to quarantine my testing stuff from actual results Pull Request resolved: https://github.com/pytorch/pytorch/pull/106347 Approved by: https://github.com/ZainRizvi
196 lines
7.2 KiB
YAML
196 lines
7.2 KiB
YAML
name: linux-build
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
build-environment:
|
|
required: true
|
|
type: string
|
|
description: Top-level label for what's being built/tested.
|
|
docker-image-name:
|
|
required: true
|
|
type: string
|
|
description: Name of the base docker image to build with.
|
|
build-generates-artifacts:
|
|
required: false
|
|
type: boolean
|
|
default: true
|
|
description: If set, upload generated build artifacts.
|
|
build-with-debug:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
description: If set, build in debug mode.
|
|
sync-tag:
|
|
required: false
|
|
type: string
|
|
default: ""
|
|
description: |
|
|
If this is set, our linter will use this to make sure that every other
|
|
job with the same `sync-tag` is identical.
|
|
cuda-arch-list:
|
|
required: false
|
|
type: string
|
|
default: "5.2"
|
|
description: |
|
|
List of CUDA architectures CI build should target.
|
|
runner:
|
|
required: false
|
|
type: string
|
|
default: "linux.2xlarge"
|
|
description: |
|
|
List of CUDA architectures CI build should target.
|
|
test-matrix:
|
|
required: false
|
|
type: string
|
|
description: |
|
|
An option JSON description of what test configs to run later on. This
|
|
is moved here from the Linux test workflow so that we can apply filter
|
|
logic using test-config labels earlier and skip unnecessary builds
|
|
secrets:
|
|
HUGGING_FACE_HUB_TOKEN:
|
|
required: false
|
|
description: |
|
|
HF Auth token to avoid rate limits when downloading models or datasets from hub
|
|
|
|
|
|
outputs:
|
|
docker-image:
|
|
value: ${{ jobs.build.outputs.docker-image }}
|
|
description: The docker image containing the built PyTorch.
|
|
test-matrix:
|
|
value: ${{ jobs.build.outputs.test-matrix }}
|
|
description: An optional JSON description of what test configs to run later on.
|
|
|
|
jobs:
|
|
build:
|
|
# Don't run on forked repos
|
|
if: github.repository_owner == 'pytorch'
|
|
runs-on: ${{ inputs.runner }}
|
|
timeout-minutes: 240
|
|
outputs:
|
|
docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
|
|
test-matrix: ${{ steps.filter.outputs.test-matrix }}
|
|
steps:
|
|
- name: Setup SSH (Click me for login details)
|
|
uses: pytorch/test-infra/.github/actions/setup-ssh@main
|
|
with:
|
|
github-secret: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# [pytorch repo ref]
|
|
# Use a pytorch/pytorch reference instead of a reference to the local
|
|
# checkout because when we run this action we don't *have* a local
|
|
# checkout. In other cases you should prefer a local checkout.
|
|
- name: Checkout PyTorch
|
|
uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
|
|
|
|
- name: Setup Linux
|
|
uses: ./.github/actions/setup-linux
|
|
|
|
- name: Calculate docker image
|
|
id: calculate-docker-image
|
|
uses: pytorch/test-infra/.github/actions/calculate-docker-image@main
|
|
with:
|
|
docker-image-name: ${{ inputs.docker-image-name }}
|
|
|
|
- name: Pull docker image
|
|
uses: pytorch/test-infra/.github/actions/pull-docker-image@main
|
|
with:
|
|
docker-image: ${{ steps.calculate-docker-image.outputs.docker-image }}
|
|
|
|
- name: Parse ref
|
|
id: parse-ref
|
|
run: .github/scripts/parse_ref.py
|
|
|
|
- name: Get workflow job id
|
|
id: get-job-id
|
|
uses: ./.github/actions/get-workflow-job-id
|
|
if: always()
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# Apply the filter logic to the build step too if the test-config label is already there
|
|
- name: Select all requested test configurations (if the test matrix is available)
|
|
id: filter
|
|
uses: ./.github/actions/filter-test-configs
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
test-matrix: ${{ inputs.test-matrix }}
|
|
|
|
- name: Build
|
|
if: steps.filter.outputs.is-test-matrix-empty == 'False' || inputs.test-matrix == ''
|
|
id: build
|
|
env:
|
|
BUILD_ENVIRONMENT: ${{ inputs.build-environment }}
|
|
BRANCH: ${{ steps.parse-ref.outputs.branch }}
|
|
# TODO duplicated
|
|
AWS_DEFAULT_REGION: us-east-1
|
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
SHA1: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
SCCACHE_BUCKET: ossci-compiler-cache-circleci-v2
|
|
SCCACHE_S3_KEY_PREFIX: ${{ github.workflow }}
|
|
XLA_CLANG_CACHE_S3_BUCKET_NAME: ossci-compiler-clang-cache-circleci-xla
|
|
PR_LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }}
|
|
TORCH_CUDA_ARCH_LIST: ${{ inputs.cuda-arch-list }}
|
|
DOCKER_IMAGE: ${{ steps.calculate-docker-image.outputs.docker-image }}
|
|
XLA_CUDA: ${{ contains(inputs.build-environment, 'xla') && '0' || '' }}
|
|
DEBUG: ${{ inputs.build-with-debug && '1' || '0' }}
|
|
OUR_GITHUB_JOB_ID: ${{ steps.get-job-id.outputs.job-id }}
|
|
HUGGING_FACE_HUB_TOKEN: ${{ secrets.HUGGING_FACE_HUB_TOKEN }}
|
|
run: |
|
|
# detached container should get cleaned up by teardown_ec2_linux
|
|
container_name=$(docker run \
|
|
-e BUILD_ENVIRONMENT \
|
|
-e MAX_JOBS="$(nproc --ignore=2)" \
|
|
-e AWS_DEFAULT_REGION \
|
|
-e PR_NUMBER \
|
|
-e SHA1 \
|
|
-e BRANCH \
|
|
-e SCCACHE_BUCKET \
|
|
-e SCCACHE_S3_KEY_PREFIX \
|
|
-e XLA_CUDA \
|
|
-e XLA_CLANG_CACHE_S3_BUCKET_NAME \
|
|
-e SKIP_SCCACHE_INITIALIZATION=1 \
|
|
-e TORCH_CUDA_ARCH_LIST \
|
|
-e PR_LABELS \
|
|
-e OUR_GITHUB_JOB_ID \
|
|
-e HUGGING_FACE_HUB_TOKEN \
|
|
--env-file="/tmp/github_env_${GITHUB_RUN_ID}" \
|
|
--security-opt seccomp=unconfined \
|
|
--cap-add=SYS_PTRACE \
|
|
--tty \
|
|
--detach \
|
|
--user jenkins \
|
|
-v "${GITHUB_WORKSPACE}:/var/lib/jenkins/workspace" \
|
|
-w /var/lib/jenkins/workspace \
|
|
"${DOCKER_IMAGE}"
|
|
)
|
|
docker exec -t "${container_name}" sh -c '.ci/pytorch/build.sh'
|
|
|
|
- name: Archive artifacts into zip
|
|
if: inputs.build-generates-artifacts && steps.build.outcome != 'skipped'
|
|
run: |
|
|
zip -1 -r artifacts.zip dist/ build/custom_test_artifacts build/lib build/bin .pytorch-test-times.json .pytorch-test-file-ratings.json
|
|
|
|
- name: Store PyTorch Build Artifacts on S3
|
|
uses: seemethere/upload-artifact-s3@v5
|
|
if: inputs.build-generates-artifacts && steps.build.outcome != 'skipped'
|
|
with:
|
|
name: ${{ inputs.build-environment }}
|
|
retention-days: 14
|
|
if-no-files-found: error
|
|
path: artifacts.zip
|
|
|
|
- name: Upload sccache stats
|
|
if: steps.build.outcome != 'skipped'
|
|
uses: seemethere/upload-artifact-s3@v5
|
|
with:
|
|
s3-prefix: |
|
|
${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/artifact
|
|
retention-days: 365
|
|
if-no-files-found: warn
|
|
path: sccache-stats-*.json
|
|
|
|
- name: Teardown Linux
|
|
uses: pytorch/test-infra/.github/actions/teardown-linux@main
|
|
if: always()
|