mirror of
https://github.com/saymrwulf/pytorch.git
synced 2026-05-14 20:57:59 +00:00
Pull Request resolved: https://github.com/pytorch/pytorch/pull/143613 Approved by: https://github.com/jeffdaily
230 lines
8.9 KiB
YAML
230 lines
8.9 KiB
YAML
name: Build Triton wheels
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
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]+
|
|
paths:
|
|
- .github/workflows/build-triton-wheel.yml
|
|
- .github/scripts/build_triton_wheel.py
|
|
- .github/ci_commit_pins/triton.txt
|
|
- .ci/docker/ci_commit_pins/triton.txt
|
|
- .ci/docker/ci_commit_pins/triton-xpu.txt
|
|
pull_request:
|
|
paths:
|
|
- .github/workflows/build-triton-wheel.yml
|
|
- .github/scripts/build_triton_wheel.py
|
|
- .github/ci_commit_pins/triton.txt
|
|
- .ci/docker/ci_commit_pins/triton.txt
|
|
- .ci/docker/ci_commit_pins/triton-xpu.txt
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || 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 }}
|
|
|
|
build-wheel:
|
|
name: "Build Triton Wheel"
|
|
needs: get-label-type
|
|
runs-on: "${{ needs.get-label-type.outputs.label-type }}linux.4xlarge"
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
py_vers: [ "3.9", "3.10", "3.11", "3.12", "3.13", "3.13t" ]
|
|
device: ["cuda", "rocm", "xpu"]
|
|
docker-image: ["pytorch/manylinux-builder:cpu", "pytorch/manylinux2_28-builder:cpu"]
|
|
exclude:
|
|
- device: "rocm"
|
|
docker-image: "pytorch/manylinux-builder:cpu"
|
|
- device: "xpu"
|
|
docker-image: "pytorch/manylinux2_28-builder:cpu"
|
|
include:
|
|
- device: "rocm"
|
|
rocm_version: "6.3"
|
|
- device: "cuda"
|
|
rocm_version: ""
|
|
timeout-minutes: 40
|
|
env:
|
|
DOCKER_IMAGE: ${{ matrix.device == 'rocm' && format('pytorch/manylinux2_28-builder:rocm{0}', matrix.rocm_version) || matrix.docker-image }}
|
|
PY_VERS: ${{ matrix.py_vers }}
|
|
BUILD_DEVICE: ${{ matrix.device }}
|
|
PLATFORM: ${{ contains(matrix.docker-image, '2_28') && 'manylinux_2_28_x86_64' || 'manylinux2014_x86_64' }}
|
|
steps:
|
|
- name: Setup SSH (Click me for login details)
|
|
uses: pytorch/test-infra/.github/actions/setup-ssh@main
|
|
with:
|
|
github-secret: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Checkout PyTorch
|
|
uses: pytorch/pytorch/.github/actions/checkout-pytorch@main
|
|
with:
|
|
submodules: false
|
|
|
|
- name: Setup Linux
|
|
uses: ./.github/actions/setup-linux
|
|
|
|
- name: Pull Docker image
|
|
uses: pytorch/test-infra/.github/actions/pull-docker-image@main
|
|
with:
|
|
docker-image: ${{ env.DOCKER_IMAGE }}
|
|
|
|
- name: Build Triton wheel
|
|
env:
|
|
IS_RELEASE_TAG: ${{ startsWith(github.event.ref, 'refs/tags/v') }}
|
|
run: |
|
|
set -x
|
|
mkdir -p "${RUNNER_TEMP}/artifacts/"
|
|
container_name=$(docker run \
|
|
--tty \
|
|
--detach \
|
|
-v "${GITHUB_WORKSPACE}:/pytorch" \
|
|
-v "${RUNNER_TEMP}/artifacts:/artifacts" \
|
|
-w /artifacts/ \
|
|
"${DOCKER_IMAGE}" \
|
|
)
|
|
|
|
# Determine python executable for given version
|
|
case $PY_VERS in
|
|
3.9)
|
|
PYTHON_EXECUTABLE=/opt/python/cp39-cp39/bin/python
|
|
;;
|
|
3.10)
|
|
PYTHON_EXECUTABLE=/opt/python/cp310-cp310/bin/python
|
|
;;
|
|
3.11)
|
|
PYTHON_EXECUTABLE=/opt/python/cp311-cp311/bin/python
|
|
;;
|
|
3.12)
|
|
PYTHON_EXECUTABLE=/opt/python/cp312-cp312/bin/python
|
|
;;
|
|
3.13)
|
|
PYTHON_EXECUTABLE=/opt/python/cp313-cp313/bin/python
|
|
;;
|
|
3.13t)
|
|
PYTHON_EXECUTABLE=/opt/python/cp313-cp313t/bin/python
|
|
;;
|
|
*)
|
|
echo "Unsupported python version ${PY_VERS}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
RELEASE=""
|
|
WITH_CLANG_LDD=""
|
|
if [[ "${IS_RELEASE_TAG}" == true ]]; then
|
|
RELEASE="--release"
|
|
fi
|
|
|
|
docker exec -t "${container_name}" yum install -y zlib-devel zip
|
|
docker exec -t "${container_name}" "${PYTHON_EXECUTABLE}" -m pip install -U setuptools==67.4.0 pybind11==2.13.1 auditwheel
|
|
if [[ ("${{ matrix.device }}" == "cuda" || "${{ matrix.device }}" == "rocm") && "${PLATFORM}" == "manylinux_2_28_x86_64" ]]; then
|
|
# With this install, it gets clang 16.0.6.
|
|
docker exec -t "${container_name}" dnf install clang lld -y
|
|
WITH_CLANG_LDD="--with-clang-ldd"
|
|
fi
|
|
if [[ "${BUILD_DEVICE}" == xpu ]]; then
|
|
docker exec -t "${container_name}" yum install -y devtoolset-11-gcc-c++
|
|
docker exec -t "${container_name}" bash -c "source /opt/rh/devtoolset-11/enable && ${PYTHON_EXECUTABLE} /pytorch/.github/scripts/build_triton_wheel.py --device=$BUILD_DEVICE $RELEASE"
|
|
else
|
|
docker exec -t "${container_name}" bash -c "${PYTHON_EXECUTABLE} /pytorch/.github/scripts/build_triton_wheel.py --device=$BUILD_DEVICE $RELEASE $WITH_CLANG_LDD"
|
|
fi
|
|
if [[ "${{ matrix.device }}" == "cuda" ]]; then
|
|
docker exec -t "${container_name}" bash -c "auditwheel repair --plat ${PLATFORM} //artifacts/*.whl"
|
|
else
|
|
docker exec -t "${container_name}" bash -c "mkdir //artifacts/wheelhouse"
|
|
docker exec -t "${container_name}" bash -c "mv //artifacts/*.whl //artifacts/wheelhouse/"
|
|
fi
|
|
docker exec -t "${container_name}" chown -R 1000.1000 /artifacts/wheelhouse
|
|
|
|
- uses: actions/upload-artifact@v4.4.0
|
|
with:
|
|
name: pytorch-triton-wheel-${{ matrix.py_vers }}-${{ matrix.device }}-${{ env.PLATFORM }}
|
|
if-no-files-found: error
|
|
path: ${{ runner.temp }}/artifacts/wheelhouse/*
|
|
|
|
- name: Teardown Linux
|
|
uses: pytorch/test-infra/.github/actions/teardown-linux@main
|
|
if: always()
|
|
|
|
upload-wheel:
|
|
runs-on: ubuntu-22.04
|
|
needs: build-wheel
|
|
permissions:
|
|
id-token: write
|
|
contents: read
|
|
container:
|
|
image: continuumio/miniconda3:4.12.0
|
|
environment: ${{ (github.event_name == 'push' && (github.event.ref == 'refs/heads/main' || startsWith(github.event.ref, 'refs/tags/v'))) && 'conda-aws-upload' || '' }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Configure AWS credentials(PyTorch account) for main
|
|
if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/main' }}
|
|
uses: aws-actions/configure-aws-credentials@v3
|
|
with:
|
|
role-to-assume: arn:aws:iam::749337293305:role/gha_workflow_nightly_build_wheels
|
|
aws-region: us-east-1
|
|
|
|
- name: Configure AWS credentials(PyTorch account) for RC builds
|
|
if: ${{ github.event_name == 'push' && (startsWith(github.event.ref, 'refs/tags/') && !startsWith(github.event.ref, 'refs/tags/ciflow/')) }}
|
|
uses: aws-actions/configure-aws-credentials@v3
|
|
with:
|
|
role-to-assume: arn:aws:iam::749337293305:role/gha_workflow_test_build_wheels
|
|
aws-region: us-east-1
|
|
|
|
- name: Download Build Artifacts
|
|
uses: actions/download-artifact@v4.1.7
|
|
with:
|
|
# Download all available artifacts
|
|
path: ${{ runner.temp }}/artifacts-all
|
|
|
|
- name: Select Wheel Artifacts
|
|
shell: bash
|
|
run: |
|
|
set -x
|
|
mkdir -p "${RUNNER_TEMP}/artifacts/"
|
|
mv "${RUNNER_TEMP}"/artifacts-all/pytorch-triton-wheel-*/* "${RUNNER_TEMP}/artifacts/"
|
|
|
|
- name: Set DRY_RUN (only for tagged pushes)
|
|
if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/main' || startsWith(github.event.ref, 'refs/tags/v')) }}
|
|
shell: bash
|
|
run: |
|
|
echo "DRY_RUN=disabled" >> "$GITHUB_ENV"
|
|
|
|
- name: Set UPLOAD_CHANNEL (only for tagged pushes)
|
|
if: ${{ github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/v') }}
|
|
shell: bash
|
|
run: |
|
|
set -ex
|
|
|
|
# reference ends with an RC suffix
|
|
if [[ "${GITHUB_REF_NAME}" = *-rc[0-9]* ]]; then
|
|
echo "UPLOAD_CHANNEL=test" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
# NB: This step is gated by DRY_RUN, which is enabled everywhere except main and release branches
|
|
- name: Upload binaries
|
|
env:
|
|
PACKAGE_TYPE: wheel
|
|
# The UPLOAD_SUBFOLDER needs to be empty here so that triton wheels are uploaded
|
|
# to nightly or test
|
|
UPLOAD_SUBFOLDER: ""
|
|
PKG_DIR: ${{ runner.temp }}/artifacts
|
|
shell: bash
|
|
run: |
|
|
set -ex
|
|
bash .circleci/scripts/binary_upload.sh
|