Delete the workflow runners
This commit is contained in:
1 parent
7502bf64a4
commit
32b20a05b1
61 files changed
-10019
No files matched your search
@@ -1,34 +0,0 @@
|
|||||||
# This file itself
|
|
||||||
/.github/CODEOWNERS @ROCm/TheRock-infra-admins
|
|
||||||
|
|
||||||
# Regularly updated submodules
|
|
||||||
/rocm-libraries @ROCm/TheRock-infra-write
|
|
||||||
/rocm-systems @ROCm/TheRock-infra-write
|
|
||||||
|
|
||||||
# New patches are strongly discouraged. See patches/README.md.
|
|
||||||
/patches/ @ScottTodd @marbre @skganesan008
|
|
||||||
|
|
||||||
# This file accumulated unrelated code, tighten reviews until cleaned up.
|
|
||||||
/build_tools/github_actions/github_actions_api.py @ScottTodd
|
|
||||||
|
|
||||||
# Python packages. Changes to these paths must align with
|
|
||||||
# https://github.com/ROCm/TheRock/blob/main/docs/packaging/python_packaging.md
|
|
||||||
/build_tools/packaging/python @ScottTodd @marbre
|
|
||||||
/build_tools/build_python_packages.py @ScottTodd @marbre
|
|
||||||
/external-builds/pytorch @ScottTodd
|
|
||||||
|
|
||||||
# A few central CI system components that must align with
|
|
||||||
# https://github.com/ROCm/TheRock/blob/main/docs/development/ci_overview.md
|
|
||||||
/.github/workflows/setup_multi_arch.yml @ScottTodd
|
|
||||||
/build_tools/github_actions/configure_multi_arch_ci.py @ScottTodd
|
|
||||||
|
|
||||||
# Debug tools configs and ROCgdb cmake wrapper.
|
|
||||||
/debug-tools @ROCm/TheRock-infra-write @ROCm/ROCm-DevTools-Debugger
|
|
||||||
/debug-tools/rocgdb @ROCm/TheRock-infra-write @ROCm/ROCm-DevTools-Debugger
|
|
||||||
|
|
||||||
# Debug tools testing scripts.
|
|
||||||
/build_tools/github_actions/test_executable_scripts/test_rocgdb.py @ROCm/ROCm-DevTools-Debugger
|
|
||||||
/build_tools/github_actions/test_executable_scripts/test_rocr-debug-agent.py @ROCm/ROCm-DevTools-Debugger
|
|
||||||
|
|
||||||
# RFCs
|
|
||||||
/docs/rfcs @ROCm/rocm-product-managers
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: "Compute PR-aware fetch-depth"
|
|
||||||
|
|
||||||
description: >-
|
|
||||||
Returns the smallest `actions/checkout` fetch-depth that covers all
|
|
||||||
commits this workflow needs to walk.
|
|
||||||
|
|
||||||
* pull_request events: `commits + 1` (PR commits + merge-base).
|
|
||||||
* any other event (push, schedule, workflow_dispatch, ...): `0`
|
|
||||||
(full history). Use this when downstream tooling walks commit
|
|
||||||
history
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
value:
|
|
||||||
description: >-
|
|
||||||
String value to pass to actions/checkout fetch-depth. Already
|
|
||||||
coerced to a string so it composes cleanly with checkout's
|
|
||||||
input parser.
|
|
||||||
value: ${{ steps.compute.outputs.value }}
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Compute fetch-depth
|
|
||||||
id: compute
|
|
||||||
shell: bash
|
|
||||||
run: python build_tools/github_actions/compute_pr_depth.py
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: "Configure AWS credentials for artifact uploads"
|
|
||||||
|
|
||||||
description: >-
|
|
||||||
Determine the IAM role for the artifacts S3 bucket and assume it via OIDC.
|
|
||||||
* Forks and external repos skip OIDC and use runner base credentials.
|
|
||||||
* Release builds (dev/nightly/prerelease) use 'therock-{release_type}' roles.
|
|
||||||
* Other CI runs use the 'therock-ci' role.
|
|
||||||
See the "Authentication" section in docs/development/s3_buckets.md.
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease"'
|
|
||||||
default: ci
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Determine IAM role
|
|
||||||
if: ${{ always() }}
|
|
||||||
id: iam
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/write_artifacts_bucket_info.py \
|
|
||||||
--release-type "${{ inputs.release_type }}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
if: ${{ always() && steps.iam.outputs.iam_role != '' }}
|
|
||||||
uses: aws-actions/configure-aws-credentials@517a711dbcd0e402f90c77e7e2f81e849156e31d # v6.2.2
|
|
||||||
with:
|
|
||||||
aws-region: ${{ steps.iam.outputs.aws_region }}
|
|
||||||
role-to-assume: ${{ steps.iam.outputs.iam_role }}
|
|
||||||
special-characters-workaround: ${{ runner.os == 'Windows' }}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: "Setup test environment"
|
|
||||||
|
|
||||||
description: Setup ROCm test environment from built artifacts
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
VENV_DIR:
|
|
||||||
description: (string) Directory in which to create a Python virtual environment (e.g. `github.workspace/.venv`)
|
|
||||||
required: true
|
|
||||||
OUTPUT_ARTIFACTS_DIR:
|
|
||||||
description: (string) Directory to download/unpack test artifacts into (e.g. `github.workspace/build`)
|
|
||||||
required: true
|
|
||||||
ARTIFACT_GROUP:
|
|
||||||
description: (string) Artifact group (e.g. `gfx110X-all`)
|
|
||||||
required: true
|
|
||||||
AMDGPU_TARGETS:
|
|
||||||
description: (string) Comma-separated individual GPU targets for fetching split artifacts (e.g. `gfx942`)
|
|
||||||
default: ""
|
|
||||||
ARTIFACT_RUN_ID:
|
|
||||||
description: (string) Run ID to download artifacts from (`env.ARTIFACT_RUN_ID` or a value like `19716407405`)
|
|
||||||
required: true
|
|
||||||
FETCH_ARTIFACT_ARGS:
|
|
||||||
description: (string) Extra arguments to install_rocm_from_artifacts.py (e.g. `--blas --tests`)
|
|
||||||
RELEASE_TYPE:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease"'
|
|
||||||
default: ci
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: "Setting up Python"
|
|
||||||
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
||||||
with:
|
|
||||||
python-version: 3.12
|
|
||||||
|
|
||||||
- name: "Install UV"
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
pip install uv
|
|
||||||
|
|
||||||
- name: Create Python venv
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
VENV_DIR: ${{ inputs.VENV_DIR }}
|
|
||||||
run: |
|
|
||||||
python build_tools/setup_venv.py ${VENV_DIR} \
|
|
||||||
--activate-in-future-github-actions-steps \
|
|
||||||
--use-uv
|
|
||||||
|
|
||||||
- name: Install test requirements
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
uv pip install -r requirements-test.txt
|
|
||||||
uv pip freeze
|
|
||||||
|
|
||||||
- name: Install Choco tools
|
|
||||||
if: ${{ runner.os == 'Windows' }}
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
choco install --no-progress -y ninja
|
|
||||||
|
|
||||||
- name: Download and Unpack Artifacts
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
OUTPUT_ARTIFACTS_DIR: ${{ inputs.OUTPUT_ARTIFACTS_DIR }}
|
|
||||||
ARTIFACT_GROUP: ${{ inputs.ARTIFACT_GROUP }}
|
|
||||||
AMDGPU_TARGETS: ${{ inputs.AMDGPU_TARGETS }}
|
|
||||||
ARTIFACT_RUN_ID: ${{ inputs.ARTIFACT_RUN_ID }}
|
|
||||||
FETCH_ARTIFACT_ARGS: ${{ inputs.FETCH_ARTIFACT_ARGS }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.RELEASE_TYPE }}
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
STEP_NAME: "Download and Unpack Artifacts"
|
|
||||||
STEP_TIMEOUT_TOLERANCE: "2"
|
|
||||||
run: |
|
|
||||||
python ./build_tools/install_rocm_from_artifacts.py \
|
|
||||||
--run-id=${ARTIFACT_RUN_ID} \
|
|
||||||
--artifact-group=${ARTIFACT_GROUP} \
|
|
||||||
--amdgpu-targets=${AMDGPU_TARGETS} \
|
|
||||||
--output-dir=${OUTPUT_ARTIFACTS_DIR} \
|
|
||||||
${FETCH_ARTIFACT_ARGS}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
|
|
||||||
# Check for updates to GitHub Actions
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directories:
|
|
||||||
- "/"
|
|
||||||
- "/.github/actions/*"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
groups:
|
|
||||||
github-actions:
|
|
||||||
patterns:
|
|
||||||
- "*"
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
## Motivation
|
|
||||||
|
|
||||||
<!-- Explain the purpose of this PR and the goals it aims to achieve. -->
|
|
||||||
|
|
||||||
<!-- Most pull requests should be associated with at least one GitHub issue -->
|
|
||||||
|
|
||||||
<!-- GitHub issue: https://github.com/ROCm/TheRock/issues/1234 -->
|
|
||||||
|
|
||||||
## Technical Details
|
|
||||||
|
|
||||||
<!-- Explain the changes along with any relevant GitHub links. -->
|
|
||||||
|
|
||||||
## Test Plan
|
|
||||||
|
|
||||||
<!-- Explain any relevant testing done to verify this PR. -->
|
|
||||||
|
|
||||||
## Test Result
|
|
||||||
|
|
||||||
<!-- Briefly summarize test outcomes. -->
|
|
||||||
|
|
||||||
## Submission Checklist
|
|
||||||
|
|
||||||
- [ ] Look over the contributing guidelines at https://github.com/ROCm/TheRock/blob/main/CONTRIBUTING.md.
|
|
||||||
@@ -1,175 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Build Portable Linux Python Packages
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_github_repo:
|
|
||||||
description: "GitHub repository for artifact_run_id"
|
|
||||||
type: string
|
|
||||||
default: ROCm/TheRock
|
|
||||||
artifact_run_id:
|
|
||||||
description: "artifact_run_id to download artifacts from"
|
|
||||||
type: string
|
|
||||||
default: "17865324892" # TODO: default to the most recent successful run (using a script)
|
|
||||||
artifact_group:
|
|
||||||
description: "artifact_group to build (e.g. 'gfx94X-dcgpu' for single family builds, 'multi-arch-release' for multi-arch builds with 'amdgpu_families' set)"
|
|
||||||
type: string
|
|
||||||
amdgpu_families:
|
|
||||||
description: "amdgpu_families for multi-arch builds as a semicolon-separated list (e.g. 'gfx94X-dcgpu;gfx120X-all'). Leave empty for single-family builds (those only use artifact_group)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: "Linux side of the cross-platform family pair for multi-arch builds; used to advertise the union of device extras in the rocm sdist. Leave empty for single-platform builds."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
description: "Windows side of the cross-platform family pair. See linux_amdgpu_families."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
multiarch_index:
|
|
||||||
description: "Enable multi-arch indexing (generates per-family indexes)"
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
package_version:
|
|
||||||
description: "package_version to set on packages, e.g. '7.13.0.dev0+dbd7369489260265fc6ddfc9d0de1262a95fe974'"
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci" for CI, or "dev", "nightly", "prerelease".'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_github_repo:
|
|
||||||
type: string
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
linux_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
multiarch_index:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
package_version:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
outputs:
|
|
||||||
package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install built packages
|
|
||||||
value: ${{ jobs.build_rocm_wheels.outputs.package_find_links_url }}
|
|
||||||
kpack_split:
|
|
||||||
description: "true if this is a kpack-split flat build, false for legacy per-family"
|
|
||||||
value: ${{ jobs.build_rocm_wheels.outputs.kpack_split }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Build portable Linux Python Packages (${{ inputs.artifact_group }}, ${{ inputs.package_version }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_rocm_wheels:
|
|
||||||
name: Build Python | ${{ inputs.artifact_group }}
|
|
||||||
# Note: GitHub-hosted runners run out of disk space for some gpu families
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:a382085df3ba2419b58aa9051350883a0d0b732a4bc0a4ef60458f8161bb08c6
|
|
||||||
outputs:
|
|
||||||
package_find_links_url: ${{ steps.upload.outputs.package_find_links_url }}
|
|
||||||
kpack_split: ${{ steps.upload.outputs.kpack_split }}
|
|
||||||
env:
|
|
||||||
ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id != '' && inputs.artifact_run_id || github.run_id }}"
|
|
||||||
ARTIFACTS_DIR: "${{ github.workspace }}/artifacts"
|
|
||||||
PACKAGES_DIR: "${{ github.workspace }}/packages"
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Install Python requirements
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Fetch artifacts
|
|
||||||
run: |
|
|
||||||
if [ -n "${{ inputs.amdgpu_families }}" ]; then
|
|
||||||
# Multi-arch mode: use artifact_manager.py to fetch all families
|
|
||||||
echo "Fetching artifacts for multiple families: ${{ inputs.amdgpu_families }}"
|
|
||||||
python ./build_tools/artifact_manager.py fetch \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--run-github-repo="${{ inputs.artifact_github_repo }}" \
|
|
||||||
--stage=all \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_families }}" \
|
|
||||||
--expand-family-to-targets \
|
|
||||||
--output-dir="${{ github.workspace }}"
|
|
||||||
# NOTE: artifact_manager.py appends /artifacts to --output-dir
|
|
||||||
# in non-flatten mode, so pass workspace root here so that
|
|
||||||
# artifacts land in ARTIFACTS_DIR ($workspace/artifacts).
|
|
||||||
else
|
|
||||||
# Single-family mode: use fetch_artifacts.py (backward compatible)
|
|
||||||
echo "Fetching artifacts for single family: ${{ inputs.artifact_group }}"
|
|
||||||
python ./build_tools/fetch_artifacts.py \
|
|
||||||
--run-github-repo="${{ inputs.artifact_github_repo }}" \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--output-dir="${{ env.ARTIFACTS_DIR }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Build Python packages
|
|
||||||
run: |
|
|
||||||
python ./build_tools/build_python_packages.py \
|
|
||||||
--artifact-dir="${{ env.ARTIFACTS_DIR }}" \
|
|
||||||
--dest-dir="${{ env.PACKAGES_DIR }}" \
|
|
||||||
--version="${{ inputs.package_version }}" \
|
|
||||||
--linux-amdgpu-families="${{ inputs.linux_amdgpu_families }}" \
|
|
||||||
--windows-amdgpu-families="${{ inputs.windows_amdgpu_families }}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
# NOTE: we use `github.run_id` and NOT `env.ARTIFACT_RUN_ID` here!
|
|
||||||
# This ensures that if they are different we _download_ artifacts from the
|
|
||||||
# input run's subdirectory and _upload_ to our current run's subdirectory.
|
|
||||||
- name: Upload Python packages
|
|
||||||
id: upload
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/upload_python_packages.py \
|
|
||||||
--input-packages-dir="${{ env.PACKAGES_DIR }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
${{ inputs.multiarch_index && '--multiarch' || '' }}
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Build Windows Python Packages
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_github_repo:
|
|
||||||
description: "GitHub repository for artifact_run_id"
|
|
||||||
type: string
|
|
||||||
default: ROCm/TheRock
|
|
||||||
artifact_run_id:
|
|
||||||
description: "artifact_run_id to download artifacts from"
|
|
||||||
type: string
|
|
||||||
default: "17865324892" # TODO: default to the most recent successful run (using a script)
|
|
||||||
artifact_group:
|
|
||||||
description: "artifact_group to build (e.g. 'gfx94X-dcgpu' for single family builds, 'multi-arch-release' for multi-arch builds with 'amdgpu_families' set)"
|
|
||||||
type: string
|
|
||||||
amdgpu_families:
|
|
||||||
description: "amdgpu_families for multi-arch builds as a semicolon-separated list (e.g. 'gfx94X-dcgpu;gfx120X-all'). Leave empty for single-family builds (those only use artifact_group)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: "Linux side of the cross-platform family pair for multi-arch builds; used to advertise the union of device extras in the rocm sdist. Leave empty for single-platform builds."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
description: "Windows side of the cross-platform family pair. See linux_amdgpu_families."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
multiarch_index:
|
|
||||||
description: "Enable multi-arch indexing (generates per-family indexes)"
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
package_version:
|
|
||||||
description: "package_version to set on packages, e.g. '7.13.0.dev0+dbd7369489260265fc6ddfc9d0de1262a95fe974'"
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci" for CI, or "dev", "nightly", "prerelease".'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_github_repo:
|
|
||||||
type: string
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
linux_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
multiarch_index:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
package_version:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
outputs:
|
|
||||||
package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install built packages
|
|
||||||
value: ${{ jobs.build_rocm_wheels.outputs.package_find_links_url }}
|
|
||||||
kpack_split:
|
|
||||||
description: "true if this is a kpack-split flat build, false for legacy per-family"
|
|
||||||
value: ${{ jobs.build_rocm_wheels.outputs.kpack_split }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Build Windows Python Packages (${{ inputs.artifact_group }}, ${{ inputs.package_version }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_rocm_wheels:
|
|
||||||
name: Build Python | ${{ inputs.artifact_group }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'azure-windows-scale-rocm' || 'windows-2022' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
outputs:
|
|
||||||
package_find_links_url: ${{ steps.upload.outputs.package_find_links_url }}
|
|
||||||
kpack_split: ${{ steps.upload.outputs.kpack_split }}
|
|
||||||
env:
|
|
||||||
ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id != '' && inputs.artifact_run_id || github.run_id }}"
|
|
||||||
ARTIFACTS_DIR: "${{ github.workspace }}/artifacts"
|
|
||||||
PACKAGES_DIR: "${{ github.workspace }}/packages"
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: '3.12'
|
|
||||||
|
|
||||||
- name: Install Python requirements
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Fetch artifacts
|
|
||||||
run: |
|
|
||||||
if [ -n "${{ inputs.amdgpu_families }}" ]; then
|
|
||||||
# Multi-arch mode: use artifact_manager.py to fetch all families
|
|
||||||
echo "Fetching artifacts for multiple families: ${{ inputs.amdgpu_families }}"
|
|
||||||
python ./build_tools/artifact_manager.py fetch \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--run-github-repo="${{ inputs.artifact_github_repo }}" \
|
|
||||||
--stage=all \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_families }}" \
|
|
||||||
--expand-family-to-targets \
|
|
||||||
--output-dir="${{ github.workspace }}"
|
|
||||||
# NOTE: artifact_manager.py appends /artifacts to --output-dir
|
|
||||||
# in non-flatten mode, so pass workspace root here so that
|
|
||||||
# artifacts land in ARTIFACTS_DIR ($workspace/artifacts).
|
|
||||||
else
|
|
||||||
# Single-family mode: use fetch_artifacts.py (backward compatible)
|
|
||||||
echo "Fetching artifacts for single family: ${{ inputs.artifact_group }}"
|
|
||||||
python ./build_tools/fetch_artifacts.py \
|
|
||||||
--run-github-repo="${{ inputs.artifact_github_repo }}" \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--output-dir="${{ env.ARTIFACTS_DIR }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Build Python packages
|
|
||||||
run: |
|
|
||||||
python ./build_tools/build_python_packages.py \
|
|
||||||
--artifact-dir="${{ env.ARTIFACTS_DIR }}" \
|
|
||||||
--dest-dir="${{ env.PACKAGES_DIR }}" \
|
|
||||||
--version="${{ inputs.package_version }}" \
|
|
||||||
--linux-amdgpu-families="${{ inputs.linux_amdgpu_families }}" \
|
|
||||||
--windows-amdgpu-families="${{ inputs.windows_amdgpu_families }}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
# NOTE: we use `github.run_id` and NOT `env.ARTIFACT_RUN_ID` here!
|
|
||||||
# This ensures that if they are different we _download_ artifacts from the
|
|
||||||
# input run's subdirectory and _upload_ to our current run's subdirectory.
|
|
||||||
- name: Upload Python packages
|
|
||||||
id: upload
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/upload_python_packages.py \
|
|
||||||
--input-packages-dir="${{ env.PACKAGES_DIR }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
${{ inputs.multiarch_index && '--multiarch' || '' }}
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Bump Submodule automation
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
submodule:
|
|
||||||
description: 'Submodule to bump (default: all)'
|
|
||||||
required: false
|
|
||||||
default: 'all'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- all
|
|
||||||
- rocm-systems
|
|
||||||
- rocm-libraries
|
|
||||||
- rocgdb
|
|
||||||
schedule:
|
|
||||||
- cron: "0 */12 * * *" # Runs every 12 hrs at 12AM and 12PM
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- rocm-systems
|
|
||||||
- rocm-libraries
|
|
||||||
- debug-tools/rocgdb/source
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
bump-submodules:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout ROCm/TheRock
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- name: Generate GitHub App token rocm-systems
|
|
||||||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
||||||
id: systems-token
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.ROCM_SYSTEMS_APP_ID }}
|
|
||||||
private-key: ${{ secrets.ROCM_SYSTEMS_APP_PRIVATE_KEY }}
|
|
||||||
owner: "ROCm"
|
|
||||||
# We will reuse the rocm-systems token for rocgdb for now.
|
|
||||||
repositories: "rocm-systems,rocgdb,TheRock"
|
|
||||||
|
|
||||||
- name: Generate GitHub App token rocm-libraries
|
|
||||||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
||||||
id: librarian-token
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.ROCM_LIBRARIES_APP_ID }}
|
|
||||||
private-key: ${{ secrets.ROCM_LIBRARIES_APP_PRIVATE_KEY }}
|
|
||||||
owner: "ROCm"
|
|
||||||
repositories: "rocm-libraries,TheRock"
|
|
||||||
|
|
||||||
- name: Install prerequisites
|
|
||||||
run: |
|
|
||||||
pip install requests
|
|
||||||
|
|
||||||
- name: Run scheduled bump automation
|
|
||||||
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
|
||||||
run: |
|
|
||||||
python3 build_tools/github_actions/bump_automation.py \
|
|
||||||
--event_type "schedule" \
|
|
||||||
--submodule "${{ github.event.inputs.submodule || 'all' }}" \
|
|
||||||
--systems_token "${{ steps.systems-token.outputs.token }}" \
|
|
||||||
--libraries_token "${{ steps.librarian-token.outputs.token }}" \
|
|
||||||
--rocgdb_token "${{ steps.systems-token.outputs.token }}"
|
|
||||||
|
|
||||||
- name: Run push automation
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
run: |
|
|
||||||
python3 build_tools/github_actions/bump_automation.py \
|
|
||||||
--event_type "push" \
|
|
||||||
--before "${{ github.event.before }}" \
|
|
||||||
--after "${{ github.sha }}" \
|
|
||||||
--systems_token "${{ steps.systems-token.outputs.token }}" \
|
|
||||||
--libraries_token "${{ steps.librarian-token.outputs.token }}" \
|
|
||||||
--rocgdb_token "${{ steps.systems-token.outputs.token }}"
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
#
|
|
||||||
name: CodeQL
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- '**/*.py'
|
|
||||||
- '.github/**'
|
|
||||||
pull_request:
|
|
||||||
branches: [main]
|
|
||||||
paths:
|
|
||||||
- '**/*.py'
|
|
||||||
- '.github/**'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analyze:
|
|
||||||
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
|
|
||||||
name: Analyze (${{ matrix.language }})
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
timeout-minutes: 30
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
language: [python, actions]
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
queries: security-extended
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
|
||||||
with:
|
|
||||||
category: "/language:${{ matrix.language }}"
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Copy release to dev bucket
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm version to copy from nightly releases to dev releases, e.g. 7.14.0a20260617 (see https://rocm.nightlies.amd.com/whl-multi-arch/)
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- "3.10"
|
|
||||||
- "3.11"
|
|
||||||
- "3.12"
|
|
||||||
- "3.13"
|
|
||||||
- "3.14"
|
|
||||||
default: "3.12"
|
|
||||||
include_torch:
|
|
||||||
description: Copy 'torch' packages in addition to 'rocm' packages?
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
include_jax:
|
|
||||||
description: Copy 'jax' packages in addition to 'rocm' packages?
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: >-
|
|
||||||
Copy nightly -> dev |
|
|
||||||
rocm ${{ inputs.rocm_version }} |
|
|
||||||
py ${{ inputs.python_version }} |
|
|
||||||
extras: ${{
|
|
||||||
inputs.include_torch && inputs.include_jax && 'PyTorch + JAX' ||
|
|
||||||
inputs.include_torch && 'PyTorch' ||
|
|
||||||
inputs.include_jax && 'JAX' ||
|
|
||||||
'none'
|
|
||||||
}}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
copy_python_packages:
|
|
||||||
name: Copy nightly -> dev | rocm ${{ inputs.rocm_version }} | py ${{ inputs.python_version }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
|
|
||||||
# TODO: migrate to boto3 Python package instead of this native tool?
|
|
||||||
- name: Install the AWS tool
|
|
||||||
run: ./dockerfiles/install_awscli.sh
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
|
|
||||||
with:
|
|
||||||
aws-region: us-east-2
|
|
||||||
role-to-assume: arn:aws:iam::692859939525:role/therock-dev
|
|
||||||
|
|
||||||
- name: Select Python version
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/python_to_cp_version.py \
|
|
||||||
--python-version ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Copy ROCm packages between S3 buckets
|
|
||||||
run: |
|
|
||||||
aws s3 cp \
|
|
||||||
s3://therock-nightly-python/v4/whl/ \
|
|
||||||
s3://therock-dev-python/v4/whl/ \
|
|
||||||
--recursive --exclude "*" \
|
|
||||||
--include "rocm*${{ inputs.rocm_version }}*"
|
|
||||||
|
|
||||||
- name: Copy torch wheels between S3 buckets
|
|
||||||
if: ${{ inputs.include_torch }}
|
|
||||||
run: |
|
|
||||||
aws s3 cp \
|
|
||||||
s3://therock-nightly-python/v4/whl/ \
|
|
||||||
s3://therock-dev-python/v4/whl/ \
|
|
||||||
--recursive --exclude "*" \
|
|
||||||
--include "*torch*${{ inputs.rocm_version }}*${{ env.cp_version }}*" \
|
|
||||||
--include "apex*${{ inputs.rocm_version }}*${{ env.cp_version }}*" \
|
|
||||||
--include "triton*${{ inputs.rocm_version }}*${{ env.cp_version }}*"
|
|
||||||
|
|
||||||
- name: Copy JAX wheels between S3 buckets
|
|
||||||
if: ${{ inputs.include_jax }}
|
|
||||||
run: |
|
|
||||||
aws s3 cp \
|
|
||||||
s3://therock-nightly-python/v4/whl/ \
|
|
||||||
s3://therock-dev-python/v4/whl/ \
|
|
||||||
--recursive --exclude "*" \
|
|
||||||
--include "jax*${{ inputs.rocm_version }}*${{ env.cp_version }}*"
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
#
|
|
||||||
name: Gitleaks
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
scan_mode:
|
|
||||||
description: >-
|
|
||||||
'changed' (default) scans only commits introduced by the calling
|
|
||||||
event; requires a pull_request or push
|
|
||||||
event payload and hard-fails otherwise. 'all' scans the full
|
|
||||||
repository history and is required for schedule,
|
|
||||||
workflow_dispatch, release, and any other event type.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: changed
|
|
||||||
report_formats:
|
|
||||||
description: >-
|
|
||||||
Comma-separated list of gitleaks report formats to produce. Allowed
|
|
||||||
values: 'sarif' (default), 'json', 'csv', 'junit'. SARIF outputs are
|
|
||||||
uploaded to GitHub code scanning via github/codeql-action/upload-sarif;
|
|
||||||
all other formats are uploaded as build artifacts via
|
|
||||||
actions/upload-artifact. Example: 'sarif,json'.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: sarif
|
|
||||||
scan_path:
|
|
||||||
description: >-
|
|
||||||
Path (relative to the repository root) to scan. Defaults to '.' so
|
|
||||||
the entire superproject checkout is scanned; set to a subdirectory
|
|
||||||
(e.g. 'src/' or 'services/api/') to restrict the scan to that
|
|
||||||
subtree. The path MUST exist after checkout or the scan job fails.
|
|
||||||
Submodules are NOT scanned: the checkout step leaves them
|
|
||||||
uninitialized (its default), and each submodule is a separately
|
|
||||||
versioned ROCm or third-party repo with its own gitleaks coverage.
|
|
||||||
A PR that bumps a submodule SHA surfaces as a one-line change in
|
|
||||||
the superproject diff and is reviewable on its own.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "."
|
|
||||||
# Reusable workflows declare the *minimum* permissions every caller
|
|
||||||
# must grant.
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
scan:
|
|
||||||
name: Gitleaks scan
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
timeout-minutes: 30
|
|
||||||
steps:
|
|
||||||
- name: Bootstrap checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
|
|
||||||
- name: Compute checkout fetch-depth
|
|
||||||
id: depth
|
|
||||||
uses: ./.github/actions/compute_pr_fetch_depth
|
|
||||||
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
fetch-depth: ${{ steps.depth.outputs.value }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.12"
|
|
||||||
|
|
||||||
- name: Run gitleaks
|
|
||||||
id: scan
|
|
||||||
env:
|
|
||||||
GITLEAKS_SCAN_MODE: ${{ inputs.scan_mode }}
|
|
||||||
GITLEAKS_REPORT_FORMATS: ${{ inputs.report_formats }}
|
|
||||||
GITLEAKS_SOURCE_DIR: ${{ inputs.scan_path }}
|
|
||||||
run: python build_tools/scan_tools/github_actions/gitleaks.py
|
|
||||||
|
|
||||||
- name: Upload SARIF report to code scanning
|
|
||||||
if: always() && steps.scan.outputs.sarif_path != ''
|
|
||||||
uses: github/codeql-action/upload-sarif@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
|
||||||
with:
|
|
||||||
sarif_file: ${{ steps.scan.outputs.sarif_path }}
|
|
||||||
category: gitleaks
|
|
||||||
|
|
||||||
- name: Upload non-SARIF reports
|
|
||||||
if: always() && steps.scan.outputs.non_sarif_paths != ''
|
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
||||||
with:
|
|
||||||
name: gitleaks-report
|
|
||||||
path: ${{ steps.scan.outputs.non_sarif_paths }}
|
|
||||||
if-no-files-found: ignore
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
#
|
|
||||||
# Weekly gitleaks scan: runs on a fixed cadence and pushes
|
|
||||||
# SARIF findings to the repository's code-scanning Security tab.
|
|
||||||
name: Gitleaks main
|
|
||||||
|
|
||||||
on:
|
|
||||||
# Run every Saturday at 10:00 UTC.
|
|
||||||
schedule:
|
|
||||||
- cron: "0 10 * * 6"
|
|
||||||
# Allow re-running the weekly scan on demand, e.g. after
|
|
||||||
# tweaking `gitleaks.toml` or rotating the gitleaks version pin, so
|
|
||||||
# the Security tab can be refreshed without an unrelated commit.
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
gitleaks:
|
|
||||||
uses: ./.github/workflows/gitleaks.yml
|
|
||||||
with:
|
|
||||||
scan_mode: all
|
|
||||||
report_formats: sarif
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
# Required so the reusable workflow can call
|
|
||||||
# github/codeql-action/upload-sarif and have the findings
|
|
||||||
# appear under Security -> Code scanning, filterable by
|
|
||||||
# `Tool: gitleaks` separately from any other scanner.
|
|
||||||
security-events: write
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Hip tagging automation
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- rocm-systems
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tag-rocm-systems:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout ROCm/TheRock
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
|
|
||||||
- name: Generate GitHub App token
|
|
||||||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
||||||
id: generate-token
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.ROCM_SYSTEMS_APP_ID }}
|
|
||||||
private-key: ${{ secrets.ROCM_SYSTEMS_APP_PRIVATE_KEY }}
|
|
||||||
owner: "ROCm"
|
|
||||||
repositories: "rocm-systems"
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
pip install PyGithub
|
|
||||||
|
|
||||||
- name: Run tagging script
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/hip_tagging_helper.py \
|
|
||||||
--repo "${{ github.repository }}" \
|
|
||||||
--before "${{ github.event.before }}" \
|
|
||||||
--after "${{ github.sha }}" \
|
|
||||||
--pat "${{ steps.generate-token.outputs.token }}"
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
name: TheRock Manifest Diff Report
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
start_ref:
|
|
||||||
description: 'Start commit SHA or workflow run ID. Used when neither pr_base_ref nor find_last_run is set (start resolution precedence: pr_base_ref > find_last_run > start_ref).'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
end_ref:
|
|
||||||
description: 'End commit SHA (or, with workflow_mode=true, a workflow run ID).'
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
workflow_mode:
|
|
||||||
description: 'Interpret start_ref and end_ref as workflow run IDs instead of commit SHAs (pr_base_ref and find_last_run are unaffected).'
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
find_last_run:
|
|
||||||
description: 'Workflow filename (e.g. multi_arch_ci.yml). When set, start_ref is resolved as the head SHA of that workflow''s most recent run on `branch` that concluded with success or failure (cancelled / skipped / in-progress runs are ignored).'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
pr_base_ref:
|
|
||||||
description: 'PR base branch name (e.g. main). When set, start_ref is resolved as the merge-base between end_ref and the named branch via the GitHub Compare API — rebase-safe, works on rewritten PR histories.'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
branch:
|
|
||||||
description: 'Branch to scope find_last_run lookups against (default: main). Only consulted when find_last_run is set; ignored otherwise.'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: 'main'
|
|
||||||
repository:
|
|
||||||
description: 'Repository to check out (default: the repository hosting this workflow run).'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
ref:
|
|
||||||
description: 'Git ref to check out (default: the ref hosting this workflow run).'
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
start_ref:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
end_ref:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
workflow_mode:
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
find_last_run:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
pr_base_ref:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
branch:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: 'main'
|
|
||||||
repository:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
ref:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ''
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
generate-report:
|
|
||||||
name: Generate Manifest Diff Report
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
# Non-blocking under CI; strict on manual dispatch so regressions surface red.
|
|
||||||
continue-on-error: ${{ github.event_name != 'workflow_dispatch' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:a382085df3ba2419b58aa9051350883a0d0b732a4bc0a4ef60458f8161bb08c6
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Adjust git config
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory $PWD
|
|
||||||
|
|
||||||
- name: Generate manifest diff report
|
|
||||||
id: gen-report
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
python3 build_tools/generate_manifest_diff_report.py \
|
|
||||||
--end "${{ inputs.end_ref || (github.event_name == 'pull_request' && github.event.pull_request.head.sha) || github.sha }}" \
|
|
||||||
--start "${{ inputs.start_ref || (github.event_name == 'push' && github.event.before) || '' }}" \
|
|
||||||
--find-last-run "${{ inputs.find_last_run }}" \
|
|
||||||
--pr-base-ref "${{ inputs.pr_base_ref || (github.event_name == 'pull_request' && github.event.pull_request.base.ref) || '' }}" \
|
|
||||||
--branch "${{ inputs.branch }}" \
|
|
||||||
${{ inputs.workflow_mode && '--workflow-mode' || '' }} \
|
|
||||||
--output-dir reports
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
if: ${{ steps.gen-report.conclusion == 'success' }}
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
|
|
||||||
- name: Upload Report to S3
|
|
||||||
if: ${{ steps.gen-report.conclusion == 'success' }}
|
|
||||||
run: |
|
|
||||||
python3 build_tools/github_actions/upload_test_report_script.py \
|
|
||||||
--run-id ${{ github.run_id }} \
|
|
||||||
--subfolder manifest-diff \
|
|
||||||
--report-path reports \
|
|
||||||
--index-file-name index.html
|
|
||||||
@@ -1,298 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Reusable single-build workflow for the Linux JAX wheel flow.
|
|
||||||
#
|
|
||||||
# This workflow is called once per release matrix cell from
|
|
||||||
# test_linux_jax_wheels_partial.yml
|
|
||||||
#
|
|
||||||
# Built shape:
|
|
||||||
# - One build/ci_build invocation for one python_version and jax_ref
|
|
||||||
# matrix cell.
|
|
||||||
# - Uploads the resulting wheels to the multi-arch release bucket.
|
|
||||||
# - Runs the JAX test subset against the published multi-arch index.
|
|
||||||
|
|
||||||
name: Multi-Arch Build Linux JAX Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
test_amdgpu_family:
|
|
||||||
description: "GPU family to use for JAX tests; empty means skip tests."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
python_version:
|
|
||||||
description: "Python version to build wheels for."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
jax_repository:
|
|
||||||
description: "Repository containing the JAX release branch."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
gfx_arch:
|
|
||||||
description: "ROCm device package selector used for the manylinux build (e.g. device-gfx942, device-gfx950, or device-all)."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
jax_ref:
|
|
||||||
description: "JAX / rocm-jax release ref."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm package version to install and build against."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: "Release type."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
outputs:
|
|
||||||
package_index_url:
|
|
||||||
description: "Package index URL for the multi-arch release bucket."
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.package_index_url }}
|
|
||||||
jax_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jax_version }}
|
|
||||||
jaxlib_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jaxlib_version }}
|
|
||||||
jax_plugin_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jax_plugin_version }}
|
|
||||||
jax_pjrt_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jax_pjrt_version }}
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
test_amdgpu_family:
|
|
||||||
description: "Representative GPU family to use for JAX tests."
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
python_version:
|
|
||||||
description: "Python version to build wheels for."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
jax_repository:
|
|
||||||
description: "GitHub repository in owner/repo format (e.g. ROCm/jax or ROCm/rocm-jax)."
|
|
||||||
type: string
|
|
||||||
default: "ROCm/jax"
|
|
||||||
gfx_arch:
|
|
||||||
description: "ROCm device package selector used for the manylinux build (e.g. device-gfx942, device-gfx950, or device-all)."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
jax_ref:
|
|
||||||
description: "JAX / rocm-jax release ref."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm package version to install and build against."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: "Release type."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
run-name: Build Multi-Arch Linux JAX Wheels (${{ inputs.release_type }}, ${{ inputs.rocm_version }}, Multiarch)
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_jax_wheels:
|
|
||||||
name: Build | py ${{ inputs.python_version }} | jax ${{ inputs.jax_ref }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'azure-linux-scale-rocm' || 'ubuntu-24.04' }}
|
|
||||||
outputs:
|
|
||||||
package_index_url: ${{ steps.publish_jax_wheels.outputs.package_index_url }}
|
|
||||||
jax_version: ${{ steps.write_jax_versions.outputs.jax_version }}
|
|
||||||
jaxlib_version: ${{ steps.write_jax_versions.outputs.jaxlib_version }}
|
|
||||||
jax_plugin_version: ${{ steps.write_jax_versions.outputs.jax_plugin_version }}
|
|
||||||
jax_pjrt_version: ${{ steps.write_jax_versions.outputs.jax_pjrt_version }}
|
|
||||||
env:
|
|
||||||
MANYLINUX_IMAGE_TAG: therock-jax-manylinux:${{ inputs.jax_ref }}-${{ inputs.python_version }}
|
|
||||||
PACKAGE_DIST_DIR: ${{ github.workspace }}/jax-source/dist
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout TheRock
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || github.ref_name }}
|
|
||||||
|
|
||||||
- name: Checkout rocm-jax
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: rocm-jax
|
|
||||||
repository: ROCm/rocm-jax
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
- name: Checkout JAX
|
|
||||||
id: checkout_jax
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: jax-source
|
|
||||||
repository: ${{ inputs.jax_repository }}
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
|
|
||||||
- name: Configure Git Identity
|
|
||||||
run: |
|
|
||||||
git config --global user.name "therockbot"
|
|
||||||
git config --global user.email "therockbot@amd.com"
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Install python deps for CI
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/jax/requirements-jax.txt
|
|
||||||
|
|
||||||
# TODO: THEROCK_INDEX_URL need to be renamed in the future to
|
|
||||||
# THEROCK_FIND_LINKS_URL to avoid confusion with pip --index-url.
|
|
||||||
- name: Build manylinux image
|
|
||||||
working-directory: jax-source
|
|
||||||
env:
|
|
||||||
THEROCK_VERSION: ""
|
|
||||||
GFX_ARCH: ${{ inputs.gfx_arch }}
|
|
||||||
ROCM_PACKAGE_FIND_LINKS_URL: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
run: |
|
|
||||||
cp ../rocm-jax/docker/manylinux/Dockerfile.jax-manylinux_2_28-therock \
|
|
||||||
Dockerfile.jax-manylinux_2_28-therock
|
|
||||||
|
|
||||||
docker build \
|
|
||||||
-t "${MANYLINUX_IMAGE_TAG}" \
|
|
||||||
--file=Dockerfile.jax-manylinux_2_28-therock \
|
|
||||||
--build-arg=THEROCK_INDEX_URL="${ROCM_PACKAGE_FIND_LINKS_URL}" \
|
|
||||||
--build-arg=THEROCK_VERSION="${THEROCK_VERSION}" \
|
|
||||||
--build-arg=GFX_ARCH="${GFX_ARCH}" \
|
|
||||||
--progress=plain \
|
|
||||||
.
|
|
||||||
|
|
||||||
- name: Determine wheel version suffix
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/determine_version.py \
|
|
||||||
--rocm-version "${{ inputs.rocm_version }}"
|
|
||||||
|
|
||||||
- name: Build JAX Wheels in manylinux container
|
|
||||||
working-directory: jax-source
|
|
||||||
env:
|
|
||||||
ROCM_VERSION: ${{ inputs.rocm_version }}
|
|
||||||
PYTHON_VERSION: ${{ inputs.python_version }}
|
|
||||||
run: |
|
|
||||||
docker run --rm \
|
|
||||||
--user root \
|
|
||||||
--env ROCM_VERSION="${ROCM_VERSION}" \
|
|
||||||
--env PYTHON_VERSION="${PYTHON_VERSION}" \
|
|
||||||
--env ML_WHEEL_VERSION_SUFFIX="${version_suffix}" \
|
|
||||||
--env PACKAGE_DIST_DIR="/workspace/jax-source/dist" \
|
|
||||||
--volume "${GITHUB_WORKSPACE}:/workspace" \
|
|
||||||
--workdir /workspace/jax-source \
|
|
||||||
"${MANYLINUX_IMAGE_TAG}" \
|
|
||||||
bash -lc '
|
|
||||||
python build/build.py build \
|
|
||||||
--wheels=jax-rocm-plugin,jax-rocm-pjrt \
|
|
||||||
--python_version="${PYTHON_VERSION}" \
|
|
||||||
--bazel_startup_options=--bazelrc=build/rocm/rocm.bazelrc \
|
|
||||||
--bazel_options=--config=rocm_release_wheel \
|
|
||||||
--bazel_options=--repo_env=ROCM_PATH=$(rocm-sdk path --root) \
|
|
||||||
--bazel_options=--repo_env=ML_WHEEL_TYPE=release \
|
|
||||||
--bazel_options=--repo_env=ML_WHEEL_VERSION_SUFFIX="${ML_WHEEL_VERSION_SUFFIX}" \
|
|
||||||
--bazel_options=--//jaxlib/tools:jaxlib_git_hash="${{ steps.checkout_jax.outputs.commit }}" \
|
|
||||||
--verbose \
|
|
||||||
--detailed_timestamped_log \
|
|
||||||
--output_path=$(pwd)/dist
|
|
||||||
'
|
|
||||||
|
|
||||||
- name: Extract JAX versions from built wheels
|
|
||||||
id: write_jax_versions
|
|
||||||
run: |
|
|
||||||
python3 ./build_tools/github_actions/write_jax_versions.py \
|
|
||||||
--dist-dir "${{ env.PACKAGE_DIST_DIR }}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Upload JAX wheels to release bucket
|
|
||||||
id: publish_jax_wheels
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/publish_jax_to_release_bucket.py \
|
|
||||||
--source-dir="${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--release-type="${{ inputs.release_type }}"
|
|
||||||
|
|
||||||
generate_target_to_run:
|
|
||||||
name: Generate target_to_run
|
|
||||||
if: ${{ inputs.test_amdgpu_family != '' }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
test_runs_on: ${{ steps.configure.outputs.test-runs-on }}
|
|
||||||
steps:
|
|
||||||
- name: Checking out repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || github.ref_name }}
|
|
||||||
|
|
||||||
- name: Checkout CI config
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ROCm/therock-ci-config
|
|
||||||
ref: main
|
|
||||||
path: ci-config
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Generating target to run
|
|
||||||
id: configure
|
|
||||||
env:
|
|
||||||
TARGET: ${{ inputs.test_amdgpu_family }}
|
|
||||||
PLATFORM: linux
|
|
||||||
CI_CONFIG_PATH: ci-config
|
|
||||||
run: python ./build_tools/github_actions/configure_target_run.py
|
|
||||||
|
|
||||||
test_jax_wheels:
|
|
||||||
if: ${{ inputs.test_amdgpu_family != '' }}
|
|
||||||
needs: [build_jax_wheels, generate_target_to_run]
|
|
||||||
name: Test JAX wheels | py ${{ inputs.python_version }} | jax ${{ inputs.jax_ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
uses: ./.github/workflows/test_linux_jax_wheels_partial.yml
|
|
||||||
with:
|
|
||||||
test_amdgpu_family: ${{ inputs.test_amdgpu_family }}
|
|
||||||
package_index_url: ${{ needs.build_jax_wheels.outputs.package_index_url }}
|
|
||||||
rocm_version: ${{ inputs.rocm_version }}
|
|
||||||
rocm_package_find_links_url: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
jax_ref: ${{ inputs.jax_ref }}
|
|
||||||
jax_version: ${{ needs.build_jax_wheels.outputs.jax_version }}
|
|
||||||
jaxlib_version: ${{ needs.build_jax_wheels.outputs.jaxlib_version }}
|
|
||||||
jax_plugin_version: ${{ needs.build_jax_wheels.outputs.jax_plugin_version }}
|
|
||||||
jax_pjrt_version: ${{ needs.build_jax_wheels.outputs.jax_pjrt_version }}
|
|
||||||
test_runs_on: ${{ needs.generate_target_to_run.outputs.test_runs_on }}
|
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Reusable single-build workflow for the Linux JAX wheel CI flow.
|
|
||||||
#
|
|
||||||
# This workflow is called once per CI matrix cell from multi_arch_ci_linux.yml.
|
|
||||||
#
|
|
||||||
# Built shape:
|
|
||||||
# - One manylinux JAX wheel build for one python_version and jax_ref matrix cell.
|
|
||||||
# - Installs ROCm packages from the run-scoped CI find-links URL.
|
|
||||||
# - Uploads the resulting wheels to run-scoped CI Python artifacts.
|
|
||||||
# - Build-only for the first CI rollout; test wiring should be added separately.
|
|
||||||
|
|
||||||
name: Multi-Arch Build Linux JAX Wheels (CI)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
description: "Artifact group for CI artifact upload."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
python_version:
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
jax_repository:
|
|
||||||
description: "Repository containing the JAX release branch."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
gfx_arch:
|
|
||||||
description: "ROCm device package selector used for the manylinux build (e.g. device-gfx942, device-gfx950, or device-all)."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
jax_ref:
|
|
||||||
description: "JAX / rocm-jax release ref."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm package version to install and build against."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
outputs:
|
|
||||||
package_find_links_url:
|
|
||||||
description: "pip --find-links URL for CI-uploaded JAX wheels."
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.package_find_links_url }}
|
|
||||||
jax_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jax_version }}
|
|
||||||
jaxlib_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jaxlib_version }}
|
|
||||||
jax_plugin_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jax_plugin_version }}
|
|
||||||
jax_pjrt_version:
|
|
||||||
value: ${{ jobs.build_jax_wheels.outputs.jax_pjrt_version }}
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
description: "Artifact group for CI artifact upload."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
python_version:
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
jax_repository:
|
|
||||||
description: "GitHub repository in owner/repo format containing the JAX release branch."
|
|
||||||
type: string
|
|
||||||
default: "ROCm/jax"
|
|
||||||
gfx_arch:
|
|
||||||
description: "ROCm device package selector used for the manylinux build (e.g. device-gfx942, device-gfx950, or device-all)."
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
jax_ref:
|
|
||||||
description: "JAX / rocm-jax release ref (e.g. rocm-jaxlib-v0.10.0, rocm-jaxlib-v0.10.2)."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm package version to install and build against."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
run-name: Build Multi-Arch Linux JAX Wheels CI (${{ inputs.artifact_group }}, ${{ inputs.rocm_version }}, py${{ inputs.python_version }}, ${{ inputs.jax_ref }})
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_jax_wheels:
|
|
||||||
name: Build JAX | ${{ inputs.artifact_group }} | jax ${{ inputs.jax_ref }} | py ${{ inputs.python_version }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'azure-linux-scale-rocm' || 'ubuntu-24.04' }}
|
|
||||||
outputs:
|
|
||||||
package_find_links_url: ${{ steps.upload_jax_wheels.outputs.package_find_links_url }}
|
|
||||||
jax_version: ${{ steps.write_jax_versions.outputs.jax_version }}
|
|
||||||
jaxlib_version: ${{ steps.write_jax_versions.outputs.jaxlib_version }}
|
|
||||||
jax_plugin_version: ${{ steps.write_jax_versions.outputs.jax_plugin_version }}
|
|
||||||
jax_pjrt_version: ${{ steps.write_jax_versions.outputs.jax_pjrt_version }}
|
|
||||||
env:
|
|
||||||
MANYLINUX_IMAGE_TAG: therock-jax-manylinux:${{ inputs.jax_ref }}-${{ inputs.python_version }}
|
|
||||||
RELEASE_TYPE: ci
|
|
||||||
PACKAGE_DIST_DIR: ${{ github.workspace }}/jax-source/dist
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout TheRock
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout rocm-jax
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: rocm-jax
|
|
||||||
repository: ROCm/rocm-jax
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
- name: Checkout JAX
|
|
||||||
id: checkout_jax
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: jax-source
|
|
||||||
repository: ${{ inputs.jax_repository }}
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
|
|
||||||
- name: Configure Git Identity
|
|
||||||
run: |
|
|
||||||
git config --global user.name "therockbot"
|
|
||||||
git config --global user.email "therockbot@amd.com"
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Install python deps for CI
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/jax/requirements-jax.txt
|
|
||||||
|
|
||||||
- name: Build manylinux image
|
|
||||||
working-directory: jax-source
|
|
||||||
env:
|
|
||||||
THEROCK_VERSION: ""
|
|
||||||
GFX_ARCH: ${{ inputs.gfx_arch }}
|
|
||||||
ROCM_PACKAGE_FIND_LINKS_URL: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
run: |
|
|
||||||
cp ../rocm-jax/docker/manylinux/Dockerfile.jax-manylinux_2_28-therock \
|
|
||||||
Dockerfile.jax-manylinux_2_28-therock
|
|
||||||
|
|
||||||
# TODO(#6388): Replace this per-run rocm-jax Dockerfile build with a
|
|
||||||
# frozen/prebuilt CI image and refine when JAX CI should run.
|
|
||||||
docker build \
|
|
||||||
-t "${MANYLINUX_IMAGE_TAG}" \
|
|
||||||
--file=Dockerfile.jax-manylinux_2_28-therock \
|
|
||||||
--build-arg=THEROCK_INDEX_URL="${ROCM_PACKAGE_FIND_LINKS_URL}" \
|
|
||||||
--build-arg=THEROCK_VERSION="${THEROCK_VERSION}" \
|
|
||||||
--build-arg=GFX_ARCH="${GFX_ARCH}" \
|
|
||||||
--progress=plain \
|
|
||||||
.
|
|
||||||
|
|
||||||
- name: Determine wheel version suffix
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/determine_version.py \
|
|
||||||
--rocm-version "${{ inputs.rocm_version }}"
|
|
||||||
|
|
||||||
- name: Build JAX Wheels in manylinux container
|
|
||||||
working-directory: jax-source
|
|
||||||
env:
|
|
||||||
ROCM_VERSION: ${{ inputs.rocm_version }}
|
|
||||||
PYTHON_VERSION: ${{ inputs.python_version }}
|
|
||||||
run: |
|
|
||||||
docker run --rm \
|
|
||||||
--user root \
|
|
||||||
--env ROCM_VERSION="${ROCM_VERSION}" \
|
|
||||||
--env PYTHON_VERSION="${PYTHON_VERSION}" \
|
|
||||||
--env ML_WHEEL_VERSION_SUFFIX="${version_suffix}" \
|
|
||||||
--env PACKAGE_DIST_DIR="/workspace/jax-source/dist" \
|
|
||||||
--volume "${GITHUB_WORKSPACE}:/workspace" \
|
|
||||||
--workdir /workspace/jax-source \
|
|
||||||
"${MANYLINUX_IMAGE_TAG}" \
|
|
||||||
bash -lc '
|
|
||||||
python build/build.py build \
|
|
||||||
--wheels=jax-rocm-plugin,jax-rocm-pjrt \
|
|
||||||
--python_version="${PYTHON_VERSION}" \
|
|
||||||
--bazel_startup_options=--bazelrc=build/rocm/rocm.bazelrc \
|
|
||||||
--bazel_options=--config=rocm_release_wheel \
|
|
||||||
--bazel_options=--repo_env=ROCM_PATH=$(rocm-sdk path --root) \
|
|
||||||
--bazel_options=--repo_env=ML_WHEEL_TYPE=release \
|
|
||||||
--bazel_options=--repo_env=ML_WHEEL_VERSION_SUFFIX="${ML_WHEEL_VERSION_SUFFIX}" \
|
|
||||||
--bazel_options=--//jaxlib/tools:jaxlib_git_hash="${{ steps.checkout_jax.outputs.commit }}" \
|
|
||||||
--verbose \
|
|
||||||
--detailed_timestamped_log \
|
|
||||||
--output_path=$(pwd)/dist
|
|
||||||
'
|
|
||||||
|
|
||||||
- name: Extract JAX versions from built wheels
|
|
||||||
id: write_jax_versions
|
|
||||||
run: |
|
|
||||||
python3 ./build_tools/github_actions/write_jax_versions.py \
|
|
||||||
--dist-dir "${{ env.PACKAGE_DIST_DIR }}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ci
|
|
||||||
|
|
||||||
- name: Upload JAX wheels to CI artifacts
|
|
||||||
id: upload_jax_wheels
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/upload_python_packages.py \
|
|
||||||
--input-packages-dir="${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--multiarch
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
name: Build Multi-Arch Native Linux Packages
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
dist_amdgpu_families:
|
|
||||||
description: "Semicolon-separated list of all GPU families (e.g., 'gfx94X-dcgpu;gfx120X-all')"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
artifact_run_id:
|
|
||||||
description: "Workflow run id to download the artifacts from"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm version to append to the package (8.0.0, 8.0.1rc1, ...)"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
native_package_type:
|
|
||||||
description: "Package type (deb or rpm)"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
package_suffix:
|
|
||||||
description: "The suffix to be added to package name (asan, tsan, static or rpath)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (e.g. 'asan'). When set to 'asan', changes the install prefix to DEFAULT_INSTALL_PREFIX-asan-MAJOR.MINOR (e.g. /opt/rocm/core-asan-7.15)."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: "Release type: 'ci', 'dev', 'nightly', or 'prerelease'"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`"
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow"
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
outputs:
|
|
||||||
package_repository_url:
|
|
||||||
description: "Public repository URL for package installation"
|
|
||||||
value: ${{ jobs.build_native_packages.outputs.package_repository_url }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Build ${{ inputs.native_package_type }} packages (${{ inputs.rocm_version }}, ${{ inputs.dist_amdgpu_families }}${{ inputs.release_type && format(', {0}', inputs.release_type) || '' }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_native_packages:
|
|
||||||
name: Build ${{ inputs.native_package_type }} packages
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/no_rocm_image_ubuntu24_04:latest
|
|
||||||
outputs:
|
|
||||||
package_repository_url: ${{ steps.upload-packages.outputs.package_repository_url }}
|
|
||||||
env:
|
|
||||||
ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id != '' && inputs.artifact_run_id || github.run_id }}"
|
|
||||||
DIST_AMDGPU_FAMILIES: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
PACKAGE_SUFFIX: ${{ inputs.package_suffix }}
|
|
||||||
# Use relative paths to avoid host/container path mismatch
|
|
||||||
OUTPUT_DIR: output
|
|
||||||
ARTIFACTS_DIR: output/artifacts
|
|
||||||
PACKAGE_DIST_DIR: output/packages
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
steps:
|
|
||||||
- name: Checking out repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: '3.12'
|
|
||||||
|
|
||||||
- name: Install Python requirements
|
|
||||||
run: |
|
|
||||||
pip install pyelftools boto3 jinja2 pyzstd
|
|
||||||
|
|
||||||
- name: Install System requirements
|
|
||||||
run: |
|
|
||||||
# Install the needed tools for creating rpm / deb packages
|
|
||||||
# Also install tools for creating repo files
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y llvm-20
|
|
||||||
sudo apt-get install -y rpm debhelper-compat build-essential
|
|
||||||
sudo apt-get install -y dpkg-dev createrepo-c
|
|
||||||
sudo apt-get install -y patchelf
|
|
||||||
|
|
||||||
- name: Fetch Artifacts for all GPU families
|
|
||||||
run: |
|
|
||||||
# Use artifact_manager.py for consistent multi-arch artifact fetching
|
|
||||||
# NOTE: artifact_manager.py appends /artifacts to --output-dir in non-flatten mode,
|
|
||||||
# so we pass OUTPUT_DIR (parent) to have artifacts land in $OUTPUT_DIR/artifacts
|
|
||||||
# which matches the ARTIFACTS_DIR environment variable
|
|
||||||
python ./build_tools/artifact_manager.py fetch \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--stage=all \
|
|
||||||
--amdgpu-families="${{ env.DIST_AMDGPU_FAMILIES }}" \
|
|
||||||
--expand-family-to-targets \
|
|
||||||
--output-dir="${{ env.OUTPUT_DIR }}"
|
|
||||||
|
|
||||||
- name: Build Packages
|
|
||||||
id: build-packages
|
|
||||||
run: |
|
|
||||||
# GFX architectures are auto-detected from the artifact directory
|
|
||||||
# (populated by --expand-family-to-targets in the fetch step).
|
|
||||||
# KPACK_SPLIT_ARTIFACTS is auto-detected from therock_manifest.json.
|
|
||||||
python ./build_tools/packaging/linux/build_package.py \
|
|
||||||
--dest-dir "${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--rocm-version "${{ inputs.rocm_version }}" \
|
|
||||||
--artifacts-dir "${{ env.ARTIFACTS_DIR }}" \
|
|
||||||
--pkg-type "${{ inputs.native_package_type }}" \
|
|
||||||
--version-suffix "${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--build-variant "${{ inputs.build_variant }}"
|
|
||||||
|
|
||||||
- name: Simulated install Test
|
|
||||||
id: test-packages
|
|
||||||
run: |
|
|
||||||
python ./build_tools/packaging/linux/native_linux_package_install_test.py \
|
|
||||||
--test-type simulate \
|
|
||||||
--packages-dir "${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--pkg-type ${{ inputs.native_package_type }}
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Upload Package repo to S3
|
|
||||||
id: upload-packages
|
|
||||||
run: |
|
|
||||||
python ./build_tools/packaging/linux/upload_package_repo.py \
|
|
||||||
--pkg-type "${{ inputs.native_package_type }}" \
|
|
||||||
--run-id "${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--package-dir "${{ env.PACKAGE_DIST_DIR }}"
|
|
||||||
@@ -1,321 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Multi-Arch Build - Sharded Pipeline for Linux
|
|
||||||
#
|
|
||||||
# This workflow builds TheRock in stages:
|
|
||||||
# 1. compiler-runtime (generic) - sysdeps, base, compiler, runtimes, profiler-core
|
|
||||||
# 2. runtime-tests (generic) - hip-tests, rocrtst (parallel to math-libs)
|
|
||||||
# 3. wsl-rocdxg (generic) - WSL-only ROCDXG bridge library (after compiler-runtime)
|
|
||||||
# 4. math-libs (per-arch) - BLAS, FFT, etc.
|
|
||||||
# 5. comm-libs (per-arch) - RCCL, rocshmem (parallel to math-libs)
|
|
||||||
# 6. storage-libs (generic) - hipfile (parallel to math-libs)
|
|
||||||
# 7. debug-tools (generic) - amd-dbgapi, rocr-debug-agent, rocgdb (parallel to math-libs)
|
|
||||||
# 8. dctools-core (generic) - RDC (parallel to math-libs)
|
|
||||||
# 9. profiler-apps (generic) - rocprofiler-systems (parallel to math-libs)
|
|
||||||
# 10. media-libs (generic) - sysdeps-amd-mesa, rocdecode, rocjpeg
|
|
||||||
|
|
||||||
name: Multi-Arch Build (Linux)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
matrix_per_family_json:
|
|
||||||
type: string
|
|
||||||
description: "JSON array of {amdgpu_family, test-runs-on} objects for per-arch stages"
|
|
||||||
dist_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
description: "Semicolon-separated list of all GPU families for dist targets"
|
|
||||||
build_variant_label:
|
|
||||||
type: string
|
|
||||||
build_variant_cmake_preset:
|
|
||||||
type: string
|
|
||||||
build_variant_suffix:
|
|
||||||
type: string
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
prebuilt_stages:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Comma-separated build stages to skip (artifacts already copied by the orchestrator)"
|
|
||||||
build_runs_on:
|
|
||||||
type: string
|
|
||||||
default: "aws-linux-scale-rocm-prod-rc"
|
|
||||||
description: "Build runner label (selected by configure script with weighted distribution)"
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease"'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (repository, ref, checkout_path, source_package, fetch_sources_args)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: compiler-runtime (generic)
|
|
||||||
# ==========================================================================
|
|
||||||
compiler-runtime:
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'compiler-runtime') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: compiler-runtime
|
|
||||||
stage_display_name: "Stage - Compiler Runtime"
|
|
||||||
timeout_minutes: 480 # 8 hours (compiler is big)
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: runtime-tests (generic, parallel to math-libs)
|
|
||||||
# ==========================================================================
|
|
||||||
runtime-tests:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'runtime-tests') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: runtime-tests
|
|
||||||
stage_display_name: "Stage - Runtime Tests"
|
|
||||||
timeout_minutes: 120 # 2 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: wsl-rocdxg (generic)
|
|
||||||
# ==========================================================================
|
|
||||||
wsl-rocdxg:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'wsl-rocdxg') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_wsl_rocdxg_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: wsl-rocdxg
|
|
||||||
stage_display_name: "Stage - WSL ROCDXG"
|
|
||||||
timeout_minutes: 120 # 2 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: math-libs (per-arch)
|
|
||||||
# ==========================================================================
|
|
||||||
math-libs:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'math-libs') }}
|
|
||||||
strategy:
|
|
||||||
# `fail-fast: false` lets all families complete even if one fails.
|
|
||||||
# This is useful for CI (to see all failures at once), but for releases
|
|
||||||
# this risks publishing incomplete packages. Release pipelines may want
|
|
||||||
# to either set `fail-fast: true` or add a validation step that blocks
|
|
||||||
# promotion unless all jobs succeeded.
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: math-libs
|
|
||||||
stage_display_name: "Stage - Math Libs (${{ matrix.family_info.amdgpu_family }})"
|
|
||||||
timeout_minutes: 480 # 8 hours
|
|
||||||
amdgpu_family: ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: comm-libs (generic, single job parallel to math-libs)
|
|
||||||
# RCCL and rocshmem are both TARGET_NEUTRAL artifacts. RCCL is built for
|
|
||||||
# Instinct/CDNA targets only (https://github.com/ROCm/TheRock/issues/2130).
|
|
||||||
# Running as a single generic job avoids redundant per-arch builds.
|
|
||||||
# ==========================================================================
|
|
||||||
comm-libs:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'comm-libs') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: comm-libs
|
|
||||||
stage_display_name: "Stage - Comm Libs"
|
|
||||||
timeout_minutes: 240 # 4 hours
|
|
||||||
amdgpu_family: ""
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: storage-libs (generic, single job parallel to math-libs)
|
|
||||||
# hipFile is a TARGET_NEUTRAL artifact.
|
|
||||||
# ==========================================================================
|
|
||||||
storage-libs:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'storage-libs') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: storage-libs
|
|
||||||
stage_display_name: "Stage - Storage Libs"
|
|
||||||
timeout_minutes: 240 # 4 hours
|
|
||||||
amdgpu_family: ""
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: debug-tools (generic, parallel to math-libs)
|
|
||||||
# ==========================================================================
|
|
||||||
debug-tools:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'debug-tools') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: debug-tools
|
|
||||||
stage_display_name: "Stage - Debug Tools"
|
|
||||||
timeout_minutes: 180 # 3 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: dctools-core (generic, parallel to math-libs)
|
|
||||||
# ==========================================================================
|
|
||||||
dctools-core:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'dctools-core') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: dctools-core
|
|
||||||
stage_display_name: "Stage - DC Tools Core"
|
|
||||||
timeout_minutes: 120 # 2 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: profiler-apps (generic, parallel to math-libs)
|
|
||||||
# ==========================================================================
|
|
||||||
profiler-apps:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'profiler-apps') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: profiler-apps
|
|
||||||
stage_display_name: "Stage - Profiler Apps"
|
|
||||||
timeout_minutes: 180 # 3 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: media-libs (generic)
|
|
||||||
# ==========================================================================
|
|
||||||
media-libs:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'media-libs') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: media-libs
|
|
||||||
stage_display_name: "Stage - Media Libs"
|
|
||||||
timeout_minutes: 180 # 3 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
@@ -1,234 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Reusable Workflow: Build Stage Artifacts
|
|
||||||
#
|
|
||||||
# This workflow builds TheRock stage artifacts for all stages.
|
|
||||||
# Handles both generic stages (compiler-runtime, profiler-apps, etc.) and
|
|
||||||
# per-arch stages (math-libs, comm-libs) using conditional logic.
|
|
||||||
#
|
|
||||||
# Artifacts flow between stages via S3 using the artifact_manager.py tool.
|
|
||||||
#
|
|
||||||
# TODO: When kpack splitting is permanently enabled, change fetch commands to use
|
|
||||||
# --generic-only instead of --amdgpu-families for efficiency. Subsequent build
|
|
||||||
# stages only need generic (host) artifacts; device-specific kpacks are not
|
|
||||||
# needed until final packaging.
|
|
||||||
|
|
||||||
name: Build Stage Artifacts
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
stage_name:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Stage name (e.g., compiler-runtime, math-libs)"
|
|
||||||
stage_display_name:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Human-readable display name for the job"
|
|
||||||
timeout_minutes:
|
|
||||||
type: number
|
|
||||||
required: true
|
|
||||||
description: "Job timeout in minutes"
|
|
||||||
amdgpu_family:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
description: "GPU family for per-arch stages (empty for generic stages)"
|
|
||||||
dist_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Semicolon-separated list of all GPU families for dist targets"
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "ROCm package version string"
|
|
||||||
build_variant_cmake_preset:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
description: "CMake preset name for this build variant (optional)"
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; controls artifact bucket and IAM role'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
build_runs_on:
|
|
||||||
description: "Build runner label (selected by configure script with weighted distribution)"
|
|
||||||
type: string
|
|
||||||
default: "aws-linux-scale-rocm-prod-rc"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (generated by detect_external_repo_config.py)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_stage:
|
|
||||||
name: ${{ inputs.stage_display_name }}
|
|
||||||
runs-on: ${{ inputs.build_runs_on }}
|
|
||||||
timeout-minutes: ${{ inputs.timeout_minutes }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:a382085df3ba2419b58aa9051350883a0d0b732a4bc0a4ef60458f8161bb08c6
|
|
||||||
env:
|
|
||||||
STAGE_NAME: ${{ inputs.stage_name }}
|
|
||||||
AMDGPU_FAMILIES: ${{ inputs.amdgpu_family }}
|
|
||||||
BUILD_DIR: build
|
|
||||||
CCACHE_CONFIGPATH: ${{ github.workspace }}/.ccache/ccache.conf
|
|
||||||
CACHE_DIR: ${{ github.workspace }}/.container-cache
|
|
||||||
TEATIME_FORCE_INTERACTIVE: 0
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
EXTERNAL_FETCH_SOURCES_ARGS: ${{ inputs.external_repo_config != '' && fromJSON(inputs.external_repo_config).fetch_sources_args || '' }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout external repository
|
|
||||||
if: ${{ inputs.external_repo_config != '' }}
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ fromJSON(inputs.external_repo_config).repository }}
|
|
||||||
ref: ${{ fromJSON(inputs.external_repo_config).ref }}
|
|
||||||
path: ${{ fromJSON(inputs.external_repo_config).checkout_path }}
|
|
||||||
|
|
||||||
- name: Install python deps
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Adjust git config
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory $PWD
|
|
||||||
git config fetch.parallel 10
|
|
||||||
|
|
||||||
- name: Setup ccache
|
|
||||||
run: |
|
|
||||||
./build_tools/setup_ccache.py \
|
|
||||||
--release-type "${{ inputs.release_type }}" \
|
|
||||||
--dir "$(dirname $CCACHE_CONFIGPATH)" \
|
|
||||||
--local-path "$CACHE_DIR/ccache"
|
|
||||||
|
|
||||||
- name: Runner health status
|
|
||||||
run: |
|
|
||||||
./build_tools/health_status.py
|
|
||||||
|
|
||||||
# Note: no AWS credentials should be needed here since our CI buckets
|
|
||||||
# all currently have public read access.
|
|
||||||
- name: Fetch inbound artifacts
|
|
||||||
run: |
|
|
||||||
python build_tools/artifact_manager.py fetch \
|
|
||||||
--run-id=${{ github.run_id }} \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_family }}" \
|
|
||||||
--output-dir="${BUILD_DIR}" \
|
|
||||||
--bootstrap
|
|
||||||
|
|
||||||
- name: Fetch sources
|
|
||||||
timeout-minutes: 30
|
|
||||||
run: ./build_tools/fetch_sources.py --stage ${STAGE_NAME} --jobs 12 --depth 1 ${EXTERNAL_FETCH_SOURCES_ARGS}
|
|
||||||
|
|
||||||
- name: Get stage configuration
|
|
||||||
id: stage_config
|
|
||||||
run: |
|
|
||||||
python build_tools/configure_stage.py \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_family }}" \
|
|
||||||
--dist-amdgpu-families="${{ inputs.dist_amdgpu_families }}" \
|
|
||||||
--manylinux \
|
|
||||||
--gha-output
|
|
||||||
|
|
||||||
- name: Install stage python deps
|
|
||||||
if: ${{ steps.stage_config.outputs.pip_install_cmd }}
|
|
||||||
run: pip install ${{ steps.stage_config.outputs.pip_install_cmd }}
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
run: |
|
|
||||||
cmake -B "${BUILD_DIR}" -S . -GNinja \
|
|
||||||
-DTHEROCK_PACKAGE_VERSION=${{ inputs.rocm_package_version }} \
|
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
|
||||||
${{ inputs.build_variant_cmake_preset && format('--preset={0}', inputs.build_variant_cmake_preset) }} \
|
|
||||||
${{ inputs.external_repo_config != '' && format('-DTHEROCK_{0}_SOURCE_DIR={1}', fromJSON(inputs.external_repo_config).source_package, fromJSON(inputs.external_repo_config).checkout_path) || '' }} \
|
|
||||||
${{ inputs.external_repo_config != '' && fromJSON(inputs.external_repo_config).extra_cmake_options || '' }} \
|
|
||||||
${{ steps.stage_config.outputs.cmake_args }}
|
|
||||||
|
|
||||||
- name: Build stage
|
|
||||||
run: |
|
|
||||||
cmake --build "${BUILD_DIR}" --target stage-${STAGE_NAME} therock-artifacts -- -k 0
|
|
||||||
|
|
||||||
- name: Generate failed log summaries
|
|
||||||
if: ${{ !cancelled() }}
|
|
||||||
run: |
|
|
||||||
python3 build_tools/github_actions/detect_failed_logs.py
|
|
||||||
|
|
||||||
- name: Run build tests (Comgr, blocking)
|
|
||||||
if: ${{ !cancelled() && inputs.stage_name == 'compiler-runtime' }}
|
|
||||||
env:
|
|
||||||
TEATIME_FORCE_INTERACTIVE: 1
|
|
||||||
run: |
|
|
||||||
cmake --build "${BUILD_DIR}" --target build-test-amd-comgr -- -k 0
|
|
||||||
|
|
||||||
# Remaining build tests (e.g. rocjitsu, mirage) still run and report, but
|
|
||||||
# are not yet gating. Comgr is split out above so its failures block CI.
|
|
||||||
# TODO(#6112): rocjitsu tests are being moved out; drop this step once done.
|
|
||||||
- name: Run build tests (other, non-blocking)
|
|
||||||
if: ${{ !cancelled() && inputs.stage_name == 'compiler-runtime' }}
|
|
||||||
continue-on-error: true
|
|
||||||
env:
|
|
||||||
TEATIME_FORCE_INTERACTIVE: 1
|
|
||||||
run: |
|
|
||||||
cmake --build "${BUILD_DIR}" --target therock-build-tests -- -k 0
|
|
||||||
|
|
||||||
- name: Report
|
|
||||||
if: ${{ !cancelled() }}
|
|
||||||
run: |
|
|
||||||
echo "CCache Stats:"
|
|
||||||
ccache -s -v
|
|
||||||
echo "Artifacts:"
|
|
||||||
ls -lh "${BUILD_DIR}"/artifacts/*.tar.xz 2>/dev/null || echo "No artifacts found"
|
|
||||||
|
|
||||||
- name: Test Packaging
|
|
||||||
run: |
|
|
||||||
ctest --test-dir ${BUILD_DIR} --output-on-failure
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
if: ${{ always() }}
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
# TODO(#3336): Attempt upload `always()`?
|
|
||||||
# * If some part of the build failed, partial artifacts may be useful for debugging.
|
|
||||||
# * This script fails if `build_dir / "artifacts"` does not exist. That's useful
|
|
||||||
# if the build succeeded but did not produce artifacts. That's _not_ useful
|
|
||||||
# if the workflow failed or was cancelled before the build even started though.
|
|
||||||
- name: Push stage artifacts
|
|
||||||
run: |
|
|
||||||
python build_tools/artifact_manager.py push \
|
|
||||||
--run-id ${{ github.run_id }} \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--build-dir="${BUILD_DIR}"
|
|
||||||
|
|
||||||
- name: Upload stage logs
|
|
||||||
if: ${{ always() }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/post_stage_upload.py \
|
|
||||||
--run-id=${{ github.run_id }} \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--build-dir="${BUILD_DIR}" \
|
|
||||||
--amdgpu-family="${AMDGPU_FAMILIES}"
|
|
||||||
@@ -1,501 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Reusable multi-arch PyTorch build workflow for Linux.
|
|
||||||
#
|
|
||||||
# Built shape:
|
|
||||||
# - One fat build_prod_wheels.py invocation for one python_version and
|
|
||||||
# pytorch_git_ref, covering all gfx targets expanded from the
|
|
||||||
# inputs.amdgpu_families set. Builds torch, torchaudio, torchvision,
|
|
||||||
# triton, and apex in a single invocation.
|
|
||||||
# - kpack-split the fat torch and torchvision wheels into host wheels
|
|
||||||
# plus per-gfx amd-torch-device-* / amd-torchvision-device-* wheels.
|
|
||||||
# other packages ship as-is (nothing to split).
|
|
||||||
# - Upload the result to s3://therock-{release_type}-python/v4/whl/
|
|
||||||
# via publish_pytorch_to_release_bucket.py (pip-compatible index generation
|
|
||||||
# happens server-side).
|
|
||||||
#
|
|
||||||
# For convergence with CI and testing plans see:
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3332
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3291
|
|
||||||
|
|
||||||
name: Multi-Arch Build Portable Linux PyTorch Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx94X-dcgpu;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
test_amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated AMD GPU families to run tests for (e.g.
|
|
||||||
'gfx94X-dcgpu'). Use 'auto' to test built families, or 'none' to skip
|
|
||||||
tests.
|
|
||||||
type: string
|
|
||||||
default: "auto"
|
|
||||||
python_version:
|
|
||||||
description: Python version to build wheels for.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout. Typically "nightly" or "release/X.Y".
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; selects the S3 bucket.'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type ('none', 'sccache', or 'ccache')"
|
|
||||||
type: string
|
|
||||||
default: "sccache"
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: >-
|
|
||||||
Dispatch the full PyTorch test suite after a successful build.
|
|
||||||
Only takes effect for nightly gfx94X-dcgpu Python 3.12 builds.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx94X-dcgpu;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
test_amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated AMD GPU families to run tests for (e.g.
|
|
||||||
'gfx94X-dcgpu'). Use 'auto' to test built families, or 'none' to skip
|
|
||||||
tests.
|
|
||||||
type: string
|
|
||||||
default: "auto"
|
|
||||||
python_version:
|
|
||||||
description: Python version to build wheels for (for example, "3.12").
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout (for example, "release/2.12").
|
|
||||||
type: string
|
|
||||||
default: "release/2.12"
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- none
|
|
||||||
- sccache
|
|
||||||
- ccache
|
|
||||||
default: sccache
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: >-
|
|
||||||
Dispatch the full PyTorch test suite after a successful build.
|
|
||||||
Only takes effect for nightly gfx94X-dcgpu Python 3.12 builds.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
run-name: Build Multi-Arch Linux PyTorch Wheels (${{ inputs.release_type }}, ${{ inputs.python_version }}, ${{ inputs.pytorch_git_ref }})
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_pytorch_wheels:
|
|
||||||
name: Build | py ${{ inputs.python_version }} | torch ${{ inputs.pytorch_git_ref }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:a382085df3ba2419b58aa9051350883a0d0b732a4bc0a4ef60458f8161bb08c6
|
|
||||||
env:
|
|
||||||
PACKAGE_DIST_DIR: ${{ github.workspace }}/output/packages/dist
|
|
||||||
optional_build_prod_arguments: ""
|
|
||||||
SCCACHE_BUCKET: "therock-pytorch-sccache-${{ inputs.release_type }}"
|
|
||||||
SCCACHE_REGION: us-east-1
|
|
||||||
SCCACHE_S3_KEY_PREFIX: "linux/multiarch/v1/"
|
|
||||||
SCCACHE_S3_USE_SSL: "true"
|
|
||||||
SCCACHE_S3_SERVER_SIDE_ENCRYPTION: "true"
|
|
||||||
SCCACHE_IDLE_TIMEOUT: "0" # never idle-out; keeps stats accurate on long builds
|
|
||||||
SCCACHE_LOG: warn
|
|
||||||
outputs:
|
|
||||||
torch_version: ${{ steps.pytorch-versions.outputs.torch_version }}
|
|
||||||
torchaudio_version: ${{ steps.pytorch-versions.outputs.torchaudio_version }}
|
|
||||||
apex_version: ${{ steps.pytorch-versions.outputs.apex_version }}
|
|
||||||
torchvision_version: ${{ steps.pytorch-versions.outputs.torchvision_version }}
|
|
||||||
triton_version: ${{ steps.pytorch-versions.outputs.triton_version }}
|
|
||||||
package_index_url: ${{ steps.publish-pytorch-wheels.outputs.package_index_url }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Configure Git Identity
|
|
||||||
run: |
|
|
||||||
git config --global user.name "therockbot"
|
|
||||||
git config --global user.email "therockbot@amd.com"
|
|
||||||
|
|
||||||
- name: Select Python version
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/python_to_cp_version.py \
|
|
||||||
--python-version ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Add selected Python version to PATH
|
|
||||||
run: |
|
|
||||||
python_dir="/opt/python/${{ env.cp_version }}"
|
|
||||||
if ! [ -x "${python_dir}/bin/python" ]; then
|
|
||||||
echo "ERROR: Could not find python: ${python_dir}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "${python_dir}/bin" >> "$GITHUB_PATH"
|
|
||||||
|
|
||||||
- name: Install python deps for CI
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/pytorch/requirements-ci.txt
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source repos (nightly)
|
|
||||||
if: ${{ inputs.pytorch_git_ref == 'nightly' }}
|
|
||||||
run: |
|
|
||||||
./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_audio_repo.py checkout \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_vision_repo.py checkout \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_triton_repo.py checkout \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_apex_repo.py checkout \
|
|
||||||
--repo-hashtag master \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source repos (stable)
|
|
||||||
if: ${{ inputs.pytorch_git_ref != 'nightly' }}
|
|
||||||
run: |
|
|
||||||
./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--gitrepo-origin https://github.com/ROCm/pytorch.git \
|
|
||||||
--repo-hashtag ${{ inputs.pytorch_git_ref }} \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_audio_repo.py checkout \
|
|
||||||
--require-related-commit \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_vision_repo.py checkout \
|
|
||||||
--require-related-commit \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_triton_repo.py checkout \
|
|
||||||
--no-commit-hipify
|
|
||||||
./external-builds/pytorch/pytorch_apex_repo.py checkout \
|
|
||||||
--require-related-commit \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
# determine_version.py sets optional_build_prod_arguments in
|
|
||||||
# GITHUB_ENV (--rocm-sdk-version, --version-suffix).
|
|
||||||
- name: Determine optional arguments passed to `build_prod_wheels.py`
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/determine_version.py \
|
|
||||||
--rocm-version ${{ inputs.rocm_version }}
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials for sccache
|
|
||||||
if: ${{ inputs.cache_type == 'sccache' && github.repository_owner == 'ROCm' }}
|
|
||||||
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
|
|
||||||
with:
|
|
||||||
aws-region: us-east-1
|
|
||||||
role-to-assume: arn:aws:iam::324352301041:role/therock-${{ inputs.release_type }}
|
|
||||||
# Multi-package PyTorch builds can exceed the default 1h credential
|
|
||||||
# window; the role's MaxSessionDuration must be >= this value.
|
|
||||||
role-duration-seconds: 21600
|
|
||||||
|
|
||||||
- name: Verify sccache
|
|
||||||
if: ${{ inputs.cache_type == 'sccache' }}
|
|
||||||
run: |
|
|
||||||
echo "sccache version: $(sccache --version)"
|
|
||||||
echo "SCCACHE_BUCKET=${SCCACHE_BUCKET}"
|
|
||||||
echo "SCCACHE_S3_KEY_PREFIX=${SCCACHE_S3_KEY_PREFIX}"
|
|
||||||
|
|
||||||
- name: Expand amdgpu families to gfx targets
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
targets=$(python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_families }}")
|
|
||||||
echo "Expanded families '${{ inputs.amdgpu_families }}' -> '${targets}'"
|
|
||||||
echo "targets=${targets}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Build PyTorch wheels
|
|
||||||
run: |
|
|
||||||
cache_flag=""
|
|
||||||
if [ "${{ inputs.cache_type }}" = "sccache" ]; then
|
|
||||||
cache_flag="--use-sccache"
|
|
||||||
elif [ "${{ inputs.cache_type }}" = "ccache" ]; then
|
|
||||||
cache_flag="--use-ccache"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# build_prod_wheels.py forwards each of these to pip and ignores an
|
|
||||||
# empty value, so pass both and supply whichever source applies:
|
|
||||||
# --index-url for a PEP 503 index, --find-links for a flat page.
|
|
||||||
./external-builds/pytorch/build_prod_wheels.py \
|
|
||||||
build \
|
|
||||||
--install-rocm \
|
|
||||||
--index-url="${{ inputs.rocm_package_index_url }}" \
|
|
||||||
--find-links="${{ inputs.rocm_package_find_links_url }}" \
|
|
||||||
--clean \
|
|
||||||
--output-dir ${{ env.PACKAGE_DIST_DIR }} \
|
|
||||||
${cache_flag} \
|
|
||||||
--pytorch-rocm-arch ${{ steps.expand.outputs.targets }} \
|
|
||||||
${{ env.optional_build_prod_arguments }}
|
|
||||||
|
|
||||||
- name: Report cache stats
|
|
||||||
if: ${{ !cancelled() && inputs.cache_type != 'none' }}
|
|
||||||
run: |
|
|
||||||
if [ "${{ inputs.cache_type }}" = "sccache" ]; then
|
|
||||||
echo "sccache stats:"
|
|
||||||
echo "--------------"
|
|
||||||
sccache --show-stats || true
|
|
||||||
elif [ "${{ inputs.cache_type }}" = "ccache" ]; then
|
|
||||||
echo "ccache stats:"
|
|
||||||
echo "-------------"
|
|
||||||
ccache -s -v || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Sanity check wheel
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/sanity_check_wheel.py \
|
|
||||||
${{ env.PACKAGE_DIST_DIR }}/
|
|
||||||
|
|
||||||
# The kpack wheel splitter takes the fat torch wheel and produces a
|
|
||||||
# smaller host wheel plus one device wheel per gfx target. Source-install
|
|
||||||
# from the TheRock checkout - kpack has no published wheel today.
|
|
||||||
# The outer actions/checkout skips submodules for speed, so pull in
|
|
||||||
# rocm-systems only when we actually need it.
|
|
||||||
- name: Init rocm-systems submodule
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
git submodule update --init --depth=1 rocm-systems
|
|
||||||
|
|
||||||
- name: Install kpack tooling
|
|
||||||
run: |
|
|
||||||
pip install \
|
|
||||||
-e rocm-systems/python/rocm-bootstrap \
|
|
||||||
-e rocm-systems/shared/kpack
|
|
||||||
|
|
||||||
- name: Split fat wheels (torch + torchvision)
|
|
||||||
run: |
|
|
||||||
# The splitter writes the host wheel under the same filename as
|
|
||||||
# the input, so relocate each fat wheel out of PACKAGE_DIST_DIR
|
|
||||||
# before invoking the splitter. torchaudio, triton, and apex ship
|
|
||||||
# as-is: torchaudio and triton have no fat binaries to split, and
|
|
||||||
# apex's ROCm fork ships JIT-loader shims rather than precompiled
|
|
||||||
# extensions, so its wheel is constant-size in arch count.
|
|
||||||
FAT_STAGE="${RUNNER_TEMP:-/tmp}/pytorch-fat"
|
|
||||||
mkdir -p "${FAT_STAGE}"
|
|
||||||
|
|
||||||
ROCM_SDK_VERSION="$(python -m rocm_sdk version)"
|
|
||||||
|
|
||||||
mv ${{ env.PACKAGE_DIST_DIR }}/torch-*.whl "${FAT_STAGE}/"
|
|
||||||
python -m rocm_kpack.tools.split_python_wheels \
|
|
||||||
--input "${FAT_STAGE}"/torch-*.whl \
|
|
||||||
--output-dir "${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--device-package-prefix amd-torch-device \
|
|
||||||
--overlay-root torch/ \
|
|
||||||
--wheel-type torch-fat \
|
|
||||||
--device-requires-dist "rocm-sdk-device-@GFXARCH@ == ${ROCM_SDK_VERSION}" \
|
|
||||||
--compression zstd \
|
|
||||||
-j "$(nproc)"
|
|
||||||
rm -f "${FAT_STAGE}"/torch-*.whl
|
|
||||||
|
|
||||||
mv ${{ env.PACKAGE_DIST_DIR }}/torchvision-*.whl "${FAT_STAGE}/"
|
|
||||||
python -m rocm_kpack.tools.split_python_wheels \
|
|
||||||
--input "${FAT_STAGE}"/torchvision-*.whl \
|
|
||||||
--output-dir "${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--device-package-prefix amd-torchvision-device \
|
|
||||||
--overlay-root torchvision/ \
|
|
||||||
--device-requires-dist "rocm-sdk-device-@GFXARCH@ == ${ROCM_SDK_VERSION}" \
|
|
||||||
--compression zstd \
|
|
||||||
-j "$(nproc)"
|
|
||||||
|
|
||||||
rm -rf "${FAT_STAGE}"
|
|
||||||
echo "Post-split contents of ${{ env.PACKAGE_DIST_DIR }}:"
|
|
||||||
ls -lh "${{ env.PACKAGE_DIST_DIR }}/"
|
|
||||||
|
|
||||||
# TODO(#5110): Once manifest-driven builds land, write these outputs from
|
|
||||||
# the manifest and keep wheel scanning as a validation step that the build
|
|
||||||
# produced the requested package versions.
|
|
||||||
- name: Write PyTorch package version outputs
|
|
||||||
id: pytorch-versions
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/write_torch_versions.py \
|
|
||||||
--dist-dir ${{ env.PACKAGE_DIST_DIR }}
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Upload PyTorch wheels to release bucket
|
|
||||||
id: publish-pytorch-wheels
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/publish_pytorch_to_release_bucket.py \
|
|
||||||
--source-dir="${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--release-type="${{ inputs.release_type }}"
|
|
||||||
|
|
||||||
configure_pytorch_tests:
|
|
||||||
name: Configure PyTorch Tests
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
outputs:
|
|
||||||
enabled: ${{ steps.configure.outputs.enabled }}
|
|
||||||
matrix: ${{ steps.configure.outputs.matrix }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout CI config
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ROCm/therock-ci-config
|
|
||||||
ref: main
|
|
||||||
path: ci-config
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Configure PyTorch test matrix
|
|
||||||
id: configure
|
|
||||||
env:
|
|
||||||
CI_CONFIG_PATH: ci-config
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/configure_pytorch_test_matrix.py \
|
|
||||||
--build-amdgpu-families "${{ inputs.amdgpu_families }}" \
|
|
||||||
--test-amdgpu-families "${{ inputs.test_amdgpu_families }}" \
|
|
||||||
--platform linux
|
|
||||||
|
|
||||||
test_pytorch_wheels:
|
|
||||||
name: Test | ${{ matrix.amdgpu_family }} | ${{ matrix.test_runs_on }}
|
|
||||||
if: ${{ needs.configure_pytorch_tests.outputs.enabled == 'true' }}
|
|
||||||
needs: [build_pytorch_wheels, configure_pytorch_tests]
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJSON(needs.configure_pytorch_tests.outputs.matrix) }}
|
|
||||||
uses: ./.github/workflows/test_pytorch_wheels.yml
|
|
||||||
with:
|
|
||||||
amdgpu_family: ${{ matrix.amdgpu_family }}
|
|
||||||
test_runs_on: ${{ matrix.test_runs_on }}
|
|
||||||
package_index_url: ${{ needs.build_pytorch_wheels.outputs.package_index_url }}
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
torch_version: ${{ needs.build_pytorch_wheels.outputs.torch_version }}
|
|
||||||
# TODO(#5110): pass manifest_url here and let test_pytorch_wheels.yml use
|
|
||||||
# checkout_from_manifest.py --no-hipify --no-submodules so tests use the
|
|
||||||
# exact source commit that produced the package under test.
|
|
||||||
pytorch_git_ref: ${{ inputs.pytorch_git_ref }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
# Dispatch the full PyTorch test suite for this exact build. Because this
|
|
||||||
# workflow builds a single (python_version, pytorch_git_ref), the build job's
|
|
||||||
# torch_version output is unambiguous and only this build's success gates the
|
|
||||||
# dispatch -- a failure for one ref no longer skips testing the others (#5777).
|
|
||||||
# Scoped to nightly gfx94X-dcgpu Python 3.12 builds for now.
|
|
||||||
dispatch_pytorch_wheels_full_test:
|
|
||||||
name: Dispatch PyTorch Full Test | torch ${{ inputs.pytorch_git_ref }}
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
inputs.run_full_pytorch_tests &&
|
|
||||||
inputs.release_type == 'nightly' &&
|
|
||||||
inputs.python_version == '3.12' &&
|
|
||||||
contains(inputs.amdgpu_families, 'gfx94X-dcgpu')
|
|
||||||
}}
|
|
||||||
needs: [build_pytorch_wheels]
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
contents: read
|
|
||||||
env:
|
|
||||||
PYTORCH_GIT_REF: ${{ inputs.pytorch_git_ref }}
|
|
||||||
steps:
|
|
||||||
- name: Check full test cadence
|
|
||||||
id: cadence
|
|
||||||
# Release branches test daily; the nightly branch tests weekly (Sunday).
|
|
||||||
run: |
|
|
||||||
if [ "${PYTORCH_GIT_REF}" != "nightly" ] || [ "$(date -u +%u)" = "7" ]; then
|
|
||||||
echo "dispatch=true" >> "$GITHUB_OUTPUT"
|
|
||||||
else
|
|
||||||
echo "dispatch=false" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Dispatch full PyTorch test workflow
|
|
||||||
if: ${{ steps.cadence.outputs.dispatch == 'true' }}
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: test_pytorch_wheels_full.yml
|
|
||||||
inputs: |
|
|
||||||
{ "amdgpu_family": "gfx94X-dcgpu",
|
|
||||||
"test_runs_on": "linux-gfx942-1gpu-ossci-rocm",
|
|
||||||
"test_runs_on_multi_gpu": "linux-gfx942-8gpu-ossci-rocm",
|
|
||||||
"package_index_url": "${{ needs.build_pytorch_wheels.outputs.package_index_url }}",
|
|
||||||
"python_version": "${{ inputs.python_version }}",
|
|
||||||
"torch_version": "${{ needs.build_pytorch_wheels.outputs.torch_version }}",
|
|
||||||
"pytorch_git_ref": "${{ inputs.pytorch_git_ref }}",
|
|
||||||
"pytorch_git_repo": "${{ inputs.pytorch_git_ref == 'nightly' && 'pytorch/pytorch' || 'ROCm/pytorch' }}",
|
|
||||||
"test_configs": "default distributed inductor",
|
|
||||||
"tests_to_include": "",
|
|
||||||
"repository": "${{ inputs.repository || github.repository }}",
|
|
||||||
"ref": "${{ inputs.ref }}"
|
|
||||||
}
|
|
||||||
@@ -1,329 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# CI variant of multi_arch_build_portable_linux_pytorch_wheels.yml.
|
|
||||||
#
|
|
||||||
# Key differences from the release workflow:
|
|
||||||
# - Installs ROCm packages from either a flat find-links page (CI artifacts,
|
|
||||||
# via rocm_package_find_links_url) or a PEP 503 index (via
|
|
||||||
# rocm_package_index_url); provide whichever one applies.
|
|
||||||
# - Builds torch only (no torchvision, torchaudio, or triton)
|
|
||||||
# - No S3 upload, staging, testing, or promotion — just build + sanity check
|
|
||||||
# - Uses sccache with S3-backed storage (configurable via cache_type input)
|
|
||||||
#
|
|
||||||
# TODO(#3291): Build more packages (torchvision, torchaudio, triton, etc.)
|
|
||||||
#
|
|
||||||
# Both workflows share build_prod_wheels.py for the actual build logic.
|
|
||||||
# See https://github.com/ROCm/TheRock/issues/3291 for convergence plans.
|
|
||||||
|
|
||||||
name: Build Portable Linux PyTorch Wheels (CI)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
python_version:
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout (typically "release/X.Y")
|
|
||||||
type: string
|
|
||||||
default: "release/2.11"
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type (sccache, ccache, or none)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "sccache"
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx94X-dcgpu;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake. Leave empty
|
|
||||||
for legacy callers that rely on build_prod_wheels.py's
|
|
||||||
`rocm-sdk targets` fallback.
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
kpack_split:
|
|
||||||
description: "'true' if this is a kpack-split flat build."
|
|
||||||
type: string
|
|
||||||
default: "false"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
description: "The artifact group to build (e.g. gfx94X-dcgpu, gfx120X-all)"
|
|
||||||
type: string
|
|
||||||
default: gfx94X-dcgpu
|
|
||||||
python_version:
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout (typically "release/X.Y")
|
|
||||||
type: string
|
|
||||||
default: "release/2.11"
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- none
|
|
||||||
- sccache
|
|
||||||
- ccache
|
|
||||||
default: sccache
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Build portable Linux PyTorch Wheels CI (${{ inputs.artifact_group }}, py${{ inputs.python_version }}, ${{ inputs.pytorch_git_ref }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_pytorch_wheels:
|
|
||||||
name: Build PyTorch | ${{ inputs.artifact_group }} | torch ${{ inputs.pytorch_git_ref }} | py${{ inputs.python_version }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:a382085df3ba2419b58aa9051350883a0d0b732a4bc0a4ef60458f8161bb08c6
|
|
||||||
env:
|
|
||||||
PACKAGE_DIST_DIR: ${{ github.workspace }}/output/packages/dist
|
|
||||||
RELEASE_TYPE: ci
|
|
||||||
optional_build_prod_arguments: ""
|
|
||||||
SCCACHE_BUCKET: therock-pytorch-sccache-ci
|
|
||||||
SCCACHE_REGION: us-east-1
|
|
||||||
SCCACHE_S3_KEY_PREFIX: "linux/${{ inputs.artifact_group }}/"
|
|
||||||
SCCACHE_S3_USE_SSL: "true"
|
|
||||||
SCCACHE_S3_SERVER_SIDE_ENCRYPTION: "true"
|
|
||||||
SCCACHE_IDLE_TIMEOUT: "0" # never idle-out; keeps stats accurate on long builds
|
|
||||||
SCCACHE_LOG: warn
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Configure Git Identity
|
|
||||||
run: |
|
|
||||||
git config --global user.name "therockbot"
|
|
||||||
git config --global user.email "therockbot@amd.com"
|
|
||||||
|
|
||||||
- name: Select Python version
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/python_to_cp_version.py \
|
|
||||||
--python-version ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Add selected Python version to PATH
|
|
||||||
run: |
|
|
||||||
python_dir="/opt/python/${{ env.cp_version }}"
|
|
||||||
if ! [ -x "${python_dir}/bin/python" ]; then
|
|
||||||
echo "ERROR: Could not find python: ${python_dir}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "${python_dir}/bin" >> "$GITHUB_PATH"
|
|
||||||
|
|
||||||
- name: Install python deps for CI
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/pytorch/requirements-ci.txt
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source (nightly)
|
|
||||||
if: ${{ inputs.pytorch_git_ref == 'nightly' }}
|
|
||||||
run: |
|
|
||||||
./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source (stable)
|
|
||||||
if: ${{ inputs.pytorch_git_ref != 'nightly' }}
|
|
||||||
run: |
|
|
||||||
./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--gitrepo-origin https://github.com/ROCm/pytorch.git \
|
|
||||||
--repo-hashtag ${{ inputs.pytorch_git_ref }} \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
# Note: determine_version.py sets optional_build_prod_arguments in
|
|
||||||
# GITHUB_ENV, which includes --rocm-sdk-version and --version-suffix.
|
|
||||||
- name: Determine optional arguments passed to `build_prod_wheels.py`
|
|
||||||
if: ${{ inputs.rocm_version }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/determine_version.py \
|
|
||||||
--rocm-version ${{ inputs.rocm_version }}
|
|
||||||
|
|
||||||
# sccache uses an S3 bucket reached via an OIDC-assumed IAM role, which
|
|
||||||
# fork PRs / external repos cannot assume. Compute the effective cache
|
|
||||||
# type once (downgrading sccache -> none on forks) so every sccache step
|
|
||||||
# below keys off a single decision instead of repeating fork checks.
|
|
||||||
- name: Determine cache type
|
|
||||||
id: cache
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/compute_pytorch_cache_type.py \
|
|
||||||
--cache-type "${{ inputs.cache_type }}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials for sccache
|
|
||||||
if: ${{ steps.cache.outputs.cache_type == 'sccache' }}
|
|
||||||
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
|
|
||||||
with:
|
|
||||||
aws-region: us-east-1
|
|
||||||
role-to-assume: arn:aws:iam::324352301041:role/therock-ci
|
|
||||||
# Multi-package PyTorch builds can exceed the default 1h credential
|
|
||||||
# window; the role's MaxSessionDuration must be >= this value.
|
|
||||||
role-duration-seconds: 21600
|
|
||||||
|
|
||||||
- name: Verify sccache
|
|
||||||
if: ${{ steps.cache.outputs.cache_type == 'sccache' }}
|
|
||||||
run: |
|
|
||||||
echo "sccache version: $(sccache --version)"
|
|
||||||
echo "SCCACHE_BUCKET=${SCCACHE_BUCKET}"
|
|
||||||
echo "SCCACHE_S3_KEY_PREFIX=${SCCACHE_S3_KEY_PREFIX}"
|
|
||||||
|
|
||||||
- name: Expand amdgpu families to gfx targets
|
|
||||||
if: ${{ inputs.amdgpu_families != '' }}
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
targets=$(python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_families }}")
|
|
||||||
echo "Expanded families '${{ inputs.amdgpu_families }}' -> '${targets}'"
|
|
||||||
echo "targets=${targets}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
# inputs.amdgpu_families is only populated by the multi-arch caller
|
|
||||||
# today. Legacy single-family CI (ci_linux.yml) leaves it empty and
|
|
||||||
# falls back to `rocm-sdk targets` inside build_prod_wheels.py.
|
|
||||||
# TODO(#4687): Make --pytorch-rocm-arch required here once every
|
|
||||||
# caller plumbs the value through and the fallback in
|
|
||||||
# build_prod_wheels.py::get_rocm_sdk_targets is removed.
|
|
||||||
- name: Build PyTorch wheels
|
|
||||||
run: |
|
|
||||||
cache_flag=""
|
|
||||||
if [ "${{ steps.cache.outputs.cache_type }}" = "sccache" ]; then
|
|
||||||
cache_flag="--use-sccache"
|
|
||||||
elif [ "${{ steps.cache.outputs.cache_type }}" = "ccache" ]; then
|
|
||||||
cache_flag="--use-ccache"
|
|
||||||
fi
|
|
||||||
|
|
||||||
pytorch_rocm_arch_flag=""
|
|
||||||
if [ -n "${{ steps.expand.outputs.targets }}" ]; then
|
|
||||||
pytorch_rocm_arch_flag="--pytorch-rocm-arch ${{ steps.expand.outputs.targets }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# build_prod_wheels.py forwards each of these to pip and ignores an
|
|
||||||
# empty value, so pass both and supply whichever source applies:
|
|
||||||
# --index-url for a PEP 503 index, --find-links for a flat page.
|
|
||||||
./external-builds/pytorch/build_prod_wheels.py \
|
|
||||||
build \
|
|
||||||
--install-rocm \
|
|
||||||
--index-url="${{ inputs.rocm_package_index_url }}" \
|
|
||||||
--find-links="${{ inputs.rocm_package_find_links_url }}" \
|
|
||||||
--clean \
|
|
||||||
--output-dir ${{ env.PACKAGE_DIST_DIR }} \
|
|
||||||
${cache_flag} \
|
|
||||||
${pytorch_rocm_arch_flag} \
|
|
||||||
${{ env.optional_build_prod_arguments }}
|
|
||||||
|
|
||||||
- name: Report cache stats
|
|
||||||
if: ${{ !cancelled() && steps.cache.outputs.cache_type != 'none' }}
|
|
||||||
run: |
|
|
||||||
if [ "${{ steps.cache.outputs.cache_type }}" = "sccache" ]; then
|
|
||||||
echo "sccache stats:"
|
|
||||||
echo "--------------"
|
|
||||||
sccache --show-stats || true
|
|
||||||
elif [ "${{ steps.cache.outputs.cache_type }}" = "ccache" ]; then
|
|
||||||
echo "ccache stats:"
|
|
||||||
echo "-------------"
|
|
||||||
ccache -s -v || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Sanity check wheel
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/sanity_check_wheel.py \
|
|
||||||
${{ env.PACKAGE_DIST_DIR }}/
|
|
||||||
|
|
||||||
# The kpack wheel splitter takes the fat torch wheel and produces a
|
|
||||||
# smaller host wheel plus one device wheel per gfx target. Source-install
|
|
||||||
# from the TheRock checkout — kpack has no published wheel today.
|
|
||||||
# The outer actions/checkout skips submodules for speed, so pull in
|
|
||||||
# rocm-systems only when we actually need it.
|
|
||||||
- name: Init rocm-systems submodule
|
|
||||||
if: ${{ inputs.kpack_split == 'true' }}
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
git submodule update --init --depth=1 rocm-systems
|
|
||||||
|
|
||||||
- name: Install kpack tooling
|
|
||||||
if: ${{ inputs.kpack_split == 'true' }}
|
|
||||||
run: |
|
|
||||||
pip install \
|
|
||||||
-e rocm-systems/python/rocm-bootstrap \
|
|
||||||
-e rocm-systems/shared/kpack
|
|
||||||
|
|
||||||
- name: Split PyTorch fat wheel
|
|
||||||
if: ${{ inputs.kpack_split == 'true' }}
|
|
||||||
run: |
|
|
||||||
# The splitter writes the host wheel under the same filename as the
|
|
||||||
# input, so relocate the fat wheel out of PACKAGE_DIST_DIR first.
|
|
||||||
FAT_STAGE="${RUNNER_TEMP:-/tmp}/pytorch-fat"
|
|
||||||
mkdir -p "${FAT_STAGE}"
|
|
||||||
mv ${{ env.PACKAGE_DIST_DIR }}/torch-*.whl "${FAT_STAGE}/"
|
|
||||||
|
|
||||||
ROCM_SDK_VERSION="$(python -m rocm_sdk version)"
|
|
||||||
|
|
||||||
python -m rocm_kpack.tools.split_python_wheels \
|
|
||||||
--input "${FAT_STAGE}"/torch-*.whl \
|
|
||||||
--output-dir "${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--device-package-prefix amd-torch-device \
|
|
||||||
--overlay-root torch/ \
|
|
||||||
--wheel-type torch-fat \
|
|
||||||
--device-requires-dist "rocm-sdk-device-@GFXARCH@ == ${ROCM_SDK_VERSION}" \
|
|
||||||
--compression zstd \
|
|
||||||
-j "$(nproc)"
|
|
||||||
|
|
||||||
rm -rf "${FAT_STAGE}"
|
|
||||||
echo "Post-split contents of ${{ env.PACKAGE_DIST_DIR }}:"
|
|
||||||
ls -lh "${{ env.PACKAGE_DIST_DIR }}/"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ci
|
|
||||||
|
|
||||||
# Appends to the same therock-ci-artifacts/<run>-linux/python/ prefix
|
|
||||||
# that the ROCm python job already populated — one find-links URL
|
|
||||||
# covers the whole SDK + PyTorch stack.
|
|
||||||
- name: Upload PyTorch wheels
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/upload_python_packages.py \
|
|
||||||
--input-packages-dir="${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--multiarch
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Build Multi-Arch Tarballs
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_run_id:
|
|
||||||
description: "Run ID to fetch artifacts from (defaults to current run)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
artifact_github_repo:
|
|
||||||
description: "GitHub repository for artifact_run_id"
|
|
||||||
type: string
|
|
||||||
default: ROCm/TheRock
|
|
||||||
dist_amdgpu_families:
|
|
||||||
description: "Semicolon-separated list of GPU families (e.g. 'gfx94X-dcgpu;gfx110X-all')"
|
|
||||||
type: string
|
|
||||||
platform:
|
|
||||||
type: choice
|
|
||||||
description: "Platform to fetch artifacts for"
|
|
||||||
options:
|
|
||||||
- linux
|
|
||||||
- windows
|
|
||||||
default: "linux"
|
|
||||||
package_version:
|
|
||||||
description: "ROCm package version string (e.g. '7.13.0.dev0+abc123')"
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci" or "dev"'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- ci
|
|
||||||
- dev
|
|
||||||
default: ci
|
|
||||||
include_test_tarballs:
|
|
||||||
description: "Also build -tests tarballs that include test artifacts"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
artifact_github_repo:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
dist_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
platform:
|
|
||||||
type: string
|
|
||||||
default: "linux"
|
|
||||||
package_version:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
release_type:
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
include_test_tarballs:
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
outputs:
|
|
||||||
tarball_urls:
|
|
||||||
description: Tarball URLs keyed by family
|
|
||||||
value: ${{ jobs.build_tarballs.outputs.tarball_urls }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Build Multi-Arch Tarballs (${{ inputs.dist_amdgpu_families }}, ${{ inputs.platform }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_tarballs:
|
|
||||||
name: Build Tarballs
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
container:
|
|
||||||
image: python:3.12-slim
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
outputs:
|
|
||||||
tarball_urls: ${{ steps.upload.outputs.tarball_urls }}
|
|
||||||
env:
|
|
||||||
ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id != '' && inputs.artifact_run_id || github.run_id }}"
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || github.ref_name }}
|
|
||||||
|
|
||||||
- name: Install Python requirements
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Build tarballs
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
EXTRA_ARGS=()
|
|
||||||
if [[ "${{ inputs.include_test_tarballs }}" == "true" ]]; then
|
|
||||||
EXTRA_ARGS+=(--include-test-tarballs)
|
|
||||||
fi
|
|
||||||
|
|
||||||
python build_tools/build_tarballs.py \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--run-github-repo="${{ inputs.artifact_github_repo }}" \
|
|
||||||
--dist-amdgpu-families="${{ inputs.dist_amdgpu_families }}" \
|
|
||||||
--platform="${{ inputs.platform }}" \
|
|
||||||
--package-version="${{ inputs.package_version }}" \
|
|
||||||
--output-dir="${{ github.workspace }}/tarballs" \
|
|
||||||
"${EXTRA_ARGS[@]}"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Upload tarballs
|
|
||||||
id: upload
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/upload_tarballs.py \
|
|
||||||
--input-tarballs-dir="${{ github.workspace }}/tarballs" \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--platform="${{ inputs.platform }}" \
|
|
||||||
--release-type="${{ inputs.release_type }}"
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Multi-Arch Build - Sharded Pipeline for Windows
|
|
||||||
#
|
|
||||||
# This workflow builds TheRock in stages:
|
|
||||||
# 1. compiler-runtime (generic) - sysdeps, base, compiler, runtimes
|
|
||||||
# 2. runtime-tests (generic) - hip-tests (parallel to math-libs)
|
|
||||||
# 3. math-libs (per-arch) - BLAS, FFT, etc.
|
|
||||||
# 4. debug-tools (generic) - amd-dbgapi (rocgdb eventually).
|
|
||||||
#
|
|
||||||
# Stages disabled on Windows: comm-libs, dctools-core, profiler-apps, media
|
|
||||||
# (see BUILD_TOPOLOGY.toml disable_platforms)
|
|
||||||
#
|
|
||||||
# Artifacts flow between stages via S3 using the artifact_manager.py tool.
|
|
||||||
|
|
||||||
name: Multi-Arch Build (Windows)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
matrix_per_family_json:
|
|
||||||
type: string
|
|
||||||
description: "JSON array of {amdgpu_family, test-runs-on} objects for per-arch stages"
|
|
||||||
dist_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
description: "Semicolon-separated list of all GPU families for dist targets"
|
|
||||||
build_variant_label:
|
|
||||||
type: string
|
|
||||||
build_variant_cmake_preset:
|
|
||||||
type: string
|
|
||||||
build_variant_suffix:
|
|
||||||
type: string
|
|
||||||
prebuilt_stages:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Comma-separated build stages to skip (artifacts already copied by the orchestrator)"
|
|
||||||
build_runs_on:
|
|
||||||
type: string
|
|
||||||
default: "azure-windows-scale-rocm"
|
|
||||||
description: "Build runner label (selected by configure script with weighted distribution)"
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease"'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (repository, ref, checkout_path, source_package)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: compiler-runtime (generic)
|
|
||||||
# ==========================================================================
|
|
||||||
compiler-runtime:
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'compiler-runtime') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: compiler-runtime
|
|
||||||
stage_display_name: "Stage - Compiler Runtime"
|
|
||||||
timeout_minutes: 480 # 8 hours (compiler is big)
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: runtime-tests (generic, parallel to math-libs)
|
|
||||||
# ==========================================================================
|
|
||||||
runtime-tests:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'runtime-tests') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: runtime-tests
|
|
||||||
stage_display_name: "Stage - Runtime Tests"
|
|
||||||
timeout_minutes: 120 # 2 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: math-libs (per-arch)
|
|
||||||
# ==========================================================================
|
|
||||||
math-libs:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'math-libs') }}
|
|
||||||
strategy:
|
|
||||||
# `fail-fast: false` lets all families complete even if one fails.
|
|
||||||
# This is useful for CI (to see all failures at once), but for releases
|
|
||||||
# this risks publishing incomplete packages. Release pipelines may want
|
|
||||||
# to either set `fail-fast: true` or add a validation step that blocks
|
|
||||||
# promotion unless all jobs succeeded.
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
family_info: ${{ fromJSON(inputs.matrix_per_family_json) }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: math-libs
|
|
||||||
stage_display_name: "Stage - Math Libs (${{ matrix.family_info.amdgpu_family }})"
|
|
||||||
timeout_minutes: 480 # 8 hours
|
|
||||||
amdgpu_family: ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# ==========================================================================
|
|
||||||
# STAGE: debug-tools (generic, parallel to math-libs)
|
|
||||||
# ==========================================================================
|
|
||||||
debug-tools:
|
|
||||||
needs: compiler-runtime
|
|
||||||
if: ${{ !cancelled() && !failure() && !contains(inputs.prebuilt_stages, 'debug-tools') }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows_artifacts.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
stage_name: debug-tools
|
|
||||||
stage_display_name: "Stage - Debug Tools"
|
|
||||||
timeout_minutes: 180 # 3 hours
|
|
||||||
dist_amdgpu_families: ${{ inputs.dist_amdgpu_families }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
build_variant_cmake_preset: ${{ inputs.build_variant_cmake_preset }}
|
|
||||||
build_runs_on: ${{ inputs.build_runs_on }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
@@ -1,247 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Reusable Workflow: Build Stage Artifacts
|
|
||||||
#
|
|
||||||
# This workflow builds TheRock stage artifacts for all stages.
|
|
||||||
# Handles both generic stages (compiler-runtime, etc.) and
|
|
||||||
# per-arch stages (math-libs) using conditional logic.
|
|
||||||
#
|
|
||||||
# Artifacts flow between stages via S3 using the artifact_manager.py tool.
|
|
||||||
#
|
|
||||||
# TODO: When kpack splitting is permanently enabled, change fetch commands to use
|
|
||||||
# --generic-only instead of --amdgpu-families for efficiency. Subsequent build
|
|
||||||
# stages only need generic (host) artifacts; device-specific kpacks are not
|
|
||||||
# needed until final packaging.
|
|
||||||
|
|
||||||
name: Build Stage Artifacts
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
stage_name:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Stage name (e.g., compiler-runtime, math-libs)"
|
|
||||||
stage_display_name:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Human-readable display name for the job"
|
|
||||||
timeout_minutes:
|
|
||||||
type: number
|
|
||||||
required: true
|
|
||||||
description: "Job timeout in minutes"
|
|
||||||
amdgpu_family:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
description: "GPU family for per-arch stages (empty for generic stages)"
|
|
||||||
dist_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Semicolon-separated list of all GPU families for dist targets"
|
|
||||||
build_variant_cmake_preset:
|
|
||||||
type: string
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "ROCm package version string"
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; controls artifact bucket and IAM role'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
build_runs_on:
|
|
||||||
description: "Build runner label (selected by configure script with weighted distribution)"
|
|
||||||
type: string
|
|
||||||
default: "azure-windows-scale-rocm"
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (generated by detect_external_repo_config.py)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_stage:
|
|
||||||
name: ${{ inputs.stage_display_name }}
|
|
||||||
runs-on: ${{ inputs.build_runs_on }}
|
|
||||||
timeout-minutes: ${{ inputs.timeout_minutes }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
STAGE_NAME: ${{ inputs.stage_name }}
|
|
||||||
AMDGPU_FAMILIES: ${{ inputs.amdgpu_family }}
|
|
||||||
BUILD_DIR: B:\build
|
|
||||||
CCACHE_CONFIGPATH: ${{ github.workspace }}/.ccache/ccache.conf
|
|
||||||
CACHE_DIR: ${{ github.workspace }}/.cache
|
|
||||||
TEATIME_FORCE_INTERACTIVE: 0
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
EXTERNAL_FETCH_SOURCES_ARGS: ${{ inputs.external_repo_config != '' && fromJSON(inputs.external_repo_config).fetch_sources_args || '' }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# Enable git longpaths before checkout (needed for external repos with long paths)
|
|
||||||
- name: Enable git longpaths
|
|
||||||
if: ${{ inputs.external_repo_config != '' }}
|
|
||||||
run: git config --system core.longpaths true
|
|
||||||
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout external repository
|
|
||||||
if: ${{ inputs.external_repo_config != '' }}
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ fromJSON(inputs.external_repo_config).repository }}
|
|
||||||
ref: ${{ fromJSON(inputs.external_repo_config).ref }}
|
|
||||||
path: ${{ fromJSON(inputs.external_repo_config).checkout_path }}
|
|
||||||
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.12"
|
|
||||||
|
|
||||||
- name: Install python deps
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Install requirements
|
|
||||||
run: |
|
|
||||||
choco source disable -n=chocolatey
|
|
||||||
choco source add -n=internal -s http://nexus-service.nexus-ns.svc.cluster.local:8081/repository/choco-group/ --priority=1
|
|
||||||
choco install --no-progress -y ccache
|
|
||||||
# ninja pinned due to a bug in the 1.13.0 release:
|
|
||||||
# https://github.com/ninja-build/ninja/issues/2616
|
|
||||||
choco install --no-progress -y ninja --version 1.12.1
|
|
||||||
choco install --no-progress -y strawberryperl
|
|
||||||
echo "$PATH;C:\Strawberry\c\bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- uses: iterative/setup-dvc@6c05772f52d19792ed73aedb6c2bf65ec92adebb # v3.0.0
|
|
||||||
with:
|
|
||||||
version: '3.62.0'
|
|
||||||
|
|
||||||
# After other installs, so MSVC gets priority in the PATH.
|
|
||||||
- name: Configure MSVC
|
|
||||||
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
|
|
||||||
|
|
||||||
- name: Adjust git config
|
|
||||||
run: |
|
|
||||||
git config --global core.symlinks true
|
|
||||||
git config --global core.longpaths true
|
|
||||||
git config fetch.parallel 10
|
|
||||||
|
|
||||||
- name: Runner health status
|
|
||||||
run: |
|
|
||||||
python build_tools/health_status.py
|
|
||||||
|
|
||||||
- name: Setup ccache
|
|
||||||
run: |
|
|
||||||
python ./build_tools/setup_ccache.py \
|
|
||||||
--release-type "${{ inputs.release_type }}" \
|
|
||||||
--dir "$(dirname $CCACHE_CONFIGPATH)" \
|
|
||||||
--local-path "$CACHE_DIR/ccache" \
|
|
||||||
--log-dir "${BUILD_DIR}/logs/ccache"
|
|
||||||
|
|
||||||
# Note: no AWS credentials should be needed here since our CI buckets
|
|
||||||
# all currently have public read access.
|
|
||||||
- name: Fetch inbound artifacts
|
|
||||||
run: |
|
|
||||||
python build_tools/artifact_manager.py fetch \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_family }}" \
|
|
||||||
--output-dir="${BUILD_DIR}" \
|
|
||||||
--bootstrap
|
|
||||||
|
|
||||||
- name: Fetch sources
|
|
||||||
timeout-minutes: 30
|
|
||||||
run: python build_tools/fetch_sources.py --stage ${STAGE_NAME} --jobs 12 --depth 1 ${EXTERNAL_FETCH_SOURCES_ARGS}
|
|
||||||
|
|
||||||
- name: Get stage configuration
|
|
||||||
id: stage_config
|
|
||||||
run: |
|
|
||||||
python build_tools/configure_stage.py \
|
|
||||||
--stage=${STAGE_NAME} \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_family }}" \
|
|
||||||
--dist-amdgpu-families="${{ inputs.dist_amdgpu_families }}" \
|
|
||||||
--gha-output
|
|
||||||
|
|
||||||
- name: Install stage python deps
|
|
||||||
if: ${{ steps.stage_config.outputs.pip_install_cmd }}
|
|
||||||
run: pip install ${{ steps.stage_config.outputs.pip_install_cmd }}
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
run: |
|
|
||||||
cmake -B "${BUILD_DIR}" -S . -GNinja \
|
|
||||||
--preset=${{ inputs.build_variant_cmake_preset }} \
|
|
||||||
-DTHEROCK_PACKAGE_VERSION=${{ inputs.rocm_package_version }} \
|
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
|
||||||
${{ inputs.external_repo_config != '' && format('-DTHEROCK_{0}_SOURCE_DIR={1}', fromJSON(inputs.external_repo_config).source_package, fromJSON(inputs.external_repo_config).checkout_path) || '' }} \
|
|
||||||
${{ inputs.external_repo_config != '' && fromJSON(inputs.external_repo_config).extra_cmake_options || '' }} \
|
|
||||||
${{ steps.stage_config.outputs.cmake_args }}
|
|
||||||
|
|
||||||
- name: Build stage
|
|
||||||
run: |
|
|
||||||
cmake --build "${BUILD_DIR}" --target stage-${STAGE_NAME} therock-artifacts -- -k 0
|
|
||||||
|
|
||||||
- name: Run build tests (Comgr, blocking)
|
|
||||||
if: ${{ !cancelled() && inputs.stage_name == 'compiler-runtime' }}
|
|
||||||
env:
|
|
||||||
TEATIME_FORCE_INTERACTIVE: 1
|
|
||||||
run: |
|
|
||||||
cmake --build "${BUILD_DIR}" --target therock-build-tests -- -k 0
|
|
||||||
|
|
||||||
- name: Report
|
|
||||||
if: ${{ !cancelled() }}
|
|
||||||
run: |
|
|
||||||
echo "CCache Stats:"
|
|
||||||
ccache -s -v
|
|
||||||
echo "Artifacts:"
|
|
||||||
ls -lh "${BUILD_DIR}"/artifacts/*.tar.xz 2>/dev/null || echo "No artifacts found"
|
|
||||||
|
|
||||||
# TODO(scotttodd): enable once these tests pass
|
|
||||||
# therock-examples-cpp-sdk-user can't find hipsparselt-config.cmake
|
|
||||||
# - name: Test Packaging
|
|
||||||
# run: |
|
|
||||||
# ctest --test-dir ${BUILD_DIR} --output-on-failure
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
if: ${{ always() }}
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
# TODO(#3336): Attempt upload `always()`?
|
|
||||||
# * If some part of the build failed, partial artifacts may be useful for debugging.
|
|
||||||
# * This script fails if `build_dir / "artifacts"` does not exist. That's useful
|
|
||||||
# if the build succeeded but did not produce artifacts. That's _not_ useful
|
|
||||||
# if the workflow failed or was cancelled before the build even started though.
|
|
||||||
- name: Push stage artifacts
|
|
||||||
run: |
|
|
||||||
python build_tools/artifact_manager.py push \
|
|
||||||
--run-id ${{ github.run_id }} \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--build-dir="${BUILD_DIR}"
|
|
||||||
|
|
||||||
- name: Upload stage logs
|
|
||||||
if: ${{ always() }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/post_stage_upload.py \
|
|
||||||
--run-id=${{ github.run_id }} \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--build-dir="${BUILD_DIR}" \
|
|
||||||
--amdgpu-family="${AMDGPU_FAMILIES}"
|
|
||||||
@@ -1,485 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Reusable multi-arch PyTorch build workflow for Windows.
|
|
||||||
#
|
|
||||||
# Built shape:
|
|
||||||
# - One fat build_prod_wheels.py invocation for one python_version and
|
|
||||||
# pytorch_git_ref, covering all gfx targets expanded from the
|
|
||||||
# inputs.amdgpu_families set. Builds torch, torchaudio, and torchvision
|
|
||||||
# in a single invocation.
|
|
||||||
# - kpack-split the fat torch and torchvision wheels into host wheels
|
|
||||||
# plus per-gfx amd-torch-device-* / amd-torchvision-device-* wheels.
|
|
||||||
# other packages ship as-is (nothing to split).
|
|
||||||
# - Upload the result to s3://therock-{release_type}-python/v4/whl/
|
|
||||||
# via publish_pytorch_to_release_bucket.py (pip-compatible index generation
|
|
||||||
# happens server-side).
|
|
||||||
#
|
|
||||||
# For convergence with CI and testing plans see:
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3332
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3291
|
|
||||||
|
|
||||||
name: Multi-Arch Build Windows PyTorch Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx110X-all;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
test_amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated AMD GPU families to run tests for (e.g.
|
|
||||||
'gfx120X-all'). Use 'auto' to test built families, or 'none' to skip
|
|
||||||
tests.
|
|
||||||
type: string
|
|
||||||
default: "auto"
|
|
||||||
python_version:
|
|
||||||
description: Python version to build wheels for.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout. Typically "nightly" or "release/X.Y".
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; selects the S3 bucket.'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type ('none', 'sccache', or 'ccache')"
|
|
||||||
type: string
|
|
||||||
default: "sccache"
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx110X-all;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
test_amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated AMD GPU families to run tests for (e.g.
|
|
||||||
'gfx120X-all'). Use 'auto' to test built families, or 'none' to skip
|
|
||||||
tests.
|
|
||||||
type: string
|
|
||||||
default: "auto"
|
|
||||||
python_version:
|
|
||||||
description: Python version to build wheels for (for example, "3.12").
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout (for example, "release/2.12").
|
|
||||||
type: string
|
|
||||||
default: "release/2.12"
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- none
|
|
||||||
- sccache
|
|
||||||
- ccache
|
|
||||||
default: sccache
|
|
||||||
|
|
||||||
run-name: Build Multi-Arch Windows PyTorch Wheels (${{ inputs.release_type }}, ${{ inputs.python_version }}, ${{ inputs.pytorch_git_ref }})
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_pytorch_wheels:
|
|
||||||
name: Build | py ${{ inputs.python_version }} | torch ${{ inputs.pytorch_git_ref }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'azure-windows-scale-rocm' || 'windows-2022' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
env:
|
|
||||||
CHECKOUT_ROOT: B:/src
|
|
||||||
# Note the \ here instead of /. This should be used from 'cmd' not 'bash'!
|
|
||||||
PACKAGE_DIST_DIR: ${{ github.workspace }}\output\packages\dist
|
|
||||||
optional_build_prod_arguments: ""
|
|
||||||
SCCACHE_BUCKET: "therock-pytorch-sccache-${{ inputs.release_type }}"
|
|
||||||
SCCACHE_REGION: us-east-1
|
|
||||||
SCCACHE_S3_KEY_PREFIX: "windows/multiarch/v1/"
|
|
||||||
SCCACHE_S3_USE_SSL: "true"
|
|
||||||
SCCACHE_S3_SERVER_SIDE_ENCRYPTION: "true"
|
|
||||||
SCCACHE_IDLE_TIMEOUT: "0" # never idle-out; keeps stats accurate on long builds
|
|
||||||
SCCACHE_LOG: warn
|
|
||||||
outputs:
|
|
||||||
torch_version: ${{ steps.pytorch-versions.outputs.torch_version }}
|
|
||||||
torchaudio_version: ${{ steps.pytorch-versions.outputs.torchaudio_version }}
|
|
||||||
torchvision_version: ${{ steps.pytorch-versions.outputs.torchvision_version }}
|
|
||||||
package_index_url: ${{ steps.publish-pytorch-wheels.outputs.package_index_url }}
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
# Note: there are mixed uses of 'bash' (this default) and 'cmd' below
|
|
||||||
shell: bash
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Configure Git Identity
|
|
||||||
run: |
|
|
||||||
git config --global user.name "therockbot"
|
|
||||||
git config --global user.email "therockbot@amd.com"
|
|
||||||
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Select Python version
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/python_to_cp_version.py \
|
|
||||||
--python-version ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
# TODO(amd-justchen): share with build_windows_artifacts.yml. Include in VM image? Dockerfile?
|
|
||||||
- name: Install requirements
|
|
||||||
run: |
|
|
||||||
choco source disable -n=chocolatey
|
|
||||||
choco source add -n=internal -s http://nexus-service.nexus-ns.svc.cluster.local:8081/repository/choco-group/ --priority=1
|
|
||||||
choco install --no-progress -y ninja --version 1.13.1
|
|
||||||
|
|
||||||
# Build a fixed version of libuv from source, no matter the pytorch ref.
|
|
||||||
# gloo requires >= 1.26; v1.47.0 matches upstream's source build.
|
|
||||||
# https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/windows/arm64/bootstrap_libuv.bat
|
|
||||||
- name: Build libuv from source for GLOO
|
|
||||||
run: |
|
|
||||||
git clone https://github.com/libuv/libuv.git -b v1.47.0 --depth 1
|
|
||||||
cmake -S libuv -B libuv/build -DBUILD_TESTING=OFF
|
|
||||||
cmake --build libuv/build --config Release
|
|
||||||
cmake --install libuv/build --prefix "${{ github.workspace }}/libuv-install"
|
|
||||||
echo "libuv_ROOT=${{ github.workspace }}/libuv-install" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Install sccache
|
|
||||||
if: ${{ inputs.cache_type == 'sccache' }}
|
|
||||||
run: |
|
|
||||||
choco install --no-progress -y sccache
|
|
||||||
echo "sccache version: $(sccache --version)"
|
|
||||||
|
|
||||||
# After other installs, so MSVC gets priority in the PATH.
|
|
||||||
- name: Configure MSVC
|
|
||||||
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
|
|
||||||
|
|
||||||
- name: Install python deps for CI
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/pytorch/requirements-ci.txt
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source repos (nightly)
|
|
||||||
if: ${{ inputs.pytorch_git_ref == 'nightly' }}
|
|
||||||
run: |
|
|
||||||
git config --global core.longpaths true
|
|
||||||
python ./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
python ./external-builds/pytorch/pytorch_audio_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch_audio \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
python ./external-builds/pytorch/pytorch_vision_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch_vision \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source repos (stable)
|
|
||||||
if: ${{ inputs.pytorch_git_ref != 'nightly' }}
|
|
||||||
run: |
|
|
||||||
git config --global core.longpaths true
|
|
||||||
python ./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch \
|
|
||||||
--gitrepo-origin https://github.com/ROCm/pytorch.git \
|
|
||||||
--repo-hashtag ${{ inputs.pytorch_git_ref }} \
|
|
||||||
--no-commit-hipify
|
|
||||||
python ./external-builds/pytorch/pytorch_audio_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch_audio \
|
|
||||||
--torch-dir ${{ env.CHECKOUT_ROOT }}/pytorch \
|
|
||||||
--require-related-commit \
|
|
||||||
--no-commit-hipify
|
|
||||||
python ./external-builds/pytorch/pytorch_vision_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch_vision \
|
|
||||||
--torch-dir ${{ env.CHECKOUT_ROOT }}/pytorch \
|
|
||||||
--require-related-commit \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
# determine_version.py sets optional_build_prod_arguments in
|
|
||||||
# GITHUB_ENV (--rocm-sdk-version, --version-suffix).
|
|
||||||
- name: Determine optional arguments passed to `build_prod_wheels.py`
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/determine_version.py \
|
|
||||||
--rocm-version ${{ inputs.rocm_version }}
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials for sccache
|
|
||||||
if: ${{ inputs.cache_type == 'sccache' && github.repository_owner == 'ROCm' }}
|
|
||||||
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
|
|
||||||
with:
|
|
||||||
aws-region: us-east-1
|
|
||||||
role-to-assume: arn:aws:iam::324352301041:role/therock-${{ inputs.release_type }}
|
|
||||||
# Multi-package PyTorch builds can exceed the default 1h credential
|
|
||||||
# window; the role's MaxSessionDuration must be >= this value.
|
|
||||||
role-duration-seconds: 21600
|
|
||||||
special-characters-workaround: true
|
|
||||||
|
|
||||||
- name: Verify sccache
|
|
||||||
if: ${{ inputs.cache_type == 'sccache' }}
|
|
||||||
run: |
|
|
||||||
echo "sccache version: $(sccache --version)"
|
|
||||||
echo "SCCACHE_BUCKET=${SCCACHE_BUCKET}"
|
|
||||||
echo "SCCACHE_S3_KEY_PREFIX=${SCCACHE_S3_KEY_PREFIX}"
|
|
||||||
|
|
||||||
- name: Expand amdgpu families to gfx targets
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
targets=$(python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_families }}")
|
|
||||||
echo "Expanded families '${{ inputs.amdgpu_families }}' -> '${targets}'"
|
|
||||||
echo "targets=${targets}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
# Using 'cmd' here is load bearing! There are configuration issues when
|
|
||||||
# run under 'bash': https://github.com/ROCm/TheRock/issues/827#issuecomment-3025858800
|
|
||||||
- name: Build PyTorch wheels
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
set "CACHE_FLAG="
|
|
||||||
if "${{ inputs.cache_type }}"=="sccache" set "CACHE_FLAG=--use-sccache"
|
|
||||||
if "${{ inputs.cache_type }}"=="ccache" set "CACHE_FLAG=--use-ccache"
|
|
||||||
|
|
||||||
echo "Building PyTorch wheels for ${{ inputs.amdgpu_families }} (cache: ${{ inputs.cache_type }})"
|
|
||||||
python ./external-builds/pytorch/build_prod_wheels.py ^
|
|
||||||
build ^
|
|
||||||
--install-rocm ^
|
|
||||||
--index-url="${{ inputs.rocm_package_index_url }}" ^
|
|
||||||
--find-links="${{ inputs.rocm_package_find_links_url }}" ^
|
|
||||||
--root-checkout-dir ${{ env.CHECKOUT_ROOT }} ^
|
|
||||||
--enable-pytorch-flash-attention-windows ^
|
|
||||||
--clean ^
|
|
||||||
--output-dir ${{ env.PACKAGE_DIST_DIR }} ^
|
|
||||||
%CACHE_FLAG% ^
|
|
||||||
--pytorch-rocm-arch ${{ steps.expand.outputs.targets }} ^
|
|
||||||
${{ env.optional_build_prod_arguments }}
|
|
||||||
|
|
||||||
- name: Report cache stats
|
|
||||||
if: ${{ !cancelled() && inputs.cache_type != 'none' }}
|
|
||||||
run: |
|
|
||||||
if [ "${{ inputs.cache_type }}" = "sccache" ]; then
|
|
||||||
echo "sccache stats:"
|
|
||||||
echo "--------------"
|
|
||||||
sccache --show-stats || true
|
|
||||||
elif [ "${{ inputs.cache_type }}" = "ccache" ]; then
|
|
||||||
echo "ccache stats:"
|
|
||||||
echo "-------------"
|
|
||||||
ccache -s -v || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Sanity check wheel
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/sanity_check_wheel.py ${{ env.PACKAGE_DIST_DIR }}
|
|
||||||
|
|
||||||
# The kpack wheel splitter takes the fat torch wheel and produces a
|
|
||||||
# smaller host wheel plus one device wheel per gfx target. Source-install
|
|
||||||
# from the TheRock checkout - kpack has no published wheel today.
|
|
||||||
# The outer actions/checkout skips submodules for speed, so pull in
|
|
||||||
# rocm-systems only when we actually need it.
|
|
||||||
- name: Init rocm-systems submodule
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
git submodule update --init --depth=1 rocm-systems
|
|
||||||
|
|
||||||
- name: Install kpack tooling
|
|
||||||
run: |
|
|
||||||
pip install \
|
|
||||||
-e rocm-systems/python/rocm-bootstrap \
|
|
||||||
-e rocm-systems/shared/kpack
|
|
||||||
|
|
||||||
- name: Split fat wheels (torch + torchvision)
|
|
||||||
run: |
|
|
||||||
DIST_DIR="$(cygpath -u "${{ env.PACKAGE_DIST_DIR }}")"
|
|
||||||
|
|
||||||
# LLVM binaries ship inside the already-installed rocm-sdk-devel.
|
|
||||||
ROCM_SDK_ROOT="$(cygpath -u "$(python -m rocm_sdk path --root)")"
|
|
||||||
LLVM_BIN="${ROCM_SDK_ROOT}/lib/llvm/bin"
|
|
||||||
if [ ! -d "${LLVM_BIN}" ]; then
|
|
||||||
echo "ERROR: LLVM bin dir not found: ${LLVM_BIN}" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The kpack Toolchain strictly looks up "objcopy" and "readelf" on
|
|
||||||
# PATH. On Windows, ROCm ships only llvm-objcopy.exe /
|
|
||||||
# llvm-readelf.exe, so stage copies under the unprefixed names.
|
|
||||||
# TODO: drop this shim once rocm-kpack's Toolchain adds llvm-*
|
|
||||||
# fallbacks for objcopy/readelf (parallels its existing objdump
|
|
||||||
# pattern). See https://github.com/ROCm/rocm-systems/issues/5506.
|
|
||||||
SHIMS="$(cygpath -u "${RUNNER_TEMP}")/kpack-shims"
|
|
||||||
mkdir -p "${SHIMS}"
|
|
||||||
cp "${LLVM_BIN}/llvm-objcopy.exe" "${SHIMS}/objcopy.exe"
|
|
||||||
cp "${LLVM_BIN}/llvm-readelf.exe" "${SHIMS}/readelf.exe"
|
|
||||||
|
|
||||||
# Prepend shims + LLVM bin so clang-offload-bundler.exe and the
|
|
||||||
# llvm-objdump fallback are also resolvable.
|
|
||||||
export PATH="${SHIMS}:${LLVM_BIN}:${PATH}"
|
|
||||||
|
|
||||||
# The splitter writes the host wheel under the same filename as the
|
|
||||||
# input, so relocate each fat wheel out of PACKAGE_DIST_DIR before
|
|
||||||
# invoking the splitter. torchaudio ships as-is.
|
|
||||||
FAT_STAGE="$(cygpath -u "${RUNNER_TEMP}")/pytorch-fat"
|
|
||||||
mkdir -p "${FAT_STAGE}"
|
|
||||||
|
|
||||||
ROCM_SDK_VERSION="$(python -m rocm_sdk version)"
|
|
||||||
|
|
||||||
mv "${DIST_DIR}"/torch-*.whl "${FAT_STAGE}/"
|
|
||||||
python -m rocm_kpack.tools.split_python_wheels \
|
|
||||||
--input "${FAT_STAGE}"/torch-*.whl \
|
|
||||||
--output-dir "${DIST_DIR}" \
|
|
||||||
--device-package-prefix amd-torch-device \
|
|
||||||
--overlay-root torch/ \
|
|
||||||
--wheel-type torch-fat \
|
|
||||||
--device-requires-dist "rocm-sdk-device-@GFXARCH@ == ${ROCM_SDK_VERSION}" \
|
|
||||||
--compression zstd \
|
|
||||||
-j 32
|
|
||||||
rm -f "${FAT_STAGE}"/torch-*.whl
|
|
||||||
|
|
||||||
mv "${DIST_DIR}"/torchvision-*.whl "${FAT_STAGE}/"
|
|
||||||
python -m rocm_kpack.tools.split_python_wheels \
|
|
||||||
--input "${FAT_STAGE}"/torchvision-*.whl \
|
|
||||||
--output-dir "${DIST_DIR}" \
|
|
||||||
--device-package-prefix amd-torchvision-device \
|
|
||||||
--overlay-root torchvision/ \
|
|
||||||
--device-requires-dist "rocm-sdk-device-@GFXARCH@ == ${ROCM_SDK_VERSION}" \
|
|
||||||
--compression zstd \
|
|
||||||
-j 32
|
|
||||||
|
|
||||||
rm -rf "${FAT_STAGE}"
|
|
||||||
echo "Post-split contents of ${DIST_DIR}:"
|
|
||||||
ls -lh "${DIST_DIR}/"
|
|
||||||
|
|
||||||
# TODO(#5110): Once manifest-driven builds land, write these outputs from
|
|
||||||
# the manifest and keep wheel scanning as a validation step that the build
|
|
||||||
# produced the requested package versions.
|
|
||||||
- name: Write PyTorch package version outputs
|
|
||||||
id: pytorch-versions
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/write_torch_versions.py --dist-dir ${{ env.PACKAGE_DIST_DIR }}
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Upload PyTorch wheels to release bucket
|
|
||||||
id: publish-pytorch-wheels
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/publish_pytorch_to_release_bucket.py \
|
|
||||||
--source-dir="${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--release-type="${{ inputs.release_type }}"
|
|
||||||
|
|
||||||
configure_pytorch_tests:
|
|
||||||
name: Configure PyTorch Tests
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
outputs:
|
|
||||||
enabled: ${{ steps.configure.outputs.enabled }}
|
|
||||||
matrix: ${{ steps.configure.outputs.matrix }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout CI config
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ROCm/therock-ci-config
|
|
||||||
ref: main
|
|
||||||
path: ci-config
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Configure PyTorch test matrix
|
|
||||||
id: configure
|
|
||||||
env:
|
|
||||||
CI_CONFIG_PATH: ci-config
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/configure_pytorch_test_matrix.py \
|
|
||||||
--build-amdgpu-families "${{ inputs.amdgpu_families }}" \
|
|
||||||
--test-amdgpu-families "${{ inputs.test_amdgpu_families }}" \
|
|
||||||
--platform windows
|
|
||||||
|
|
||||||
test_pytorch_wheels:
|
|
||||||
name: Test | ${{ matrix.amdgpu_family }} | ${{ matrix.test_runs_on }}
|
|
||||||
if: ${{ needs.configure_pytorch_tests.outputs.enabled == 'true' }}
|
|
||||||
needs: [build_pytorch_wheels, configure_pytorch_tests]
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJSON(needs.configure_pytorch_tests.outputs.matrix) }}
|
|
||||||
uses: ./.github/workflows/test_pytorch_wheels.yml
|
|
||||||
with:
|
|
||||||
amdgpu_family: ${{ matrix.amdgpu_family }}
|
|
||||||
test_runs_on: ${{ matrix.test_runs_on }}
|
|
||||||
package_index_url: ${{ needs.build_pytorch_wheels.outputs.package_index_url }}
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
torch_version: ${{ needs.build_pytorch_wheels.outputs.torch_version }}
|
|
||||||
# TODO(#5110): pass manifest_url here and let test_pytorch_wheels.yml use
|
|
||||||
# checkout_from_manifest.py --no-hipify --no-submodules so tests use the
|
|
||||||
# exact source commit that produced the package under test.
|
|
||||||
pytorch_git_ref: ${{ inputs.pytorch_git_ref }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
@@ -1,384 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# CI variant of multi_arch_build_windows_pytorch_wheels.yml.
|
|
||||||
#
|
|
||||||
# Key differences from the release workflow:
|
|
||||||
# - Installs ROCm packages from either a flat find-links page (CI artifacts,
|
|
||||||
# via rocm_package_find_links_url) or a PEP 503 index (via
|
|
||||||
# rocm_package_index_url); provide whichever one applies.
|
|
||||||
# - Builds torch only (no torchvision, torchaudio)
|
|
||||||
# - No S3 upload, staging, testing, or promotion — just build + sanity check
|
|
||||||
#
|
|
||||||
# TODO(#3291): Build more packages (torchvision, torchaudio, etc.)
|
|
||||||
#
|
|
||||||
# Both workflows share build_prod_wheels.py for the actual build logic.
|
|
||||||
# See https://github.com/ROCm/TheRock/issues/3291 for convergence plans.
|
|
||||||
|
|
||||||
name: Build Windows PyTorch Wheels (CI)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
python_version:
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout (typically "release/X.Y")
|
|
||||||
type: string
|
|
||||||
default: "release/2.11"
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type (sccache, ccache, or none)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "sccache"
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx110X-all;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake. Leave empty
|
|
||||||
for legacy callers that rely on build_prod_wheels.py's
|
|
||||||
`rocm-sdk targets` fallback.
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
kpack_split:
|
|
||||||
description: "'true' if this is a kpack-split flat build."
|
|
||||||
type: string
|
|
||||||
default: "false"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
description: "The artifact group to build (e.g. gfx110X-all, gfx120X-all)"
|
|
||||||
type: string
|
|
||||||
default: gfx1151
|
|
||||||
python_version:
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout (typically "release/X.Y")
|
|
||||||
type: string
|
|
||||||
default: "release/2.11"
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- none
|
|
||||||
- sccache
|
|
||||||
- ccache
|
|
||||||
default: sccache
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Build Windows PyTorch Wheels CI (${{ inputs.artifact_group }}, py${{ inputs.python_version }}, ${{ inputs.pytorch_git_ref }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_pytorch_wheels:
|
|
||||||
name: Build PyTorch | ${{ inputs.artifact_group }} | torch ${{ inputs.pytorch_git_ref }} | py${{ inputs.python_version }}
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'azure-windows-scale-rocm' || 'windows-2022' }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
env:
|
|
||||||
CHECKOUT_ROOT: B:/src
|
|
||||||
# Note the \ here instead of /. This should be used from 'cmd' not 'bash'!
|
|
||||||
PACKAGE_DIST_DIR: ${{ github.workspace }}\output\packages\dist
|
|
||||||
RELEASE_TYPE: ci
|
|
||||||
optional_build_prod_arguments: ""
|
|
||||||
SCCACHE_BUCKET: therock-pytorch-sccache-ci
|
|
||||||
SCCACHE_REGION: us-east-1
|
|
||||||
SCCACHE_S3_KEY_PREFIX: "windows/${{ inputs.artifact_group }}/"
|
|
||||||
SCCACHE_S3_USE_SSL: "true"
|
|
||||||
SCCACHE_S3_SERVER_SIDE_ENCRYPTION: "true"
|
|
||||||
SCCACHE_IDLE_TIMEOUT: "0" # never idle-out; keeps stats accurate on long builds
|
|
||||||
SCCACHE_LOG: warn
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
# Note: there are mixed uses of 'bash' (this default) and 'cmd' below
|
|
||||||
shell: bash
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Configure Git Identity
|
|
||||||
run: |
|
|
||||||
git config --global user.name "therockbot"
|
|
||||||
git config --global user.email "therockbot@amd.com"
|
|
||||||
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Select Python version
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/python_to_cp_version.py \
|
|
||||||
--python-version ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
# sccache uses an S3 bucket reached via an OIDC-assumed IAM role, which
|
|
||||||
# fork PRs / external repos cannot assume. Compute the effective cache
|
|
||||||
# type once (downgrading sccache -> none on forks) so every sccache step
|
|
||||||
# below keys off a single decision instead of repeating fork checks.
|
|
||||||
- name: Determine cache type
|
|
||||||
id: cache
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/compute_pytorch_cache_type.py \
|
|
||||||
--cache-type "${{ inputs.cache_type }}"
|
|
||||||
|
|
||||||
# TODO(amd-justchen): share with build_windows_artifacts.yml. Include in VM image? Dockerfile?
|
|
||||||
- name: Install requirements
|
|
||||||
run: |
|
|
||||||
choco source disable -n=chocolatey
|
|
||||||
choco source add -n=internal -s http://nexus-service.nexus-ns.svc.cluster.local:8081/repository/choco-group/ --priority=1
|
|
||||||
choco install --no-progress -y ninja --version 1.13.1
|
|
||||||
|
|
||||||
# Build a fixed version of libuv from source, no matter the pytorch ref.
|
|
||||||
# gloo requires >= 1.26; v1.47.0 matches upstream's source build.
|
|
||||||
# https://github.com/pytorch/pytorch/blob/main/.ci/pytorch/windows/arm64/bootstrap_libuv.bat
|
|
||||||
- name: Build libuv from source for GLOO
|
|
||||||
run: |
|
|
||||||
git clone https://github.com/libuv/libuv.git -b v1.47.0 --depth 1
|
|
||||||
cmake -S libuv -B libuv/build -DBUILD_TESTING=OFF
|
|
||||||
cmake --build libuv/build --config Release
|
|
||||||
cmake --install libuv/build --prefix "${{ github.workspace }}/libuv-install"
|
|
||||||
echo "libuv_ROOT=${{ github.workspace }}/libuv-install" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Install sccache
|
|
||||||
if: ${{ steps.cache.outputs.cache_type == 'sccache' }}
|
|
||||||
run: |
|
|
||||||
choco install --no-progress -y sccache
|
|
||||||
echo "sccache version: $(sccache --version)"
|
|
||||||
|
|
||||||
# After other installs, so MSVC gets priority in the PATH.
|
|
||||||
- name: Configure MSVC
|
|
||||||
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
|
|
||||||
|
|
||||||
- name: Install python deps for CI
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/pytorch/requirements-ci.txt
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source (nightly)
|
|
||||||
if: ${{ inputs.pytorch_git_ref == 'nightly' }}
|
|
||||||
run: |
|
|
||||||
git config --global core.longpaths true
|
|
||||||
python ./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
- name: Checkout PyTorch source (stable)
|
|
||||||
if: ${{ inputs.pytorch_git_ref != 'nightly' }}
|
|
||||||
run: |
|
|
||||||
git config --global core.longpaths true
|
|
||||||
python ./external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--checkout-dir ${{ env.CHECKOUT_ROOT }}/pytorch \
|
|
||||||
--gitrepo-origin https://github.com/ROCm/pytorch.git \
|
|
||||||
--repo-hashtag ${{ inputs.pytorch_git_ref }} \
|
|
||||||
--no-commit-hipify
|
|
||||||
|
|
||||||
# Note: determine_version.py sets optional_build_prod_arguments in
|
|
||||||
# GITHUB_ENV, which includes --rocm-sdk-version and --version-suffix.
|
|
||||||
- name: Determine optional arguments passed to `build_prod_wheels.py`
|
|
||||||
if: ${{ inputs.rocm_version }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/determine_version.py \
|
|
||||||
--rocm-version ${{ inputs.rocm_version }}
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials for sccache
|
|
||||||
if: ${{ steps.cache.outputs.cache_type == 'sccache' }}
|
|
||||||
uses: aws-actions/configure-aws-credentials@e6de054238d6b7531b4efff3b6587d9aade6a06c # v6.2.3
|
|
||||||
with:
|
|
||||||
aws-region: us-east-1
|
|
||||||
role-to-assume: arn:aws:iam::324352301041:role/therock-ci
|
|
||||||
# Multi-package PyTorch builds can exceed the default 1h credential
|
|
||||||
# window; the role's MaxSessionDuration must be >= this value.
|
|
||||||
role-duration-seconds: 21600
|
|
||||||
special-characters-workaround: true
|
|
||||||
|
|
||||||
- name: Verify sccache
|
|
||||||
if: ${{ steps.cache.outputs.cache_type == 'sccache' }}
|
|
||||||
run: |
|
|
||||||
echo "sccache version: $(sccache --version)"
|
|
||||||
echo "SCCACHE_BUCKET=${SCCACHE_BUCKET}"
|
|
||||||
echo "SCCACHE_S3_KEY_PREFIX=${SCCACHE_S3_KEY_PREFIX}"
|
|
||||||
|
|
||||||
- name: Expand amdgpu families to gfx targets
|
|
||||||
if: ${{ inputs.amdgpu_families != '' }}
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
targets=$(python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_families }}")
|
|
||||||
echo "Expanded families '${{ inputs.amdgpu_families }}' -> '${targets}'"
|
|
||||||
echo "targets=${targets}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
# Using 'cmd' here is load bearing! There are configuration issues when
|
|
||||||
# run under 'bash': https://github.com/ROCm/TheRock/issues/827#issuecomment-3025858800
|
|
||||||
#
|
|
||||||
# inputs.amdgpu_families is only populated by the multi-arch caller
|
|
||||||
# today. Legacy single-family CI (ci_linux.yml) leaves it empty and
|
|
||||||
# falls back to `rocm-sdk targets` inside build_prod_wheels.py.
|
|
||||||
# TODO(#4687): Make --pytorch-rocm-arch required here once every
|
|
||||||
# caller plumbs the value through and the fallback in
|
|
||||||
# build_prod_wheels.py::get_rocm_sdk_targets is removed.
|
|
||||||
- name: Build PyTorch wheels
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
set "CACHE_FLAG="
|
|
||||||
if "${{ steps.cache.outputs.cache_type }}"=="sccache" set "CACHE_FLAG=--use-sccache"
|
|
||||||
if "${{ steps.cache.outputs.cache_type }}"=="ccache" set "CACHE_FLAG=--use-ccache"
|
|
||||||
|
|
||||||
set "PYTORCH_ROCM_ARCH_FLAG="
|
|
||||||
if not "${{ steps.expand.outputs.targets }}"=="" set "PYTORCH_ROCM_ARCH_FLAG=--pytorch-rocm-arch ${{ steps.expand.outputs.targets }}"
|
|
||||||
|
|
||||||
echo "Building PyTorch wheels for ${{ inputs.artifact_group }} (cache: ${{ steps.cache.outputs.cache_type }})"
|
|
||||||
python ./external-builds/pytorch/build_prod_wheels.py ^
|
|
||||||
build ^
|
|
||||||
--install-rocm ^
|
|
||||||
--index-url="${{ inputs.rocm_package_index_url }}" ^
|
|
||||||
--find-links="${{ inputs.rocm_package_find_links_url }}" ^
|
|
||||||
--root-checkout-dir ${{ env.CHECKOUT_ROOT }} ^
|
|
||||||
--enable-pytorch-flash-attention-windows ^
|
|
||||||
--clean ^
|
|
||||||
--output-dir ${{ env.PACKAGE_DIST_DIR }} ^
|
|
||||||
%CACHE_FLAG% ^
|
|
||||||
%PYTORCH_ROCM_ARCH_FLAG% ^
|
|
||||||
${{ env.optional_build_prod_arguments }}
|
|
||||||
|
|
||||||
- name: Report cache stats
|
|
||||||
if: ${{ !cancelled() && steps.cache.outputs.cache_type != 'none' }}
|
|
||||||
run: |
|
|
||||||
if [ "${{ steps.cache.outputs.cache_type }}" = "sccache" ]; then
|
|
||||||
echo "sccache stats:"
|
|
||||||
echo "--------------"
|
|
||||||
sccache --show-stats || true
|
|
||||||
elif [ "${{ steps.cache.outputs.cache_type }}" = "ccache" ]; then
|
|
||||||
echo "ccache stats:"
|
|
||||||
echo "-------------"
|
|
||||||
ccache -s -v || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Sanity check wheel
|
|
||||||
shell: cmd
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/sanity_check_wheel.py ${{ env.PACKAGE_DIST_DIR }}
|
|
||||||
|
|
||||||
# The kpack wheel splitter takes the fat torch wheel and produces a
|
|
||||||
# smaller host wheel plus one device wheel per gfx target. Source-install
|
|
||||||
# from the TheRock checkout — kpack has no published wheel today.
|
|
||||||
# The outer actions/checkout skips submodules for speed, so pull in
|
|
||||||
# rocm-systems only when we actually need it.
|
|
||||||
- name: Init rocm-systems submodule
|
|
||||||
if: ${{ inputs.kpack_split == 'true' }}
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
git submodule update --init --depth=1 rocm-systems
|
|
||||||
|
|
||||||
- name: Install kpack tooling
|
|
||||||
if: ${{ inputs.kpack_split == 'true' }}
|
|
||||||
run: |
|
|
||||||
pip install \
|
|
||||||
-e rocm-systems/python/rocm-bootstrap \
|
|
||||||
-e rocm-systems/shared/kpack
|
|
||||||
|
|
||||||
- name: Split PyTorch fat wheel
|
|
||||||
if: ${{ inputs.kpack_split == 'true' }}
|
|
||||||
run: |
|
|
||||||
DIST_DIR="$(cygpath -u "${{ env.PACKAGE_DIST_DIR }}")"
|
|
||||||
|
|
||||||
# LLVM binaries ship inside the already-installed rocm-sdk-devel.
|
|
||||||
ROCM_SDK_ROOT="$(cygpath -u "$(python -m rocm_sdk path --root)")"
|
|
||||||
LLVM_BIN="${ROCM_SDK_ROOT}/lib/llvm/bin"
|
|
||||||
if [ ! -d "${LLVM_BIN}" ]; then
|
|
||||||
echo "ERROR: LLVM bin dir not found: ${LLVM_BIN}" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The kpack Toolchain strictly looks up "objcopy" and "readelf" on
|
|
||||||
# PATH. On Windows, ROCm ships only llvm-objcopy.exe /
|
|
||||||
# llvm-readelf.exe, so stage copies under the unprefixed names.
|
|
||||||
# TODO: drop this shim once rocm-kpack's Toolchain adds llvm-*
|
|
||||||
# fallbacks for objcopy/readelf (parallels its existing objdump
|
|
||||||
# pattern). See https://github.com/ROCm/rocm-systems/issues/5506.
|
|
||||||
SHIMS="$(cygpath -u "${RUNNER_TEMP}")/kpack-shims"
|
|
||||||
mkdir -p "${SHIMS}"
|
|
||||||
cp "${LLVM_BIN}/llvm-objcopy.exe" "${SHIMS}/objcopy.exe"
|
|
||||||
cp "${LLVM_BIN}/llvm-readelf.exe" "${SHIMS}/readelf.exe"
|
|
||||||
|
|
||||||
# Prepend shims + LLVM bin so clang-offload-bundler.exe and the
|
|
||||||
# llvm-objdump fallback are also resolvable.
|
|
||||||
export PATH="${SHIMS}:${LLVM_BIN}:${PATH}"
|
|
||||||
|
|
||||||
# The splitter writes the host wheel under the same filename as the
|
|
||||||
# input, so relocate the fat wheel out of PACKAGE_DIST_DIR first.
|
|
||||||
FAT_STAGE="$(cygpath -u "${RUNNER_TEMP}")/pytorch-fat"
|
|
||||||
mkdir -p "${FAT_STAGE}"
|
|
||||||
mv "${DIST_DIR}"/torch-*.whl "${FAT_STAGE}/"
|
|
||||||
|
|
||||||
ROCM_SDK_VERSION="$(python -m rocm_sdk version)"
|
|
||||||
|
|
||||||
python -m rocm_kpack.tools.split_python_wheels \
|
|
||||||
--input "${FAT_STAGE}"/torch-*.whl \
|
|
||||||
--output-dir "${DIST_DIR}" \
|
|
||||||
--device-package-prefix amd-torch-device \
|
|
||||||
--overlay-root torch/ \
|
|
||||||
--wheel-type torch-fat \
|
|
||||||
--device-requires-dist "rocm-sdk-device-@GFXARCH@ == ${ROCM_SDK_VERSION}" \
|
|
||||||
--compression zstd \
|
|
||||||
-j 32
|
|
||||||
|
|
||||||
rm -rf "${FAT_STAGE}"
|
|
||||||
echo "Post-split contents of ${DIST_DIR}:"
|
|
||||||
ls -lh "${DIST_DIR}/"
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ci
|
|
||||||
|
|
||||||
# Appends to the same therock-ci-artifacts/<run>-windows/python/ prefix
|
|
||||||
# that the ROCm python job already populated — one find-links URL
|
|
||||||
# covers the whole SDK + PyTorch stack.
|
|
||||||
- name: Upload PyTorch wheels
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/upload_python_packages.py \
|
|
||||||
--input-packages-dir="${{ env.PACKAGE_DIST_DIR }}" \
|
|
||||||
--artifact-group="${{ inputs.artifact_group }}" \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--multiarch
|
|
||||||
@@ -1,337 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Build WSL ROCDXG Artifacts
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
stage_name:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Stage name"
|
|
||||||
stage_display_name:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Human-readable display name for the job"
|
|
||||||
timeout_minutes:
|
|
||||||
type: number
|
|
||||||
required: true
|
|
||||||
description: "Job timeout in minutes"
|
|
||||||
dist_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "Semicolon-separated list of all GPU families for dist targets"
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "ROCm package version string"
|
|
||||||
build_variant_cmake_preset:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
description: "CMake preset name for this build variant (optional)"
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease"'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (generated by detect_external_repo_config.py)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_stage:
|
|
||||||
name: ${{ inputs.stage_display_name }}
|
|
||||||
runs-on:
|
|
||||||
group: ROCR-Runtime-libhsakmt-WSL
|
|
||||||
timeout-minutes: ${{ inputs.timeout_minutes }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
STAGE_NAME: ${{ inputs.stage_name }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
THEROCK_HOST_WORKSPACE: ${{ github.workspace }}
|
|
||||||
EXTERNAL_FETCH_SOURCES_ARGS: ${{ inputs.external_repo_config != '' && fromJSON(inputs.external_repo_config).fetch_sources_args || '' }}
|
|
||||||
MANYLINUX_IMAGE: ghcr.io/rocm/therock_build_manylinux_x86_64@sha256:a382085df3ba2419b58aa9051350883a0d0b732a4bc0a4ef60458f8161bb08c6
|
|
||||||
# Clean, space-free mount target for the Windows SDK shared include dir
|
|
||||||
# inside the container. Avoids the raw "(x86)" path segment that /bin/sh
|
|
||||||
# misparses during nested subproject configure.
|
|
||||||
THEROCK_WSL_WIN_SDK_MOUNT: /opt/winsdk-shared
|
|
||||||
# Injects Windows env vars into WSL
|
|
||||||
WSLENV: THEROCK_HOST_WORKSPACE/p:GITHUB_REPOSITORY:GITHUB_EVENT_NAME:GITHUB_EVENT_PATH/p:RELEASE_TYPE:MANYLINUX_IMAGE:THEROCK_WSL_WIN_SDK_MOUNT:THEROCK_WIN_SDK_SHARED/p
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# Enable git longpaths before checkout (needed for external repos with long paths)
|
|
||||||
- name: Enable git longpaths
|
|
||||||
if: ${{ inputs.external_repo_config != '' }}
|
|
||||||
run: git config --system core.longpaths true
|
|
||||||
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout external repository
|
|
||||||
if: ${{ inputs.external_repo_config != '' }}
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ fromJSON(inputs.external_repo_config).repository }}
|
|
||||||
ref: ${{ fromJSON(inputs.external_repo_config).ref }}
|
|
||||||
path: ${{ fromJSON(inputs.external_repo_config).checkout_path }}
|
|
||||||
|
|
||||||
- name: Setting up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.12"
|
|
||||||
|
|
||||||
- name: Install python deps
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Runner health status
|
|
||||||
run: python build_tools/health_status.py
|
|
||||||
|
|
||||||
- name: Adjust git config
|
|
||||||
run: |
|
|
||||||
git config --global core.symlinks true
|
|
||||||
git config --global core.longpaths true
|
|
||||||
git config fetch.parallel 10
|
|
||||||
|
|
||||||
- name: Configure MSVC
|
|
||||||
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
|
|
||||||
|
|
||||||
- name: Detect Windows SDK version
|
|
||||||
id: detect_sdk
|
|
||||||
shell: powershell
|
|
||||||
env:
|
|
||||||
WINDOWS_SDK_INCLUDE_ROOT: C:\Program Files (x86)\Windows Kits\10\Include
|
|
||||||
run: |
|
|
||||||
if (-not (Test-Path $env:WINDOWS_SDK_INCLUDE_ROOT)) {
|
|
||||||
throw "Windows SDK not found at $env:WINDOWS_SDK_INCLUDE_ROOT"
|
|
||||||
}
|
|
||||||
$versions = Get-ChildItem $env:WINDOWS_SDK_INCLUDE_ROOT -Directory | Sort-Object Name -Descending
|
|
||||||
if ($versions.Count -eq 0) {
|
|
||||||
throw "No Windows SDK versions found under $env:WINDOWS_SDK_INCLUDE_ROOT"
|
|
||||||
}
|
|
||||||
$latestVersion = $versions[0].Name
|
|
||||||
"sdk_version=$latestVersion" >> $env:GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- uses: iterative/setup-dvc@6c05772f52d19792ed73aedb6c2bf65ec92adebb # v3.0.0
|
|
||||||
with:
|
|
||||||
version: "3.62.0"
|
|
||||||
|
|
||||||
- name: Fetch sources
|
|
||||||
timeout-minutes: 30
|
|
||||||
run: python build_tools/fetch_sources.py --stage ${STAGE_NAME} --jobs 12 --depth 1 ${EXTERNAL_FETCH_SOURCES_ARGS}
|
|
||||||
|
|
||||||
- name: Set up WSL with Ubuntu
|
|
||||||
uses: Vampire/setup-wsl@d1da7f2c0322a5ee4f24975344f67fc0f5baf364 # v7.0.0
|
|
||||||
with:
|
|
||||||
distribution: Ubuntu-24.04
|
|
||||||
update: true
|
|
||||||
additional-packages: docker.io python3 python3-pip python3-psutil python3-venv rsync
|
|
||||||
|
|
||||||
- name: Start Docker in WSL
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
run: |
|
|
||||||
# WSL2 has no init system here, so launch the daemon detached and wait
|
|
||||||
# for the socket before any docker run.
|
|
||||||
nohup dockerd >/tmp/dockerd.log 2>&1 &
|
|
||||||
for _ in $(seq 1 30); do
|
|
||||||
if docker info >/dev/null 2>&1; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
if ! docker info >/dev/null 2>&1; then
|
|
||||||
echo "dockerd failed to start"
|
|
||||||
cat /tmp/dockerd.log
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
docker pull "${MANYLINUX_IMAGE}"
|
|
||||||
|
|
||||||
- name: Set up WSL venv
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
run: |
|
|
||||||
# setup-wsl's default wsl-bash wrapper runs `bash --noprofile --norc -euo pipefail`.
|
|
||||||
# Explicitly bridged path vars from the Windows host are available in wsl-bash via
|
|
||||||
# WSLENV. Keep this path WSL-local.
|
|
||||||
wsl_work_dir="${HOME}/therock-wsl-rocdxg"
|
|
||||||
wsl_venv_dir="${wsl_work_dir}/.venv"
|
|
||||||
python3 "${THEROCK_HOST_WORKSPACE}/build_tools/setup_venv.py" --clean "${wsl_venv_dir}"
|
|
||||||
"${wsl_venv_dir}/bin/python" -m pip install -r "${THEROCK_HOST_WORKSPACE}/requirements.txt"
|
|
||||||
|
|
||||||
- name: Get stage configuration
|
|
||||||
id: stage_config
|
|
||||||
# This is a pure topology calculation, so keep it on the Windows host
|
|
||||||
# where GitHub step outputs are native. The explicit --platform=linux
|
|
||||||
# still makes configure_stage.py emit Linux/WSL feature selections.
|
|
||||||
run: |
|
|
||||||
python build_tools/configure_stage.py \
|
|
||||||
--stage="${STAGE_NAME}" \
|
|
||||||
--dist-amdgpu-families="${{ inputs.dist_amdgpu_families }}" \
|
|
||||||
--platform=linux \
|
|
||||||
--gha-output
|
|
||||||
|
|
||||||
- name: Install stage python deps
|
|
||||||
if: ${{ steps.stage_config.outputs.pip_install_cmd }}
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
run: |
|
|
||||||
wsl_venv_dir="${HOME}/therock-wsl-rocdxg/.venv"
|
|
||||||
"${wsl_venv_dir}/bin/python" -m pip install ${{ steps.stage_config.outputs.pip_install_cmd }}
|
|
||||||
|
|
||||||
- name: Prepare WSL paths
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
env:
|
|
||||||
# Made available in WSL via job-level WSLENV
|
|
||||||
THEROCK_WIN_SDK_SHARED: C:\Program Files (x86)\Windows Kits\10\Include\${{ steps.detect_sdk.outputs.sdk_version }}\shared
|
|
||||||
run: |
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
if [ ! -d "${THEROCK_WIN_SDK_SHARED}" ]; then
|
|
||||||
echo "Windows SDK include path not found: ${THEROCK_WIN_SDK_SHARED}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
mkdir -p "${wsl_build_dir}"
|
|
||||||
|
|
||||||
- name: Sync source tree to WSL
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
run: |
|
|
||||||
# Subproject source files are checked out on the Windows side via actions/checkout.
|
|
||||||
# TheRock runs `git diff` against every subproject to check for changed files.
|
|
||||||
# File operations between Windows and WSL filesystems have a lot of overhead,
|
|
||||||
# so this method of diffing subprojects becomes very time consuming.
|
|
||||||
# To resolve this, copy the entire tree in one sequential operation from Windows to WSL.
|
|
||||||
# All `git diff` are now run on WSL-native files, giving a big speed boost.
|
|
||||||
wsl_src_dir="${HOME}/therock-wsl-rocdxg/src"
|
|
||||||
rm -rf "${wsl_src_dir}"
|
|
||||||
mkdir -p "${wsl_src_dir}"
|
|
||||||
rsync -a "${THEROCK_HOST_WORKSPACE}/" "${wsl_src_dir}/"
|
|
||||||
|
|
||||||
- name: Fetch inbound artifacts
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
run: |
|
|
||||||
stage_name="${{ inputs.stage_name }}"
|
|
||||||
wsl_venv_dir="${HOME}/therock-wsl-rocdxg/.venv"
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
mkdir -p "${wsl_build_dir}"
|
|
||||||
"${wsl_venv_dir}/bin/python" "${THEROCK_HOST_WORKSPACE}/build_tools/artifact_manager.py" fetch \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--run-github-repo="${{ github.repository }}" \
|
|
||||||
--platform=linux \
|
|
||||||
--stage="${stage_name}" \
|
|
||||||
--output-dir="${wsl_build_dir}" \
|
|
||||||
--bootstrap
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
env:
|
|
||||||
# Made available in WSL via job-level WSLENV
|
|
||||||
THEROCK_WIN_SDK_SHARED: C:\Program Files (x86)\Windows Kits\10\Include\${{ steps.detect_sdk.outputs.sdk_version }}\shared
|
|
||||||
run: |
|
|
||||||
wsl_src_dir="${HOME}/therock-wsl-rocdxg/src"
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
docker run --rm \
|
|
||||||
--mount "type=bind,src=${wsl_src_dir},dst=${wsl_src_dir}" \
|
|
||||||
--mount "type=bind,src=${wsl_build_dir},dst=${wsl_build_dir}" \
|
|
||||||
--mount "type=bind,src=${THEROCK_WIN_SDK_SHARED},dst=${THEROCK_WSL_WIN_SDK_MOUNT},readonly" \
|
|
||||||
-w "${wsl_src_dir}" \
|
|
||||||
-e "WSL_BUILD_DIR=${wsl_build_dir}" \
|
|
||||||
"${MANYLINUX_IMAGE}" \
|
|
||||||
bash -c '
|
|
||||||
set -euo pipefail
|
|
||||||
git config --global --add safe.directory "*"
|
|
||||||
pip install -r requirements.txt
|
|
||||||
${{ steps.stage_config.outputs.pip_install_cmd && format('pip install {0}', steps.stage_config.outputs.pip_install_cmd) || 'true' }}
|
|
||||||
cmake -B "${WSL_BUILD_DIR}" -S . -G Ninja \
|
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
||||||
-DTHEROCK_PACKAGE_VERSION=${{ inputs.rocm_package_version }} \
|
|
||||||
-DTHEROCK_WSL_WIN_SDK="'"${THEROCK_WSL_WIN_SDK_MOUNT}"'" \
|
|
||||||
${{ inputs.build_variant_cmake_preset && format('--preset={0}', inputs.build_variant_cmake_preset) }} \
|
|
||||||
${{ inputs.external_repo_config != '' && format('-DTHEROCK_{0}_SOURCE_DIR={1}', fromJSON(inputs.external_repo_config).source_package, fromJSON(inputs.external_repo_config).checkout_path) || '' }} \
|
|
||||||
${{ inputs.external_repo_config != '' && fromJSON(inputs.external_repo_config).extra_cmake_options || '' }} \
|
|
||||||
${{ steps.stage_config.outputs.cmake_args }}
|
|
||||||
'
|
|
||||||
|
|
||||||
- name: Build stage
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
env:
|
|
||||||
# Made available in WSL via job-level WSLENV
|
|
||||||
THEROCK_WIN_SDK_SHARED: C:\Program Files (x86)\Windows Kits\10\Include\${{ steps.detect_sdk.outputs.sdk_version }}\shared
|
|
||||||
run: |
|
|
||||||
stage_name="${{ inputs.stage_name }}"
|
|
||||||
wsl_src_dir="${HOME}/therock-wsl-rocdxg/src"
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
docker run --rm \
|
|
||||||
--mount "type=bind,src=${wsl_src_dir},dst=${wsl_src_dir}" \
|
|
||||||
--mount "type=bind,src=${wsl_build_dir},dst=${wsl_build_dir}" \
|
|
||||||
--mount "type=bind,src=${THEROCK_WIN_SDK_SHARED},dst=${THEROCK_WSL_WIN_SDK_MOUNT},readonly" \
|
|
||||||
-w "${wsl_src_dir}" \
|
|
||||||
-e "STAGE_NAME=${stage_name}" \
|
|
||||||
-e "WSL_BUILD_DIR=${wsl_build_dir}" \
|
|
||||||
"${MANYLINUX_IMAGE}" \
|
|
||||||
bash -c '
|
|
||||||
set -euo pipefail
|
|
||||||
cmake --build "${WSL_BUILD_DIR}" --target "stage-${STAGE_NAME}" -- -k 0
|
|
||||||
'
|
|
||||||
|
|
||||||
- name: Report
|
|
||||||
if: ${{ !cancelled() }}
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
run: |
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
echo "Artifacts:"
|
|
||||||
ls -lh "${wsl_build_dir}"/artifacts/*.tar.xz 2>/dev/null || echo "No artifacts found"
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
if: ${{ always() && !(github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork) }}
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Push stage artifacts
|
|
||||||
if: ${{ !(github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork) }}
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
env:
|
|
||||||
# Append AWS creds set by the "Configure AWS credentials" step
|
|
||||||
WSLENV: ${{ env.WSLENV }}:AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY:AWS_SESSION_TOKEN:AWS_DEFAULT_REGION:AWS_REGION
|
|
||||||
run: |
|
|
||||||
stage_name="${{ inputs.stage_name }}"
|
|
||||||
wsl_venv_dir="${HOME}/therock-wsl-rocdxg/.venv"
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
"${wsl_venv_dir}/bin/python" "${THEROCK_HOST_WORKSPACE}/build_tools/artifact_manager.py" push --run-id ${{ github.run_id }} \
|
|
||||||
--run-github-repo="${{ github.repository }}" \
|
|
||||||
--platform linux \
|
|
||||||
--stage="${stage_name}" \
|
|
||||||
--build-dir="${wsl_build_dir}"
|
|
||||||
|
|
||||||
- name: Upload stage logs
|
|
||||||
if: ${{ always() && !(github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork) }}
|
|
||||||
shell: wsl-bash {0}
|
|
||||||
env:
|
|
||||||
# Append AWS creds set by the "Configure AWS credentials" step
|
|
||||||
WSLENV: ${{ env.WSLENV }}:AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY:AWS_SESSION_TOKEN:AWS_DEFAULT_REGION:AWS_REGION
|
|
||||||
run: |
|
|
||||||
wsl_venv_dir="${HOME}/therock-wsl-rocdxg/.venv"
|
|
||||||
wsl_build_dir="${HOME}/therock-wsl-rocdxg/build"
|
|
||||||
"${wsl_venv_dir}/bin/python" "${THEROCK_HOST_WORKSPACE}/build_tools/github_actions/post_stage_upload.py" \
|
|
||||||
--run-id=${{ github.run_id }} \
|
|
||||||
--platform=linux \
|
|
||||||
--stage="${{ inputs.stage_name }}" \
|
|
||||||
--build-dir="${wsl_build_dir}" \
|
|
||||||
--amdgpu-family=""
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Multi-Arch CI
|
|
||||||
#
|
|
||||||
# This is a staging workflow for the sharded multi-arch build pipeline.
|
|
||||||
# It mirrors ci.yml but uses multi_arch_build_portable_linux.yml instead of
|
|
||||||
# ci_linux.yml. Once validated, ci.yml will be updated to use the multi-arch
|
|
||||||
# sub-workflows directly.
|
|
||||||
|
|
||||||
name: Multi-Arch CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- multi_arch/**
|
|
||||||
- release/therock-*
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
linux_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
description: "Insert comma-separated list of Linux GPU families to build and test. ex: gfx94X, gfx120X (empty = skip linux)"
|
|
||||||
default: ""
|
|
||||||
linux_test_labels:
|
|
||||||
type: string
|
|
||||||
description: "Comma-separated test options. Use test:* to filter tests (e.g. test:rocprim). Use test_filter:* to set test type (e.g. test_filter:quick)."
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
description: "Insert comma-separated list of Windows GPU families to build and test. ex: gfx94X, gfx120X (empty = skip windows)"
|
|
||||||
default: ""
|
|
||||||
windows_test_labels:
|
|
||||||
type: string
|
|
||||||
description: "Comma-separated test options. Use test:* to filter tests (e.g. test:rocprim). Use test_filter:* to set test type (e.g. test_filter:quick)."
|
|
||||||
default: ""
|
|
||||||
prebuilt_stages:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Comma-separated build stages to skip (or 'all' for all stages); artifacts are copied from baseline_run_id instead"
|
|
||||||
baseline_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Workflow run ID to copy prebuilt stage artifacts from; required when prebuilt_stages is set"
|
|
||||||
stage_reuse_mode:
|
|
||||||
type: choice
|
|
||||||
default: "dry-run"
|
|
||||||
options:
|
|
||||||
- "dry-run"
|
|
||||||
- "reuse-stage"
|
|
||||||
# This drives the AUTOMATIC stage-reuse detection layer, which is
|
|
||||||
# separate from the manual `prebuilt_stages` input above. dry-run only
|
|
||||||
# reports which unaffected stages could be reused; reuse-stage actually
|
|
||||||
# reuses them (skips the build and copies artifacts from a baseline run).
|
|
||||||
description: "dry-run (report only) | reuse-stage (auto-reuse unaffected stages)"
|
|
||||||
stage_reuse_max_age_hours:
|
|
||||||
type: string
|
|
||||||
default: "72"
|
|
||||||
description: "Automatic stage reuse: reject baseline runs older than this many hours"
|
|
||||||
stage_reuse_commit_history:
|
|
||||||
type: string
|
|
||||||
default: "50"
|
|
||||||
description: "Automatic stage reuse: number of recent branch commits to fetch for ancestry"
|
|
||||||
changed_projects:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Comma-separated list of changed projects to filter tests (empty = run all tests)"
|
|
||||||
build_pytorch:
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
description: "Build PyTorch wheels"
|
|
||||||
build_jax:
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
description: "Build JAX wheels"
|
|
||||||
pull_request:
|
|
||||||
types:
|
|
||||||
- labeled
|
|
||||||
- opened
|
|
||||||
- synchronize
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
# See https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-workflow-concurrency
|
|
||||||
#
|
|
||||||
# Only allow one run at a time for 'pull_request' events.
|
|
||||||
# Allow multiple runs for 'push' and 'workflow_dispatch'.
|
|
||||||
#
|
|
||||||
# `github.workflow`: each workflow gets its own concurrency group
|
|
||||||
# `github.head_ref`: the branch name (only defined for pull_request events)
|
|
||||||
# `github.run_id` : fallback, unique for each run
|
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup:
|
|
||||||
uses: ./.github/workflows/setup_multi_arch.yml
|
|
||||||
with:
|
|
||||||
build_variant: "release"
|
|
||||||
linux_amdgpu_families: ${{ inputs.linux_amdgpu_families || '' }}
|
|
||||||
windows_amdgpu_families: ${{ inputs.windows_amdgpu_families || '' }}
|
|
||||||
linux_test_labels: ${{ inputs.linux_test_labels || '' }}
|
|
||||||
windows_test_labels: ${{ inputs.windows_test_labels || '' }}
|
|
||||||
prebuilt_stages: ${{ inputs.prebuilt_stages || '' }}
|
|
||||||
baseline_run_id: ${{ inputs.baseline_run_id || '' }}
|
|
||||||
stage_reuse_mode: ${{ inputs.stage_reuse_mode || 'dry-run' }}
|
|
||||||
stage_reuse_max_age_hours: ${{ inputs.stage_reuse_max_age_hours || '72' }}
|
|
||||||
stage_reuse_commit_history: ${{ inputs.stage_reuse_commit_history || '50' }}
|
|
||||||
build_pytorch: ${{ github.event_name != 'workflow_dispatch' || inputs.build_pytorch }}
|
|
||||||
build_jax: ${{ github.event_name != 'workflow_dispatch' || inputs.build_jax }}
|
|
||||||
|
|
||||||
linux_build_and_test:
|
|
||||||
name: Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }}
|
|
||||||
needs: setup
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
needs.setup.outputs.linux_build_config != '' &&
|
|
||||||
needs.setup.outputs.enable_build_jobs == 'true'
|
|
||||||
}}
|
|
||||||
uses: ./.github/workflows/multi_arch_ci_linux.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
build_config: ${{ needs.setup.outputs.linux_build_config }}
|
|
||||||
test_labels: ${{ needs.setup.outputs.linux_test_labels }}
|
|
||||||
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
|
|
||||||
rocm_deb_package_version: ${{ needs.setup.outputs.rocm_deb_package_version }}
|
|
||||||
rocm_rpm_package_version: ${{ needs.setup.outputs.rocm_rpm_package_version }}
|
|
||||||
test_type: ${{ needs.setup.outputs.test_type }}
|
|
||||||
changed_projects: ${{ inputs.changed_projects || '' }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
windows_build_and_test:
|
|
||||||
name: Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }}
|
|
||||||
needs: setup
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
needs.setup.outputs.windows_build_config != '' &&
|
|
||||||
needs.setup.outputs.enable_build_jobs == 'true'
|
|
||||||
}}
|
|
||||||
uses: ./.github/workflows/multi_arch_ci_windows.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
build_config: ${{ needs.setup.outputs.windows_build_config }}
|
|
||||||
test_labels: ${{ needs.setup.outputs.windows_test_labels }}
|
|
||||||
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
|
|
||||||
test_type: ${{ needs.setup.outputs.test_type }}
|
|
||||||
changed_projects: ${{ inputs.changed_projects || '' }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
manifest_diff:
|
|
||||||
name: Manifest Diff
|
|
||||||
# Refs are auto-derived from push / pull_request events only.
|
|
||||||
# For manual runs, dispatch manifest-diff.yml directly with explicit refs.
|
|
||||||
if: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }}
|
|
||||||
uses: ./.github/workflows/manifest-diff.yml
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
ci_summary:
|
|
||||||
name: CI Summary
|
|
||||||
if: always()
|
|
||||||
needs:
|
|
||||||
- setup
|
|
||||||
- linux_build_and_test
|
|
||||||
- windows_build_and_test
|
|
||||||
- manifest_diff
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
- name: Evaluate workflow results
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/workflow_summary.py \
|
|
||||||
--needs-json '${{ toJSON(needs) }}'
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Multi-Arch CI ASAN
|
|
||||||
|
|
||||||
on:
|
|
||||||
# TODO: Enable postsubmit ASAN once we have capacity
|
|
||||||
# push:
|
|
||||||
# branches:
|
|
||||||
# - main
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
linux_amdgpu_families:
|
|
||||||
type: string
|
|
||||||
description: "Insert comma-separated list of Linux GPU families to build and test. ex: gfx94X, gfx120X"
|
|
||||||
default: ""
|
|
||||||
linux_test_labels:
|
|
||||||
type: string
|
|
||||||
description: "If enabled, reduce test set on Linux to the list of labels prefixed with 'test:'. ex: test:rocprim, test:hipcub"
|
|
||||||
default: ""
|
|
||||||
prebuilt_stages:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Comma-separated build stages to skip (or 'all' for all stages); artifacts are copied from baseline_run_id instead"
|
|
||||||
baseline_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
description: "Workflow run ID to copy prebuilt stage artifacts from; required when prebuilt_stages is set"
|
|
||||||
pull_request:
|
|
||||||
types:
|
|
||||||
- labeled
|
|
||||||
- opened
|
|
||||||
- synchronize
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
# See https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-workflow-concurrency
|
|
||||||
#
|
|
||||||
# Only allow one run at a time for 'pull_request' events.
|
|
||||||
# Allow multiple runs for 'push' and 'workflow_dispatch'.
|
|
||||||
#
|
|
||||||
# `github.workflow`: each workflow gets its own concurrency group
|
|
||||||
# `github.head_ref`: the branch name (only defined for pull_request events)
|
|
||||||
# `github.run_id` : fallback, unique for each run
|
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup:
|
|
||||||
uses: ./.github/workflows/setup_multi_arch.yml
|
|
||||||
with:
|
|
||||||
build_variant: "asan"
|
|
||||||
linux_amdgpu_families: ${{ inputs.linux_amdgpu_families || '' }}
|
|
||||||
linux_test_labels: ${{ inputs.linux_test_labels || '' }}
|
|
||||||
prebuilt_stages: ${{ inputs.prebuilt_stages || '' }}
|
|
||||||
baseline_run_id: ${{ inputs.baseline_run_id || '' }}
|
|
||||||
build_pytorch: false
|
|
||||||
build_jax: false
|
|
||||||
|
|
||||||
linux_build_and_test:
|
|
||||||
name: Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }}
|
|
||||||
needs: setup
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
needs.setup.outputs.linux_build_config != '' &&
|
|
||||||
needs.setup.outputs.enable_build_jobs == 'true'
|
|
||||||
}}
|
|
||||||
uses: ./.github/workflows/multi_arch_ci_linux.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
build_config: ${{ needs.setup.outputs.linux_build_config }}
|
|
||||||
test_labels: ${{ needs.setup.outputs.linux_test_labels }}
|
|
||||||
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
|
|
||||||
rocm_deb_package_version: ${{ needs.setup.outputs.rocm_deb_package_version }}
|
|
||||||
rocm_rpm_package_version: ${{ needs.setup.outputs.rocm_rpm_package_version }}
|
|
||||||
test_type: ${{ needs.setup.outputs.test_type }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
ci_summary:
|
|
||||||
name: CI Summary
|
|
||||||
if: always()
|
|
||||||
needs:
|
|
||||||
- setup
|
|
||||||
- linux_build_and_test
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
- name: Evaluate workflow results
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/workflow_summary.py \
|
|
||||||
--needs-json '${{ toJSON(needs) }}'
|
|
||||||
@@ -1,370 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Multi-Arch CI - Linux
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
build_config:
|
|
||||||
type: string
|
|
||||||
description: >-
|
|
||||||
JSON object with build configuration for this platform. Fields:
|
|
||||||
artifact_group, per_family_info, dist_amdgpu_families,
|
|
||||||
build_variant_label, build_variant_cmake_preset,
|
|
||||||
build_variant_suffix, build_pytorch, build_jax,
|
|
||||||
build_native_linux, test_python_packages_matrix,
|
|
||||||
pytorch_build_matrix, jax_build_matrix,
|
|
||||||
prebuilt_stages, baseline_run_id.
|
|
||||||
test_labels:
|
|
||||||
type: string
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
rocm_deb_package_version:
|
|
||||||
type: string
|
|
||||||
description: ROCm DEB package version for native packages
|
|
||||||
rocm_rpm_package_version:
|
|
||||||
type: string
|
|
||||||
description: ROCm RPM package version for native packages
|
|
||||||
test_type:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease"'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (repository, ref, checkout_path, source_package, fetch_sources_args)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
changed_projects:
|
|
||||||
description: 'Comma-separated list of projects to test (e.g., "rocblas,hipblas" or "projects/rocblas"). Empty = run all tests.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
copy_prebuilt_stages:
|
|
||||||
name: Copy Prebuilt Stages
|
|
||||||
if: ${{ fromJSON(inputs.build_config).prebuilt_stages != '' && fromJSON(inputs.build_config).baseline_run_id != '' }}
|
|
||||||
runs-on: aws-linux-scale-rocm-prod-rc
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
container:
|
|
||||||
image: python:3.12-slim
|
|
||||||
steps:
|
|
||||||
- name: Checking out repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Install artifact manager dependencies
|
|
||||||
run: pip install boto3
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Copy prebuilt stage artifacts
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
run: |
|
|
||||||
python build_tools/artifact_manager.py copy \
|
|
||||||
--source-run-id=${{ fromJSON(inputs.build_config).baseline_run_id }} \
|
|
||||||
--source-repository=${{ fromJSON(inputs.build_config).baseline_repository }} \
|
|
||||||
--stage="${{ fromJSON(inputs.build_config).prebuilt_stages }}" \
|
|
||||||
--amdgpu-families="${{ fromJSON(inputs.build_config).dist_amdgpu_families }}" \
|
|
||||||
--expand-family-to-targets
|
|
||||||
|
|
||||||
build_multi_arch_stages:
|
|
||||||
name: Build Multi-Arch Stages
|
|
||||||
needs: copy_prebuilt_stages
|
|
||||||
if: ${{ !cancelled() && !failure() }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
matrix_per_family_json: ${{ toJSON(fromJSON(inputs.build_config).per_family_info) }}
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
build_variant_label: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
build_variant_cmake_preset: ${{ fromJSON(inputs.build_config).build_variant_cmake_preset }}
|
|
||||||
build_variant_suffix: ${{ fromJSON(inputs.build_config).build_variant_suffix }}
|
|
||||||
prebuilt_stages: ${{ fromJSON(inputs.build_config).prebuilt_stages }}
|
|
||||||
build_runs_on: ${{ fromJSON(inputs.build_config).build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
validate_artifact_structure:
|
|
||||||
needs: [build_multi_arch_stages]
|
|
||||||
name: Validate Artifact Structure
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
uses: ./.github/workflows/test_artifacts_structure.yml
|
|
||||||
with:
|
|
||||||
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
platform: linux
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
test_artifacts_per_family:
|
|
||||||
needs: [copy_prebuilt_stages, build_multi_arch_stages]
|
|
||||||
name: Test ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
|
|
||||||
uses: ./.github/workflows/test_artifacts.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
amdgpu_families: ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
amdgpu_targets: ${{ matrix.family_info.amdgpu_targets }}
|
|
||||||
test_runs_on: ${{ matrix.family_info.test-runs-on }}
|
|
||||||
test_type: ${{ inputs.test_type }}
|
|
||||||
# Per-family test_labels override global test_labels when specified
|
|
||||||
# Convert array to JSON string for workflow input compatibility
|
|
||||||
test_labels: ${{ matrix.family_info.test_labels_for_family && toJSON(matrix.family_info.test_labels_for_family) || inputs.test_labels }}
|
|
||||||
sanity_check_only_for_family: ${{ matrix.family_info.sanity_check_only_for_family }}
|
|
||||||
changed_projects: ${{ inputs.changed_projects }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
|
|
||||||
build_native_deb_packages:
|
|
||||||
needs: [build_multi_arch_stages]
|
|
||||||
name: Build DEB Packages
|
|
||||||
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_native_linux == true }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_native_linux_packages.yml
|
|
||||||
with:
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
rocm_version: ${{ inputs.rocm_deb_package_version || inputs.rocm_package_version }}
|
|
||||||
native_package_type: deb
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_native_rpm_packages:
|
|
||||||
needs: [build_multi_arch_stages]
|
|
||||||
name: Build RPM Packages
|
|
||||||
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_native_linux == true }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_native_linux_packages.yml
|
|
||||||
with:
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
rocm_version: ${{ inputs.rocm_rpm_package_version || inputs.rocm_package_version }}
|
|
||||||
native_package_type: rpm
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
test_native_packages_ubuntu2404:
|
|
||||||
needs: [build_native_deb_packages]
|
|
||||||
name: Test DEB Install - ubuntu2404
|
|
||||||
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_native_linux == true }}
|
|
||||||
uses: ./.github/workflows/test_native_linux_packages_install.yml
|
|
||||||
with:
|
|
||||||
package_install_url: ${{ needs.build_native_deb_packages.outputs.package_repository_url }}
|
|
||||||
release_type: ci
|
|
||||||
os_profile: ubuntu2404
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
test_type: sanity
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
test_native_packages_rhel8:
|
|
||||||
needs: [build_native_rpm_packages]
|
|
||||||
name: Test RPM Install - rhel8
|
|
||||||
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_native_linux == true }}
|
|
||||||
uses: ./.github/workflows/test_native_linux_packages_install.yml
|
|
||||||
with:
|
|
||||||
package_install_url: ${{ needs.build_native_rpm_packages.outputs.package_repository_url }}
|
|
||||||
release_type: ci
|
|
||||||
os_profile: rhel8
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
test_type: sanity
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
test_native_packages_rhel10:
|
|
||||||
needs: [build_native_rpm_packages]
|
|
||||||
name: Test RPM Install - rhel10
|
|
||||||
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_native_linux == true }}
|
|
||||||
uses: ./.github/workflows/test_native_linux_packages_install.yml
|
|
||||||
with:
|
|
||||||
package_install_url: ${{ needs.build_native_rpm_packages.outputs.package_repository_url }}
|
|
||||||
release_type: ci
|
|
||||||
os_profile: rhel10
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
test_type: sanity
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
test_native_packages_sles16:
|
|
||||||
needs: [build_native_rpm_packages]
|
|
||||||
name: Test RPM Install - sles16
|
|
||||||
if: ${{ !failure() && !cancelled() && fromJSON(inputs.build_config).build_native_linux == true }}
|
|
||||||
uses: ./.github/workflows/test_native_linux_packages_install.yml
|
|
||||||
with:
|
|
||||||
package_install_url: ${{ needs.build_native_rpm_packages.outputs.package_repository_url }}
|
|
||||||
release_type: ci
|
|
||||||
os_profile: sles16
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
test_type: sanity
|
|
||||||
build_variant: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_python_packages:
|
|
||||||
needs: [build_multi_arch_stages]
|
|
||||||
name: Build Python Packages
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
uses: ./.github/workflows/build_portable_linux_python_packages.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
linux_amdgpu_families: ${{ fromJSON(inputs.build_config).linux_amdgpu_families }}
|
|
||||||
windows_amdgpu_families: ${{ fromJSON(inputs.build_config).windows_amdgpu_families }}
|
|
||||||
multiarch_index: true
|
|
||||||
package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
test_python_packages_per_family:
|
|
||||||
needs: [build_python_packages]
|
|
||||||
name: Test Python
|
|
||||||
if: ${{ !failure() && !cancelled() && toJSON(fromJSON(inputs.build_config).test_python_packages_matrix) != '[]' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(inputs.build_config).test_python_packages_matrix }}
|
|
||||||
uses: ./.github/workflows/test_rocm_wheels.yml
|
|
||||||
with:
|
|
||||||
amdgpu_family: ${{ matrix.amdgpu_family }}
|
|
||||||
test_runs_on: ${{ matrix.test_runs_on }}
|
|
||||||
# TODO: Simplify to just `needs.build_python_packages.outputs.package_find_links_url`
|
|
||||||
# once kpack split is always enabled.
|
|
||||||
package_find_links_url: >-
|
|
||||||
${{
|
|
||||||
needs.build_python_packages.outputs.kpack_split == 'true'
|
|
||||||
&& needs.build_python_packages.outputs.package_find_links_url
|
|
||||||
|| format('{0}/{1}/index.html',
|
|
||||||
needs.build_python_packages.outputs.package_find_links_url,
|
|
||||||
matrix.amdgpu_family)
|
|
||||||
}}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
rocm_version: ${{ inputs.rocm_package_version }}
|
|
||||||
container_image_name: ${{ matrix.container_image_name }}
|
|
||||||
container_image_url: ${{ matrix.container_image_url }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
# Multi-arch PyTorch build: one fat wheel covering every target, then
|
|
||||||
# split into a host wheel + per-gfx device wheels via rocm-kpack.
|
|
||||||
# KPACK_SPLIT_ARTIFACTS is always ON in multi-arch CI (FLAGS.cmake
|
|
||||||
# default; build_configure.py's opt-out only fires in single-arch CI),
|
|
||||||
# so the split path is unconditional here. The split itself runs inline
|
|
||||||
# in multi_arch_build_portable_linux_pytorch_wheels_ci.yml based on
|
|
||||||
# inputs.kpack_split.
|
|
||||||
build_pytorch_wheel_fat:
|
|
||||||
needs: [build_python_packages]
|
|
||||||
name: Build PyTorch (fat + split)
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
!failure() &&
|
|
||||||
!cancelled() &&
|
|
||||||
fromJSON(inputs.build_config).build_pytorch == true &&
|
|
||||||
toJSON(fromJSON(inputs.build_config).pytorch_build_matrix) != '[]'
|
|
||||||
}}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(inputs.build_config).pytorch_build_matrix }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_pytorch_wheels_ci.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
pytorch_git_ref: ${{ matrix.pytorch_git_ref }}
|
|
||||||
# The reusable workflow expands this to gfx targets via
|
|
||||||
# cmake/therock_amdgpu_targets.cmake.
|
|
||||||
amdgpu_families: ${{ matrix.amdgpu_families }}
|
|
||||||
kpack_split: ${{ needs.build_python_packages.outputs.kpack_split }}
|
|
||||||
rocm_package_find_links_url: ${{ needs.build_python_packages.outputs.package_find_links_url }}
|
|
||||||
rocm_version: ${{ inputs.rocm_package_version }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_jax_wheels:
|
|
||||||
needs: [build_python_packages]
|
|
||||||
name: Build JAX Wheels
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
!failure() &&
|
|
||||||
!cancelled() &&
|
|
||||||
fromJSON(inputs.build_config).build_jax == true &&
|
|
||||||
toJSON(fromJSON(inputs.build_config).jax_build_matrix) != '[]'
|
|
||||||
}}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(inputs.build_config).jax_build_matrix }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_linux_jax_wheels_ci.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
jax_repository: ${{ matrix.jax_repository }}
|
|
||||||
gfx_arch: ${{ matrix.gfx_arch }}
|
|
||||||
jax_ref: ${{ matrix.jax_ref }}
|
|
||||||
rocm_version: ${{ inputs.rocm_package_version }}
|
|
||||||
rocm_package_find_links_url: ${{ needs.build_python_packages.outputs.package_find_links_url }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
@@ -1,236 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Multi-Arch CI - Windows
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
build_config:
|
|
||||||
type: string
|
|
||||||
description: >-
|
|
||||||
JSON object with build configuration for this platform. Fields:
|
|
||||||
artifact_group, per_family_info, dist_amdgpu_families,
|
|
||||||
build_variant_label, build_variant_cmake_preset,
|
|
||||||
build_variant_suffix, build_pytorch,
|
|
||||||
build_native_linux, test_python_packages_matrix,
|
|
||||||
pytorch_build_matrix,
|
|
||||||
prebuilt_stages, baseline_run_id.
|
|
||||||
test_labels:
|
|
||||||
type: string
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
test_type:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci", "dev", "nightly", or "prerelease".'
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (repository, ref, checkout_path, source_package)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
changed_projects:
|
|
||||||
description: 'Comma-separated list of projects to test (e.g., "rocblas,hipblas" or "projects/rocblas"). Empty = run all tests.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
copy_prebuilt_stages:
|
|
||||||
name: Copy Prebuilt Stages
|
|
||||||
if: ${{ fromJSON(inputs.build_config).prebuilt_stages != '' && fromJSON(inputs.build_config).baseline_run_id != '' }}
|
|
||||||
# TODO: Consider running on a Linux runner with --platform=windows to
|
|
||||||
# avoid Windows runner setup overhead (setup-python ~51s).
|
|
||||||
runs-on: ${{ fromJSON(inputs.build_config).build_runs_on || 'azure-windows-scale-rocm' }}
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
- name: Checking out repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.12"
|
|
||||||
|
|
||||||
- name: Install artifact manager dependencies
|
|
||||||
run: pip install boto3
|
|
||||||
|
|
||||||
- name: Configure AWS credentials for artifact uploads
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Copy prebuilt stage artifacts
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
run: |
|
|
||||||
python build_tools/artifact_manager.py copy \
|
|
||||||
--source-run-id=${{ fromJSON(inputs.build_config).baseline_run_id }} \
|
|
||||||
--source-repository=${{ fromJSON(inputs.build_config).baseline_repository }} \
|
|
||||||
--stage="${{ fromJSON(inputs.build_config).prebuilt_stages }}" \
|
|
||||||
--amdgpu-families="${{ fromJSON(inputs.build_config).dist_amdgpu_families }}" \
|
|
||||||
--expand-family-to-targets
|
|
||||||
|
|
||||||
build_multi_arch_stages:
|
|
||||||
name: Build Multi-Arch Stages
|
|
||||||
needs: copy_prebuilt_stages
|
|
||||||
if: ${{ !cancelled() && !failure() }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
matrix_per_family_json: ${{ toJSON(fromJSON(inputs.build_config).per_family_info) }}
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
build_variant_label: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
build_variant_cmake_preset: ${{ fromJSON(inputs.build_config).build_variant_cmake_preset }}
|
|
||||||
build_variant_suffix: ${{ fromJSON(inputs.build_config).build_variant_suffix }}
|
|
||||||
prebuilt_stages: ${{ fromJSON(inputs.build_config).prebuilt_stages }}
|
|
||||||
build_runs_on: ${{ fromJSON(inputs.build_config).build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
external_repo_config: ${{ inputs.external_repo_config }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
validate_artifact_structure:
|
|
||||||
needs: [build_multi_arch_stages]
|
|
||||||
name: Validate Artifact Structure
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
uses: ./.github/workflows/test_artifacts_structure.yml
|
|
||||||
with:
|
|
||||||
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
platform: windows
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
test_artifacts_per_family:
|
|
||||||
needs: [copy_prebuilt_stages, build_multi_arch_stages]
|
|
||||||
name: Test ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
|
|
||||||
uses: ./.github/workflows/test_artifacts.yml
|
|
||||||
with:
|
|
||||||
# Use architecture-specific artifact group for fetching per-arch artifacts
|
|
||||||
artifact_group: ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
amdgpu_families: ${{ matrix.family_info.amdgpu_family }}
|
|
||||||
amdgpu_targets: ${{ matrix.family_info.amdgpu_targets }}
|
|
||||||
test_runs_on: ${{ matrix.family_info.test-runs-on }}
|
|
||||||
test_type: ${{ inputs.test_type }}
|
|
||||||
test_labels: ${{ inputs.test_labels }}
|
|
||||||
sanity_check_only_for_family: ${{ matrix.family_info.sanity_check_only_for_family }}
|
|
||||||
changed_projects: ${{ inputs.changed_projects }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
build_python_packages:
|
|
||||||
needs: [build_multi_arch_stages]
|
|
||||||
name: Build Python Packages
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
uses: ./.github/workflows/build_windows_python_packages.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
linux_amdgpu_families: ${{ fromJSON(inputs.build_config).linux_amdgpu_families }}
|
|
||||||
windows_amdgpu_families: ${{ fromJSON(inputs.build_config).windows_amdgpu_families }}
|
|
||||||
multiarch_index: true
|
|
||||||
package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
test_python_packages_per_family:
|
|
||||||
needs: [build_python_packages]
|
|
||||||
name: Test Python
|
|
||||||
if: ${{ !failure() && !cancelled() && toJSON(fromJSON(inputs.build_config).test_python_packages_matrix) != '[]' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(inputs.build_config).test_python_packages_matrix }}
|
|
||||||
uses: ./.github/workflows/test_rocm_wheels.yml
|
|
||||||
with:
|
|
||||||
amdgpu_family: ${{ matrix.amdgpu_family }}
|
|
||||||
test_runs_on: ${{ matrix.test_runs_on }}
|
|
||||||
# TODO: Simplify to just `needs.build_python_packages.outputs.package_find_links_url`
|
|
||||||
# once kpack split is always enabled.
|
|
||||||
package_find_links_url: >-
|
|
||||||
${{
|
|
||||||
needs.build_python_packages.outputs.kpack_split == 'true'
|
|
||||||
&& needs.build_python_packages.outputs.package_find_links_url
|
|
||||||
|| format('{0}/{1}/index.html',
|
|
||||||
needs.build_python_packages.outputs.package_find_links_url,
|
|
||||||
matrix.amdgpu_family)
|
|
||||||
}}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
rocm_version: ${{ inputs.rocm_package_version }}
|
|
||||||
container_image_name: ${{ matrix.container_image_name }}
|
|
||||||
container_image_url: ${{ matrix.container_image_url }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
# Multi-arch PyTorch build: one fat wheel covering every target, then
|
|
||||||
# split into a host wheel + per-gfx device wheels via rocm-kpack.
|
|
||||||
# KPACK_SPLIT_ARTIFACTS is always ON in multi-arch CI (FLAGS.cmake default),
|
|
||||||
# so the split path is unconditional here. The split itself runs inline
|
|
||||||
# in multi_arch_build_windows_pytorch_wheels_ci.yml based on
|
|
||||||
# inputs.kpack_split.
|
|
||||||
build_pytorch_wheel_fat:
|
|
||||||
needs: [build_python_packages]
|
|
||||||
name: Build PyTorch (fat + split)
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
!failure() &&
|
|
||||||
!cancelled() &&
|
|
||||||
fromJSON(inputs.build_config).build_pytorch == true &&
|
|
||||||
toJSON(fromJSON(inputs.build_config).pytorch_build_matrix) != '[]'
|
|
||||||
}}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(inputs.build_config).pytorch_build_matrix }}
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows_pytorch_wheels_ci.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
pytorch_git_ref: ${{ matrix.pytorch_git_ref }}
|
|
||||||
# The reusable workflow expands this to gfx targets via
|
|
||||||
# cmake/therock_amdgpu_targets.cmake.
|
|
||||||
amdgpu_families: ${{ matrix.amdgpu_families }}
|
|
||||||
kpack_split: ${{ needs.build_python_packages.outputs.kpack_split }}
|
|
||||||
rocm_package_find_links_url: ${{ needs.build_python_packages.outputs.package_find_links_url }}
|
|
||||||
rocm_version: ${{ inputs.rocm_package_version }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# This workflow is the entry point for multi-arch releases.
|
|
||||||
#
|
|
||||||
# For manual dev releases, trigger via workflow_dispatch on TheRock.
|
|
||||||
# For scheduled nightly releases, rockrel will call this via workflow_call
|
|
||||||
# (TODO: pass required inputs through to setup job explicitly as needed).
|
|
||||||
#
|
|
||||||
# If we want per-platform status badges, independent retryability, or
|
|
||||||
# isolation from cross-platform runner queue issues, we can switch to
|
|
||||||
# dispatching each platform job via workflow_dispatch. That will also
|
|
||||||
# let us have this pre-trigger job freeze commits/versions so re-runs use
|
|
||||||
# consistent values, see https://github.com/ROCm/TheRock/issues/1236.
|
|
||||||
|
|
||||||
name: Multi-Arch Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "dev", "nightly", or "prerelease".'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
prerelease_version:
|
|
||||||
description: Prerelease version number such as '2'. This gets appended to the computed version after 'rc', like '7.10.0rc2'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
# For workflow_call, default to empty and trust the calling workflow to be explicit or pass "all".
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: 'Comma-separated list of Linux GPU families. "all" = all, "none" or empty = skip.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
description: 'Comma-separated list of Windows GPU families. "all" = all, "none" or empty = skip.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly Linux PyTorch wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
build_jax:
|
|
||||||
description: "Build JAX wheels"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
prerelease_version:
|
|
||||||
description: Prerelease version number such as '2'. This gets appended to the computed version after 'rc', like '7.10.0rc2'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
# For workflow_dispatch, default to a single GPU family to limit CI load for most workflow runs.
|
|
||||||
# Note: empty string will be converted to the default by github, so we need an explicit "none".
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: 'Comma-separated list of Linux GPU families. "all" = all, "none" = skip platform.'
|
|
||||||
type: string
|
|
||||||
default: "gfx94x"
|
|
||||||
windows_amdgpu_families:
|
|
||||||
description: 'Comma-separated list of Windows GPU families. "all" = all, "none" = skip platform.'
|
|
||||||
type: string
|
|
||||||
default: "gfx110x"
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly Linux PyTorch wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels"
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
build_jax:
|
|
||||||
description: "Build JAX wheels"
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: >-
|
|
||||||
Multi-Arch Release (${{ inputs.release_type }})
|
|
||||||
| Linux: ${{ inputs.linux_amdgpu_families || 'none' }}
|
|
||||||
| Windows: ${{ inputs.windows_amdgpu_families || 'none' }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup:
|
|
||||||
uses: ./.github/workflows/setup_multi_arch.yml
|
|
||||||
with:
|
|
||||||
build_variant: "release"
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
prerelease_version: ${{ inputs.prerelease_version }}
|
|
||||||
build_pytorch: ${{ inputs.build_pytorch }}
|
|
||||||
build_jax: ${{ inputs.build_jax }}
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
linux_amdgpu_families: ${{ inputs.linux_amdgpu_families }}
|
|
||||||
windows_amdgpu_families: ${{ inputs.windows_amdgpu_families }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
linux_release:
|
|
||||||
name: Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }}
|
|
||||||
needs: setup
|
|
||||||
if: ${{ needs.setup.outputs.linux_build_config != '' }}
|
|
||||||
uses: ./.github/workflows/multi_arch_release_linux.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
build_config: ${{ needs.setup.outputs.linux_build_config }}
|
|
||||||
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
|
|
||||||
rocm_deb_package_version: ${{ needs.setup.outputs.rocm_deb_package_version }}
|
|
||||||
rocm_rpm_package_version: ${{ needs.setup.outputs.rocm_rpm_package_version }}
|
|
||||||
test_type: ${{ needs.setup.outputs.test_type }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ needs.setup.outputs.ref }}
|
|
||||||
run_full_pytorch_tests: ${{ inputs.run_full_pytorch_tests }}
|
|
||||||
build_pytorch: ${{ inputs.build_pytorch }}
|
|
||||||
build_jax: ${{ inputs.build_jax }}
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
actions: write # Added permission to trigger workflows
|
|
||||||
id-token: write # Added permission for AWS S3 upload
|
|
||||||
|
|
||||||
windows_release:
|
|
||||||
name: Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }}
|
|
||||||
needs: setup
|
|
||||||
if: ${{ needs.setup.outputs.windows_build_config != '' }}
|
|
||||||
uses: ./.github/workflows/multi_arch_release_windows.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
build_config: ${{ needs.setup.outputs.windows_build_config }}
|
|
||||||
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
|
|
||||||
test_type: ${{ needs.setup.outputs.test_type }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ needs.setup.outputs.ref }}
|
|
||||||
build_pytorch: ${{ inputs.build_pytorch }}
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
actions: write # Added permission to trigger workflows
|
|
||||||
id-token: write # Added permission for AWS S3 upload
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# This workflow is the entry point for ASAN releases.
|
|
||||||
#
|
|
||||||
# Modeled on multi_arch_release.yml but uses the ASAN build variant.
|
|
||||||
|
|
||||||
name: Multi-Arch Release ASAN
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "dev", "nightly", or "prerelease".'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
prerelease_version:
|
|
||||||
description: Prerelease version number such as '2'. This gets appended to the computed version after 'rc', like '7.10.0rc2'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
# For workflow_call, default to empty and trust the calling workflow to be explicit or pass "all".
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: 'Comma-separated list of Linux GPU families. "all" = all, "none" or empty = skip.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly Linux PyTorch wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
# For workflow_dispatch, default to a single GPU family to limit CI load for most workflow runs.
|
|
||||||
# Note: empty string will be converted to the default by github, so we need an explicit "none".
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: 'Comma-separated list of Linux GPU families. "all" = all, "none" = skip platform.'
|
|
||||||
type: string
|
|
||||||
default: "gfx94x"
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly Linux PyTorch wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels"
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: >-
|
|
||||||
Multi-Arch Release ASAN (${{ inputs.release_type || 'dev' }})
|
|
||||||
| Linux: ${{ inputs.linux_amdgpu_families || 'all' }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup:
|
|
||||||
uses: ./.github/workflows/setup_multi_arch.yml
|
|
||||||
with:
|
|
||||||
build_variant: "asan"
|
|
||||||
release_type: ${{ inputs.release_type || 'dev' }}
|
|
||||||
prerelease_version: ${{ inputs.prerelease_version }}
|
|
||||||
linux_amdgpu_families: ${{ inputs.linux_amdgpu_families || 'all' }}
|
|
||||||
windows_amdgpu_families: "none"
|
|
||||||
build_pytorch: false
|
|
||||||
build_jax: false
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
linux_release:
|
|
||||||
name: Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }}
|
|
||||||
needs: setup
|
|
||||||
if: ${{ needs.setup.outputs.linux_build_config != '' }}
|
|
||||||
uses: ./.github/workflows/multi_arch_release_linux.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
build_config: ${{ needs.setup.outputs.linux_build_config }}
|
|
||||||
rocm_package_version: ${{ needs.setup.outputs.rocm_package_version }}
|
|
||||||
rocm_deb_package_version: ${{ needs.setup.outputs.rocm_deb_package_version }}
|
|
||||||
rocm_rpm_package_version: ${{ needs.setup.outputs.rocm_rpm_package_version }}
|
|
||||||
test_type: ${{ needs.setup.outputs.test_type }}
|
|
||||||
release_type: ${{ inputs.release_type || 'dev' }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ needs.setup.outputs.ref }}
|
|
||||||
run_full_pytorch_tests: ${{ inputs.run_full_pytorch_tests }}
|
|
||||||
build_pytorch: ${{ inputs.build_pytorch }}
|
|
||||||
build_jax: false
|
|
||||||
python_version: ${{ inputs.python_version }}
|
|
||||||
build_variant: "asan"
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
actions: write
|
|
||||||
id-token: write
|
|
||||||
@@ -1,282 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Multi-Arch Release Linux
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
build_config:
|
|
||||||
type: string
|
|
||||||
description: JSON object with build configuration for this platform.
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
rocm_deb_package_version:
|
|
||||||
type: string
|
|
||||||
description: ROCm DEB package version for native packages (e.g., 8.0.0).
|
|
||||||
rocm_rpm_package_version:
|
|
||||||
type: string
|
|
||||||
description: ROCm RPM package version for native packages (e.g., 8.0.0).
|
|
||||||
test_type:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "dev", "nightly", or "prerelease".'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly PyTorch wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels (defaults to true for workflow_call)"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
build_jax:
|
|
||||||
description: "Build JAX wheels (defaults to true for workflow_call)"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (release, asan). Affects publish paths."
|
|
||||||
type: string
|
|
||||||
default: "release"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_artifacts:
|
|
||||||
name: Build Artifacts
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
matrix_per_family_json: ${{ toJSON(fromJSON(inputs.build_config).per_family_info) }}
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
build_variant_label: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
build_variant_cmake_preset: ${{ fromJSON(inputs.build_config).build_variant_cmake_preset }}
|
|
||||||
build_variant_suffix: ${{ fromJSON(inputs.build_config).build_variant_suffix }}
|
|
||||||
build_runs_on: ${{ fromJSON(inputs.build_config).build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_tarballs:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Build Tarballs
|
|
||||||
uses: ./.github/workflows/multi_arch_build_tarballs.yml
|
|
||||||
with:
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
platform: linux
|
|
||||||
package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_python_packages:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Build Python Packages
|
|
||||||
uses: ./.github/workflows/build_portable_linux_python_packages.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
linux_amdgpu_families: ${{ fromJSON(inputs.build_config).linux_amdgpu_families }}
|
|
||||||
windows_amdgpu_families: ${{ fromJSON(inputs.build_config).windows_amdgpu_families }}
|
|
||||||
multiarch_index: true
|
|
||||||
package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_native_deb_packages:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Build DEB Packages
|
|
||||||
uses: ./.github/workflows/multi_arch_build_native_linux_packages.yml
|
|
||||||
with:
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
artifact_run_id: ${{ github.run_id }}
|
|
||||||
rocm_version: ${{ inputs.rocm_deb_package_version }}
|
|
||||||
native_package_type: deb
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
build_variant: ${{ inputs.build_variant }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_native_rpm_packages:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Build RPM Packages
|
|
||||||
uses: ./.github/workflows/multi_arch_build_native_linux_packages.yml
|
|
||||||
with:
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
artifact_run_id: ${{ github.run_id }}
|
|
||||||
rocm_version: ${{ inputs.rocm_rpm_package_version }}
|
|
||||||
native_package_type: rpm
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
build_variant: ${{ inputs.build_variant }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
publish_to_release_buckets:
|
|
||||||
needs: [build_tarballs, build_python_packages, build_native_deb_packages, build_native_rpm_packages]
|
|
||||||
name: Publish to Release Buckets
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Setting up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.12"
|
|
||||||
|
|
||||||
- name: Install Python requirements
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Copy to release buckets
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/publish_rocm_to_release_buckets.py \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--platform=linux \
|
|
||||||
--release-type="${{ inputs.release_type }}" \
|
|
||||||
--kpack-split="${{ needs.build_python_packages.outputs.kpack_split }}" \
|
|
||||||
--build-variant="${{ inputs.build_variant }}"
|
|
||||||
|
|
||||||
trigger_test_artifacts_per_family:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Trigger Test Artifacts (${{ matrix.family_info.amdgpu_family }})
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
|
|
||||||
steps:
|
|
||||||
- name: Trigger test_artifacts
|
|
||||||
if: ${{ matrix.family_info.test-runs-on != '' }}
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: test_artifacts.yml
|
|
||||||
inputs: |
|
|
||||||
{ "artifact_group": "${{ matrix.family_info.amdgpu_family }}",
|
|
||||||
"artifact_run_id": "${{ github.run_id }}",
|
|
||||||
"amdgpu_families": "${{ matrix.family_info.amdgpu_family }}",
|
|
||||||
"amdgpu_targets": "${{ matrix.family_info.amdgpu_targets }}",
|
|
||||||
"test_runs_on": "${{ matrix.family_info.test-runs-on }}",
|
|
||||||
"test_type": "${{ inputs.test_type }}",
|
|
||||||
"release_type": "${{ inputs.release_type }}",
|
|
||||||
"repository": "${{ inputs.repository }}",
|
|
||||||
"ref": "${{ inputs.ref }}",
|
|
||||||
"build_variant": "${{ inputs.build_variant }}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Install tests are dispatched asynchronously (sanity) so publish
|
|
||||||
# is not blocked on GPU runner queues. See https://github.com/ROCm/TheRock/issues/5212
|
|
||||||
trigger_test_native_install:
|
|
||||||
needs: [build_native_deb_packages, build_native_rpm_packages]
|
|
||||||
name: Trigger Native Install Test - ${{ matrix.os_profile }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os_profile: [ubuntu2404, rhel8, rhel10, sles16]
|
|
||||||
steps:
|
|
||||||
- name: Trigger test_native_linux_packages_install
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: test_native_linux_packages_install.yml
|
|
||||||
inputs: |
|
|
||||||
{ "package_install_url": "${{ matrix.os_profile == 'ubuntu2404' && needs.build_native_deb_packages.outputs.package_repository_url || needs.build_native_rpm_packages.outputs.package_repository_url }}",
|
|
||||||
"release_type": "${{ inputs.release_type }}",
|
|
||||||
"os_profile": "${{ matrix.os_profile }}",
|
|
||||||
"artifact_group": "${{ fromJSON(inputs.build_config).dist_amdgpu_families }}",
|
|
||||||
"test_type": "${{ inputs.test_type }}",
|
|
||||||
"build_variant": "${{ inputs.build_variant }}",
|
|
||||||
"repository": "${{ inputs.repository }}",
|
|
||||||
"ref": "${{ inputs.ref }}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# TODO: Consider switch pulling ROCm packages from the CDN instead of the artifact
|
|
||||||
# bucket if the job order is not altered.
|
|
||||||
trigger_release_pytorch_wheels:
|
|
||||||
needs: [build_artifacts, build_python_packages]
|
|
||||||
name: Trigger Release PyTorch Wheels
|
|
||||||
if: ${{ inputs.build_pytorch != false && fromJSON(inputs.build_config).build_pytorch == true }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
steps:
|
|
||||||
- name: Trigger PyTorch Build
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: multi_arch_release_linux_pytorch_wheels.yml
|
|
||||||
inputs: |
|
|
||||||
{ "amdgpu_families": "${{ fromJSON(inputs.build_config).dist_amdgpu_families }}",
|
|
||||||
"rocm_version": "${{ inputs.rocm_package_version }}",
|
|
||||||
"rocm_package_find_links_url": "${{ needs.build_python_packages.outputs.package_find_links_url }}",
|
|
||||||
"release_type": "${{ inputs.release_type }}",
|
|
||||||
"run_full_pytorch_tests": "${{ inputs.run_full_pytorch_tests }}",
|
|
||||||
"ref": "${{ inputs.ref || '' }}",
|
|
||||||
"python_version": "${{ inputs.python_version }}"
|
|
||||||
}
|
|
||||||
|
|
||||||
trigger_release_jax_wheels:
|
|
||||||
needs: [build_artifacts, build_python_packages]
|
|
||||||
name: Trigger Release JAX Wheels
|
|
||||||
if: ${{ inputs.build_jax != false && fromJSON(inputs.build_config).build_jax == true }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
steps:
|
|
||||||
- name: Trigger JAX Build
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: multi_arch_release_linux_jax_wheels.yml
|
|
||||||
inputs: |
|
|
||||||
{
|
|
||||||
"test_amdgpu_family": "${{ contains(fromJSON(inputs.build_config).dist_amdgpu_families, 'gfx94X-dcgpu') && 'gfx94X-dcgpu' || '' }}",
|
|
||||||
"release_type": "${{ inputs.release_type }}",
|
|
||||||
"rocm_version": "${{ inputs.rocm_package_version }}",
|
|
||||||
"rocm_package_find_links_url": "${{ needs.build_python_packages.outputs.package_find_links_url }}",
|
|
||||||
"repository": "${{ inputs.repository || github.repository }}",
|
|
||||||
"ref": "${{ inputs.ref || '' }}",
|
|
||||||
"python_version": "${{ inputs.python_version }}"
|
|
||||||
}
|
|
||||||
@@ -1,119 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Multi-arch release entry point for Linux JAX wheels.
|
|
||||||
#
|
|
||||||
# This workflow owns the release matrix and delegates each matrix cell to the
|
|
||||||
# reusable single-build workflow.
|
|
||||||
|
|
||||||
name: Multi-Arch Release Linux JAX Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
test_amdgpu_family:
|
|
||||||
description: "GPU family to use for JAX tests; empty means skip tests."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "dev", "nightly", or "prerelease".'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm package version to build against."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version to build (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
test_amdgpu_family:
|
|
||||||
description: "Representative GPU family to use for JAX tests."
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
rocm_version:
|
|
||||||
description: "ROCm package version to build against."
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version to build (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
run-name: Release Linux JAX Wheels (${{ inputs.release_type }}, ${{ inputs.rocm_version }}, Multiarch)
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
jobs:
|
|
||||||
setup_matrix:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
jax_matrix: ${{ steps.matrix.outputs.jax_matrix }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Generate JAX matrix
|
|
||||||
id: matrix
|
|
||||||
run: |
|
|
||||||
python ./build_tools/github_actions/configure_jax_release_matrix.py \
|
|
||||||
--python-versions="${{ inputs.python_version }}"
|
|
||||||
|
|
||||||
build_jax_wheels:
|
|
||||||
needs: setup_matrix
|
|
||||||
name: Build | py ${{ matrix.python_version }} | jax ${{ matrix.jax_ref }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(needs.setup_matrix.outputs.jax_matrix) }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
uses: ./.github/workflows/multi_arch_build_linux_jax_wheels.yml
|
|
||||||
with:
|
|
||||||
test_amdgpu_family: ${{ inputs.test_amdgpu_family }}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
jax_ref: ${{ matrix.jax_ref }}
|
|
||||||
jax_repository: ${{ matrix.jax_repository }}
|
|
||||||
gfx_arch: ${{ matrix.gfx_arch }}
|
|
||||||
rocm_version: ${{ inputs.rocm_version }}
|
|
||||||
rocm_package_find_links_url: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Multi-arch release entry point for Linux PyTorch wheels.
|
|
||||||
#
|
|
||||||
# This workflow owns the release matrix and delegates each matrix cell to the
|
|
||||||
# reusable single-build workflow. For convergence with CI and testing plans see:
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3332
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3291
|
|
||||||
|
|
||||||
name: Multi-Arch Release Linux PyTorch Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx94X-dcgpu;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; selects the S3 bucket'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type ('none', 'sccache', or 'ccache')"
|
|
||||||
type: string
|
|
||||||
default: "sccache"
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version to build (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx94X-dcgpu;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev"'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- none
|
|
||||||
- sccache
|
|
||||||
- ccache
|
|
||||||
default: sccache
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version to build (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
run_full_pytorch_tests:
|
|
||||||
description: Run full PyTorch tests after scheduled nightly wheel builds complete.
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
run-name: Release Linux PyTorch Wheels (${{ inputs.release_type }}, ${{ inputs.rocm_version }}, ${{ inputs.amdgpu_families }})
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup_matrix:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
pytorch_matrix: ${{ steps.matrix.outputs.pytorch_matrix }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Generate PyTorch matrix
|
|
||||||
id: matrix
|
|
||||||
run: |
|
|
||||||
python ./build_tools/github_actions/configure_pytorch_release_matrix.py \
|
|
||||||
--python-versions="${{ inputs.python_version }}" \
|
|
||||||
--platform=linux \
|
|
||||||
--release-type="${{ inputs.release_type }}" \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_families }}"
|
|
||||||
|
|
||||||
build_pytorch_wheels:
|
|
||||||
needs: setup_matrix
|
|
||||||
name: Build | py ${{ matrix.python_version }} | torch ${{ matrix.pytorch_git_ref }}
|
|
||||||
if: ${{ needs.setup_matrix.outputs.pytorch_matrix != '[]' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(needs.setup_matrix.outputs.pytorch_matrix) }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
# Granted so the reusable build workflow's dispatch_pytorch_wheels_full_test
|
|
||||||
# job can trigger the full test workflow (a reusable workflow's job cannot
|
|
||||||
# request more permissions than its caller grants).
|
|
||||||
actions: write
|
|
||||||
uses: ./.github/workflows/multi_arch_build_portable_linux_pytorch_wheels.yml
|
|
||||||
with:
|
|
||||||
amdgpu_families: ${{ matrix.amdgpu_families }}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
pytorch_git_ref: ${{ matrix.pytorch_git_ref }}
|
|
||||||
rocm_version: ${{ inputs.rocm_version }}
|
|
||||||
rocm_package_find_links_url: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
rocm_package_index_url: ${{ inputs.rocm_package_index_url }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
cache_type: ${{ inputs.cache_type }}
|
|
||||||
# The reusable build workflow dispatches the full PyTorch test suite for
|
|
||||||
# each successfully built (nightly, gfx94X-dcgpu, py3.12) ref using that
|
|
||||||
# build's own torch_version output (#5777).
|
|
||||||
run_full_pytorch_tests: ${{ inputs.run_full_pytorch_tests }}
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Multi-Arch Release Windows
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
build_config:
|
|
||||||
type: string
|
|
||||||
description: JSON object with build configuration for this platform.
|
|
||||||
rocm_package_version:
|
|
||||||
type: string
|
|
||||||
test_type:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "dev", "nightly", or "prerelease".'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels (defaults to true for workflow_call)"
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_artifacts:
|
|
||||||
name: Build Artifacts
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows.yml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
matrix_per_family_json: ${{ toJSON(fromJSON(inputs.build_config).per_family_info) }}
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
build_variant_label: ${{ fromJSON(inputs.build_config).build_variant_label }}
|
|
||||||
build_variant_cmake_preset: ${{ fromJSON(inputs.build_config).build_variant_cmake_preset }}
|
|
||||||
build_variant_suffix: ${{ fromJSON(inputs.build_config).build_variant_suffix }}
|
|
||||||
build_runs_on: ${{ fromJSON(inputs.build_config).build_runs_on }}
|
|
||||||
rocm_package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_tarballs:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Build Tarballs
|
|
||||||
uses: ./.github/workflows/multi_arch_build_tarballs.yml
|
|
||||||
with:
|
|
||||||
dist_amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
platform: windows
|
|
||||||
package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
build_python_packages:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Build Python Packages
|
|
||||||
uses: ./.github/workflows/build_windows_python_packages.yml
|
|
||||||
with:
|
|
||||||
artifact_group: ${{ fromJSON(inputs.build_config).artifact_group }}
|
|
||||||
amdgpu_families: ${{ fromJSON(inputs.build_config).dist_amdgpu_families }}
|
|
||||||
linux_amdgpu_families: ${{ fromJSON(inputs.build_config).linux_amdgpu_families }}
|
|
||||||
windows_amdgpu_families: ${{ fromJSON(inputs.build_config).windows_amdgpu_families }}
|
|
||||||
multiarch_index: true
|
|
||||||
package_version: ${{ inputs.rocm_package_version }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
publish_to_release_buckets:
|
|
||||||
needs: [build_tarballs, build_python_packages]
|
|
||||||
name: Publish to Release Buckets
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Setting up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.12"
|
|
||||||
|
|
||||||
- name: Install Python requirements
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
|
|
||||||
- name: Configure AWS Credentials
|
|
||||||
uses: ./.github/actions/configure_aws_artifacts_credentials
|
|
||||||
with:
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
- name: Copy to release buckets
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/publish_rocm_to_release_buckets.py \
|
|
||||||
--run-id="${{ github.run_id }}" \
|
|
||||||
--platform=windows \
|
|
||||||
--release-type="${{ inputs.release_type }}" \
|
|
||||||
--kpack-split="${{ needs.build_python_packages.outputs.kpack_split }}"
|
|
||||||
|
|
||||||
trigger_test_artifacts_per_family:
|
|
||||||
needs: [build_artifacts]
|
|
||||||
name: Trigger Test Artifacts (${{ matrix.family_info.amdgpu_family }})
|
|
||||||
if: ${{ !failure() && !cancelled() }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
family_info: ${{ fromJSON(inputs.build_config).per_family_info }}
|
|
||||||
steps:
|
|
||||||
- name: Trigger test_artifacts
|
|
||||||
if: ${{ matrix.family_info.test-runs-on != '' }}
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: test_artifacts.yml
|
|
||||||
inputs: |
|
|
||||||
{ "artifact_group": "${{ matrix.family_info.amdgpu_family }}",
|
|
||||||
"artifact_run_id": "${{ github.run_id }}",
|
|
||||||
"amdgpu_families": "${{ matrix.family_info.amdgpu_family }}",
|
|
||||||
"amdgpu_targets": "${{ matrix.family_info.amdgpu_targets }}",
|
|
||||||
"test_runs_on": "${{ matrix.family_info.test-runs-on }}",
|
|
||||||
"test_type": "${{ inputs.test_type }}",
|
|
||||||
"release_type": "${{ inputs.release_type }}",
|
|
||||||
"repository": "${{ inputs.repository }}",
|
|
||||||
"ref": "${{ inputs.ref }}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# TODO: Consider switch pulling ROCm packages from the CDN instead of the artifact
|
|
||||||
# bucket if the job order is not altered.
|
|
||||||
trigger_release_pytorch_wheels:
|
|
||||||
needs: [build_artifacts, build_python_packages]
|
|
||||||
name: Trigger Release PyTorch Wheels
|
|
||||||
if: ${{ inputs.build_pytorch != false && fromJSON(inputs.build_config).build_pytorch == true }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
steps:
|
|
||||||
- name: Trigger PyTorch Build
|
|
||||||
uses: benc-uk/workflow-dispatch@31e2b3319479a63f0ab15bf800eff9e913504e26 # v1.3.2
|
|
||||||
with:
|
|
||||||
workflow: multi_arch_release_windows_pytorch_wheels.yml
|
|
||||||
inputs: |
|
|
||||||
{ "amdgpu_families": "${{ fromJSON(inputs.build_config).dist_amdgpu_families }}",
|
|
||||||
"rocm_version": "${{ inputs.rocm_package_version }}",
|
|
||||||
"rocm_package_find_links_url": "${{ needs.build_python_packages.outputs.package_find_links_url }}",
|
|
||||||
"release_type": "${{ inputs.release_type }}",
|
|
||||||
"ref": "${{ inputs.ref || '' }}",
|
|
||||||
"python_version": "${{ inputs.python_version }}"
|
|
||||||
}
|
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
# Multi-arch release entry point for Windows PyTorch wheels.
|
|
||||||
#
|
|
||||||
# This workflow owns the release matrix and delegates each matrix cell to the
|
|
||||||
# reusable single-build workflow. For convergence with CI and testing plans see:
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3332
|
|
||||||
# * https://github.com/ROCm/TheRock/issues/3291
|
|
||||||
|
|
||||||
name: Multi-Arch Release Windows PyTorch Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx110X-all;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; selects the S3 bucket'
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type ('none', 'sccache', or 'ccache')"
|
|
||||||
type: string
|
|
||||||
default: "sccache"
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version to build (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_families:
|
|
||||||
description: >-
|
|
||||||
Semicolon-separated list of AMD GPU families to build PyTorch for
|
|
||||||
(e.g. 'gfx110X-all;gfx120X-all'). Expanded to gfx targets at
|
|
||||||
build time via cmake/therock_amdgpu_targets.cmake.
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm package version to install and build against (e.g. 7.10.0.dev0)
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: URL for pip --find-links to install ROCm packages (flat page; use this OR rocm_package_index_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
rocm_package_index_url:
|
|
||||||
description: URL for pip --index-url to install ROCm packages (PEP 503 index, e.g. repo.amd.com; use this OR rocm_package_find_links_url)
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev"'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
cache_type:
|
|
||||||
description: "Compiler cache type"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- none
|
|
||||||
- sccache
|
|
||||||
- ccache
|
|
||||||
default: sccache
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version to build (empty for full matrix)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
run-name: Release Windows PyTorch Wheels (${{ inputs.release_type }}, ${{ inputs.rocm_version }}, ${{ inputs.amdgpu_families }})
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup_matrix:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
pytorch_matrix: ${{ steps.matrix.outputs.pytorch_matrix }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Generate PyTorch matrix
|
|
||||||
id: matrix
|
|
||||||
run: |
|
|
||||||
python ./build_tools/github_actions/configure_pytorch_release_matrix.py \
|
|
||||||
--python-versions="${{ inputs.python_version }}" \
|
|
||||||
--platform=windows \
|
|
||||||
--release-type="${{ inputs.release_type }}" \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_families }}"
|
|
||||||
|
|
||||||
build_pytorch_wheels:
|
|
||||||
needs: setup_matrix
|
|
||||||
name: Build | py ${{ matrix.python_version }} | torch ${{ matrix.pytorch_git_ref }}
|
|
||||||
if: ${{ needs.setup_matrix.outputs.pytorch_matrix != '[]' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include: ${{ fromJSON(needs.setup_matrix.outputs.pytorch_matrix) }}
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
uses: ./.github/workflows/multi_arch_build_windows_pytorch_wheels.yml
|
|
||||||
with:
|
|
||||||
amdgpu_families: ${{ matrix.amdgpu_families }}
|
|
||||||
python_version: ${{ matrix.python_version }}
|
|
||||||
pytorch_git_ref: ${{ matrix.pytorch_git_ref }}
|
|
||||||
rocm_version: ${{ inputs.rocm_version }}
|
|
||||||
rocm_package_find_links_url: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
rocm_package_index_url: ${{ inputs.rocm_package_index_url }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
cache_type: ${{ inputs.cache_type }}
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Notify Quartz
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
run_phase:
|
|
||||||
description: >-
|
|
||||||
Phase of the workflow run. Must be exactly one of:
|
|
||||||
'started' (run is in progress) or 'completed' (run has finished).
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
run_conclusion:
|
|
||||||
description: >-
|
|
||||||
Overall conclusion for the calling workflow
|
|
||||||
(success / failure / cancelled). Optional: when omitted and
|
|
||||||
run_phase=completed, notify_quartz.py derives it from the per-job
|
|
||||||
`result` values found in workflow_captured_outputs (i.e. the
|
|
||||||
toJSON(needs) blob below). Pass an explicit value here only when
|
|
||||||
you need to override the derived result (e.g. mark a run as
|
|
||||||
failure even though every dependency reported success).
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
reporting_workflow:
|
|
||||||
description: >-
|
|
||||||
Filename of the workflow that is reporting (e.g.
|
|
||||||
'multi_arch_build_portable_linux.yml'). Each caller passes its own
|
|
||||||
filename as a literal so nested reusable workflows self-identify
|
|
||||||
(they otherwise share the top-level caller's github.workflow context).
|
|
||||||
The receiver keys on this filename to classify the leaf/orchestrator.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_inputs:
|
|
||||||
description: "JSON string of workflow inputs captured at dispatch time via toJSON(inputs)"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
workflow_captured_outputs:
|
|
||||||
description: >-
|
|
||||||
JSON object of caller-supplied job context. Canonical pattern is
|
|
||||||
toJSON(needs) from a `notify_completed` job whose `needs:` lists
|
|
||||||
every job whose result/outputs you want recorded; the receiver then
|
|
||||||
has per-job `result` + `outputs` without any plucking on the caller
|
|
||||||
side. NOT a dump of env / vars / secrets: anything passed here is
|
|
||||||
stored verbatim in Quartz, so the caller is responsible for not
|
|
||||||
including secrets.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "{}"
|
|
||||||
quartz_repo:
|
|
||||||
description: "Target Quartz repository (owner/repo)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "ROCm/Quartz"
|
|
||||||
quartz_workflow_file:
|
|
||||||
description: "Filename of the Quartz ingest workflow to dispatch to"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "receive_therock_data.yml"
|
|
||||||
quartz_workflow_ref:
|
|
||||||
description: "Branch in Quartz repo where the ingest workflow lives"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "main"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
notify:
|
|
||||||
name: Quartz - ${{ inputs.run_phase }} ${{ inputs.reporting_workflow }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
timeout-minutes: 10
|
|
||||||
continue-on-error: true
|
|
||||||
steps:
|
|
||||||
- name: Checkout TheRock
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ROCm/TheRock
|
|
||||||
|
|
||||||
- name: Generate GitHub App token
|
|
||||||
id: app-token
|
|
||||||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.GH_APP_HAULY_ID }}
|
|
||||||
private-key: ${{ secrets.GH_APP_HAULY_PRIVATE_KEY }}
|
|
||||||
repositories: ${{ inputs.quartz_repo }}
|
|
||||||
- name: Notify Quartz
|
|
||||||
env:
|
|
||||||
QUARTZ_HAULY_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
||||||
WORKFLOW_INPUTS: ${{ inputs.workflow_inputs }}
|
|
||||||
WORKFLOW_CAPTURED_OUTPUTS: ${{ inputs.workflow_captured_outputs }}
|
|
||||||
REPORTING_WORKFLOW: ${{ inputs.reporting_workflow }}
|
|
||||||
RUN_CONCLUSION: ${{ inputs.run_conclusion }}
|
|
||||||
RUN_PHASE: ${{ inputs.run_phase }}
|
|
||||||
QUARTZ_REPO: ${{ inputs.quartz_repo }}
|
|
||||||
QUARTZ_WORKFLOW_FILE: ${{ inputs.quartz_workflow_file }}
|
|
||||||
QUARTZ_WORKFLOW_REF: ${{ inputs.quartz_workflow_ref }}
|
|
||||||
run: python build_tools/github_actions/notify_quartz.py
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: pre-commit
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
branches: [main]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
pre-commit:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
#
|
|
||||||
# Pre-commit security gate: fast, PR-side security scanners that run on
|
|
||||||
# every pull request. The security counterpart to `pre-commit.yml`.
|
|
||||||
# Sibling scanners can be added as additional jobs in this file as they
|
|
||||||
# come online, keeping all PR-side security gates discoverable in one
|
|
||||||
# place.
|
|
||||||
|
|
||||||
name: Pre commit security
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# Scan commits introduced by this PR (`scan_mode: changed`, the
|
|
||||||
# reusable workflow's default). CSV report is uploaded as a build
|
|
||||||
# artifact and printed to the job summary so reviewers can browse
|
|
||||||
# findings directly from the PR's Checks tab.
|
|
||||||
gitleaks:
|
|
||||||
uses: ./.github/workflows/gitleaks.yml
|
|
||||||
with:
|
|
||||||
report_formats: csv
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Publish build_manylinux_x86_64 images
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
- 'stage/docker/**'
|
|
||||||
paths:
|
|
||||||
- dockerfiles/build_manylinux_x86_64*.Dockerfile
|
|
||||||
- .github/workflows/publish_build_manylinux_x86_64.yml
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish_build_manylinux_x86_64:
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: build_manylinux_x86_64
|
|
||||||
DOCKER_IMAGE_NAME: therock_build_manylinux_x86_64
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Publish TheRock Docker image
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
DOCKER_FILE_NAME:
|
|
||||||
type: string
|
|
||||||
DOCKER_IMAGE_NAME:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push-image:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
env:
|
|
||||||
REGISTRY: ghcr.io
|
|
||||||
IMAGE_NAME: ROCm/${{ inputs.DOCKER_IMAGE_NAME }}
|
|
||||||
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
|
|
||||||
- name: Log in to the Container registry
|
|
||||||
uses: docker/login-action@abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1
|
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY }}
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
# Sanitization of tag names is done automatically by the metadata-action
|
|
||||||
- name: Determine Docker tag
|
|
||||||
id: tag
|
|
||||||
run: |
|
|
||||||
ref="${{ github.ref_name }}"
|
|
||||||
if [[ "$ref" == stage/docker/* ]]; then
|
|
||||||
suffix="${ref#stage/docker/}"
|
|
||||||
echo "TAG_SUFFIX=stage-${suffix}" >> "$GITHUB_OUTPUT"
|
|
||||||
elif [[ "$ref" == "main" ]]; then
|
|
||||||
echo "TAG_SUFFIX=latest" >> "$GITHUB_OUTPUT"
|
|
||||||
else
|
|
||||||
echo "TAG_SUFFIX=${ref}" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Adds extra tags to the image, with the default tags from https://github.com/docker/metadata-action#tags-input
|
|
||||||
# The custom tag is for the branches prefixed with `stage/docker/`.
|
|
||||||
# For the default branch (i.e., main), the default behaviour remains and is labelled `latest`.
|
|
||||||
- name: Extract metadata (tags, labels) for Docker
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
|
|
||||||
with:
|
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
type=schedule
|
|
||||||
type=ref,event=branch,enable={{is_default_branch}}
|
|
||||||
type=ref,event=tag
|
|
||||||
type=ref,event=pr
|
|
||||||
type=raw,value=${{ steps.tag.outputs.TAG_SUFFIX }}
|
|
||||||
|
|
||||||
# This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
|
|
||||||
# It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
|
|
||||||
# It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
|
|
||||||
- name: Build and push Docker image
|
|
||||||
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
|
|
||||||
with:
|
|
||||||
context: dockerfiles/
|
|
||||||
file: dockerfiles/${{ inputs.DOCKER_FILE_NAME }}.Dockerfile
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Publish no_rocm_image_ubi10 image
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
- 'stage/docker/**'
|
|
||||||
paths:
|
|
||||||
- dockerfiles/no_rocm_image_ubi10.Dockerfile
|
|
||||||
- .github/workflows/publish_no_rocm_image_ubi10.yml
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish_no_rocm_image_ubi10:
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubi10
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubi10
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Publish no_rocm_image_ubuntu24_04 images
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
- 'stage/docker/**'
|
|
||||||
paths:
|
|
||||||
- dockerfiles/no_rocm_image_ubuntu24_04*.Dockerfile
|
|
||||||
- .github/workflows/publish_no_rocm_image_ubuntu24_04.yml
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish_no_rocm_image_ubuntu24_04:
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04
|
|
||||||
# The image no_rocm_image_ubuntu24_04_rocgdb is an extension of
|
|
||||||
# no_rocm_image_ubuntu24_04, so make sure we rebuild the _rocgdb
|
|
||||||
# version whenever the base version changes.
|
|
||||||
publish_no_rocm_image_ubuntu24_04_rocgdb:
|
|
||||||
needs: [publish_no_rocm_image_ubuntu24_04]
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04_rocgdb
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04_rocgdb
|
|
||||||
# image used in ocltst execution
|
|
||||||
publish_no_rocm_image_ubuntu24_04_ocl_rt:
|
|
||||||
needs: [publish_no_rocm_image_ubuntu24_04]
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04_ocl_rt
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04_ocl_rt
|
|
||||||
# The image no_rocm_image_ubuntu24_04_media is an extension of
|
|
||||||
# no_rocm_image_ubuntu24_04, so make sure we rebuild the _media
|
|
||||||
# version whenever the base version changes.
|
|
||||||
publish_no_rocm_image_ubuntu24_04_media:
|
|
||||||
needs: [publish_no_rocm_image_ubuntu24_04]
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04_media
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04_media
|
|
||||||
# The image no_rocm_image_ubuntu24_04_openmpi is an extension of
|
|
||||||
# no_rocm_image_ubuntu24_04, so make sure we rebuild the _openmpi
|
|
||||||
# version whenever the base version changes.
|
|
||||||
publish_no_rocm_image_ubuntu24_04_openmpi:
|
|
||||||
needs: [publish_no_rocm_image_ubuntu24_04]
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04_openmpi
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04_openmpi
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Publish no_rocm_image_ubuntu24_04_ocl_rt images
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
- 'stage/docker/**'
|
|
||||||
paths:
|
|
||||||
- dockerfiles/no_rocm_image_ubuntu24_04_ocl_rt.Dockerfile
|
|
||||||
- .github/workflows/publish_no_rocm_image_ubuntu24_04_ocl_rt.yml
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish_no_rocm_image_ubuntu24_04_ocl_rt:
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04_ocl_rt
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04_ocl_rt
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Publish no_rocm_image_ubuntu24_04_rocgdb images
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- 'main'
|
|
||||||
- 'stage/docker/**'
|
|
||||||
paths:
|
|
||||||
- dockerfiles/no_rocm_image_ubuntu24_04_rocgdb.Dockerfile
|
|
||||||
- .github/workflows/publish_no_rocm_image_ubuntu24_04_rocgdb.yml
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish_no_rocm_image_ubuntu24_04_rocgdb:
|
|
||||||
uses: ./.github/workflows/publish_dockerfile.yml
|
|
||||||
with:
|
|
||||||
DOCKER_FILE_NAME: no_rocm_image_ubuntu24_04_rocgdb
|
|
||||||
DOCKER_IMAGE_NAME: no_rocm_image_ubuntu24_04_rocgdb
|
|
||||||
@@ -1,219 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Setup (Multi-Arch)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
build_variant:
|
|
||||||
type: string
|
|
||||||
default: "release"
|
|
||||||
release_type:
|
|
||||||
description: >-
|
|
||||||
Release type: "ci", "dev", "nightly", or "prerelease"; controls
|
|
||||||
artifact bucket selection, IAM role, and package versioning.
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
prerelease_version:
|
|
||||||
description: Prerelease version number such as '2'. This gets appended to the computed version after 'rc', like '7.10.0rc2'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
linux_amdgpu_families:
|
|
||||||
description: 'Comma-separated Linux GPU families. "all" = all, "none" or empty = skip.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_amdgpu_families:
|
|
||||||
description: 'Comma-separated Windows GPU families. "all" = all, "none" or empty = skip.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
linux_test_labels:
|
|
||||||
description: "Comma-separated list of test labels for Linux."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
windows_test_labels:
|
|
||||||
description: "Comma-separated list of test labels for Windows."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
prebuilt_stages:
|
|
||||||
description: "Comma-separated build stages to skip (artifacts copied from baseline_run_id instead)."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
baseline_run_id:
|
|
||||||
description: "Workflow run ID to copy prebuilt stage artifacts from."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
stage_reuse_mode:
|
|
||||||
description: >-
|
|
||||||
Automatic stage-reuse mode (separate from the manual prebuilt_stages
|
|
||||||
input): "dry-run" (default) only reports which unaffected stages could
|
|
||||||
be reused; "reuse-stage" actually reuses them.
|
|
||||||
type: string
|
|
||||||
default: "dry-run"
|
|
||||||
stage_reuse_max_age_hours:
|
|
||||||
description: >-
|
|
||||||
Automatic stage reuse: reject baseline runs older than this many hours. default: "72"
|
|
||||||
type: string
|
|
||||||
default: "72"
|
|
||||||
stage_reuse_commit_history:
|
|
||||||
description: >-
|
|
||||||
Automatic stage reuse: number of recent branch commits to fetch for ancestry. default: "50"
|
|
||||||
type: string
|
|
||||||
default: "50"
|
|
||||||
build_pytorch:
|
|
||||||
description: "Build PyTorch wheels."
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
build_jax:
|
|
||||||
description: "Build JAX wheels."
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
python_version:
|
|
||||||
description: "Single Python version for wheel builds; empty uses the default matrix."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
external_repo:
|
|
||||||
description: "JSON object with 'repository' (e.g., 'ROCm/rocm-libraries') and 'ref' fields for external repo builds."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
outputs:
|
|
||||||
enable_build_jobs:
|
|
||||||
description: Whether to enable build jobs.
|
|
||||||
value: ${{ jobs.setup.outputs.enable_build_jobs }}
|
|
||||||
linux_build_config:
|
|
||||||
description: JSON object with Linux build configuration, or empty string if skipped.
|
|
||||||
value: ${{ jobs.setup.outputs.linux_build_config }}
|
|
||||||
windows_build_config:
|
|
||||||
description: JSON object with Windows build configuration, or empty string if skipped.
|
|
||||||
value: ${{ jobs.setup.outputs.windows_build_config }}
|
|
||||||
test_type:
|
|
||||||
description: "The test type to run (quick, standard, comprehensive, full)."
|
|
||||||
value: ${{ jobs.setup.outputs.test_type }}
|
|
||||||
linux_test_labels:
|
|
||||||
description: ROCm projects to run Linux tests on. Optional filter.
|
|
||||||
value: ${{ jobs.setup.outputs.linux_test_labels }}
|
|
||||||
windows_test_labels:
|
|
||||||
description: ROCm projects to run Windows tests on. Optional filter.
|
|
||||||
value: ${{ jobs.setup.outputs.windows_test_labels }}
|
|
||||||
rocm_package_version:
|
|
||||||
description: ROCm package version (primarily for Python packages).
|
|
||||||
value: ${{ jobs.setup.outputs.rocm_package_version }}
|
|
||||||
rocm_deb_package_version:
|
|
||||||
description: ROCm DEB package version for native packages.
|
|
||||||
value: ${{ jobs.setup.outputs.rocm_deb_package_version }}
|
|
||||||
rocm_rpm_package_version:
|
|
||||||
description: ROCm RPM package version for native packages.
|
|
||||||
value: ${{ jobs.setup.outputs.rocm_rpm_package_version }}
|
|
||||||
ref:
|
|
||||||
description: >-
|
|
||||||
Resolved commit SHA from checkout. Use this instead of the input ref
|
|
||||||
to ensure all downstream jobs use the same commit, even if the branch
|
|
||||||
HEAD moves during the workflow run.
|
|
||||||
value: ${{ jobs.setup.outputs.ref }}
|
|
||||||
external_repo_config:
|
|
||||||
description: "JSON config for external repo checkout (generated from external_repo_name)"
|
|
||||||
value: ${{ jobs.setup.outputs.external_repo_config }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
setup:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
enable_build_jobs: ${{ steps.configure.outputs.enable_build_jobs }}
|
|
||||||
linux_build_config: ${{ steps.configure.outputs.linux_build_config }}
|
|
||||||
windows_build_config: ${{ steps.configure.outputs.windows_build_config }}
|
|
||||||
test_type: ${{ steps.configure.outputs.test_type }}
|
|
||||||
linux_test_labels: ${{ steps.configure.outputs.linux_test_labels }}
|
|
||||||
windows_test_labels: ${{ steps.configure.outputs.windows_test_labels }}
|
|
||||||
rocm_package_version: ${{ steps.rocm_package_version.outputs.rocm_package_version }}
|
|
||||||
rocm_deb_package_version: ${{ steps.rocm_package_version.outputs.rocm_deb_package_version }}
|
|
||||||
rocm_rpm_package_version: ${{ steps.rocm_package_version.outputs.rocm_rpm_package_version }}
|
|
||||||
ref: ${{ steps.checkout.outputs.commit }}
|
|
||||||
external_repo_config: ${{ steps.external_repo_config.outputs.config_json }}
|
|
||||||
steps:
|
|
||||||
- name: Checking out repository
|
|
||||||
id: checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
# We need the parent commit to do a diff
|
|
||||||
fetch-depth: 2
|
|
||||||
|
|
||||||
- name: Checkout CI config
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ROCm/therock-ci-config
|
|
||||||
ref: main
|
|
||||||
path: ci-config
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
# Note: the script reads PR labels, the base ref, etc. from the event
|
|
||||||
# payload (GITHUB_EVENT_PATH). That is the original event that started
|
|
||||||
# the workflow run, which may not directly map to the "inputs" on
|
|
||||||
# the "workflow_call" trigger for this file.
|
|
||||||
- name: Configuring CI options
|
|
||||||
id: configure
|
|
||||||
env:
|
|
||||||
BUILD_VARIANT: ${{ inputs.build_variant }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
BUILD_PYTORCH: ${{ inputs.build_pytorch }}
|
|
||||||
BUILD_JAX: ${{ inputs.build_jax }}
|
|
||||||
PYTHON_VERSION: ${{ inputs.python_version }}
|
|
||||||
LINUX_AMDGPU_FAMILIES: ${{ inputs.linux_amdgpu_families }}
|
|
||||||
WINDOWS_AMDGPU_FAMILIES: ${{ inputs.windows_amdgpu_families }}
|
|
||||||
LINUX_TEST_LABELS: ${{ inputs.linux_test_labels }}
|
|
||||||
WINDOWS_TEST_LABELS: ${{ inputs.windows_test_labels }}
|
|
||||||
PREBUILT_STAGES: ${{ inputs.prebuilt_stages }}
|
|
||||||
BASELINE_RUN_ID: ${{ inputs.baseline_run_id }}
|
|
||||||
STAGE_REUSE_MODE: ${{ inputs.stage_reuse_mode }}
|
|
||||||
STAGE_REUSE_CURRENT_SHA: ${{ steps.checkout.outputs.commit }}
|
|
||||||
STAGE_REUSE_MAX_AGE_HOURS: ${{ inputs.stage_reuse_max_age_hours }}
|
|
||||||
STAGE_REUSE_COMMIT_HISTORY: ${{ inputs.stage_reuse_commit_history }}
|
|
||||||
# For cross-repo artifact reuse, use repository input (defaults to GITHUB_REPOSITORY).
|
|
||||||
# External repos set repository to "ROCm/TheRock" to reuse TheRock's prebuilt artifacts.
|
|
||||||
THEROCK_REPOSITORY: ${{ inputs.repository }}
|
|
||||||
# Skip path filtering for external repos (git sha won't exist in TheRock)
|
|
||||||
SKIP_PATH_FILTERS: ${{ inputs.external_repo != '' && 'true' || '' }}
|
|
||||||
CI_CONFIG_PATH: ci-config
|
|
||||||
# External repo family overrides allow callers to add/modify GPU family configs
|
|
||||||
# (e.g., adding test runners for architectures not enabled in TheRock's default config)
|
|
||||||
EXTERNAL_FAMILY_OVERRIDES: ${{ inputs.external_repo != '' && toJSON(fromJSON(inputs.external_repo).family_overrides) || '' }}
|
|
||||||
run: python ./build_tools/github_actions/configure_multi_arch_ci.py
|
|
||||||
|
|
||||||
# Note: Other scripts treat "dev releases" and "CI builds" differently.
|
|
||||||
# Here we set to a "dev" package version even for CI builds:
|
|
||||||
#
|
|
||||||
# release_type | package version | version example
|
|
||||||
# ------------ | --------------- | ------------------
|
|
||||||
# ci | dev | 7.10.0.dev0+f689a8
|
|
||||||
# dev | dev | 7.10.0.dev0+f689a8
|
|
||||||
# nightly | nightly | 7.10.0a20251021
|
|
||||||
# prerelease | prerelease | 7.10.0rc2
|
|
||||||
#
|
|
||||||
# Other scripts upload "ci" and "dev release" packages to different
|
|
||||||
# buckets, use different ccache namespaces, etc.
|
|
||||||
- name: Compute package version
|
|
||||||
id: rocm_package_version
|
|
||||||
run: |
|
|
||||||
python ./build_tools/compute_rocm_package_version.py \
|
|
||||||
--release-type=${{ inputs.release_type }} \
|
|
||||||
--prerelease-version=${{ inputs.prerelease_version }} \
|
|
||||||
--override-git-sha=${{ steps.checkout.outputs.commit }}
|
|
||||||
|
|
||||||
- name: Detect external repo config
|
|
||||||
id: external_repo_config
|
|
||||||
if: ${{ inputs.external_repo != '' }}
|
|
||||||
run: |
|
|
||||||
python ./build_tools/github_actions/detect_external_repo_config.py \
|
|
||||||
--external-repo-json='${{ inputs.external_repo }}'
|
|
||||||
@@ -1,244 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test Artifacts
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
amdgpu_families:
|
|
||||||
type: string
|
|
||||||
amdgpu_targets:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
test_runs_on:
|
|
||||||
type: string
|
|
||||||
benchmark_runs_on:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
sanity_check_only_for_family:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
test_type:
|
|
||||||
type: string
|
|
||||||
test_labels:
|
|
||||||
type: string
|
|
||||||
run_extended_tests:
|
|
||||||
type: string
|
|
||||||
default: 'false'
|
|
||||||
windows_hip_rocr_tests:
|
|
||||||
type: string
|
|
||||||
default: 'false'
|
|
||||||
changed_projects:
|
|
||||||
description: 'Comma-separated list of projects to test (e.g., "rocblas,hipblas" or "projects/rocblas"). Empty = run all tests.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci" or "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- ci
|
|
||||||
- dev
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (e.g., release, asan)."
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- release
|
|
||||||
- asan
|
|
||||||
default: release
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
amdgpu_families:
|
|
||||||
type: string
|
|
||||||
amdgpu_targets:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
test_runs_on:
|
|
||||||
type: string
|
|
||||||
benchmark_runs_on:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
sanity_check_only_for_family:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
test_type:
|
|
||||||
type: string
|
|
||||||
test_labels:
|
|
||||||
type: string
|
|
||||||
run_extended_tests:
|
|
||||||
type: string
|
|
||||||
default: 'false'
|
|
||||||
windows_hip_rocr_tests:
|
|
||||||
type: string
|
|
||||||
default: 'false'
|
|
||||||
changed_projects:
|
|
||||||
description: 'Comma-separated list of projects to test (e.g., "rocblas,hipblas" or "projects/rocblas"). Empty = run all tests.'
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (e.g., release, asan)."
|
|
||||||
type: string
|
|
||||||
default: "release"
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- ADHOCBUILD
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Test Artifacts (${{ inputs.amdgpu_families }}, ${{ inputs.release_type }}, ${{ inputs.test_type }}, ${{ inputs.build_variant }}, ${{ inputs.test_runs_on }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
configure_test_matrix:
|
|
||||||
name: "Configure test matrix (${{ inputs.amdgpu_families }})"
|
|
||||||
# if there is a test machine available
|
|
||||||
if: ${{ inputs.test_runs_on != '' }}
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
sanity_component: ${{ steps.configure.outputs.sanity_component }}
|
|
||||||
components: ${{ steps.configure.outputs.components }}
|
|
||||||
platform: ${{ steps.configure.outputs.platform }}
|
|
||||||
shard_arr: ${{ steps.configure.outputs.shard_arr }}
|
|
||||||
steps:
|
|
||||||
- name: Checking out repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Checkout CI config
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ROCm/therock-ci-config
|
|
||||||
ref: main
|
|
||||||
path: ci-config
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Setting up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: 3.12
|
|
||||||
|
|
||||||
- name: "Determine test dependencies"
|
|
||||||
id: test_deps
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
CHANGED_PROJECTS: ${{ inputs.changed_projects }}
|
|
||||||
run: |
|
|
||||||
python ./test_tools/determine_rocm_test_dependencies.py \
|
|
||||||
--changed-projects "$CHANGED_PROJECTS" \
|
|
||||||
--gha-output
|
|
||||||
|
|
||||||
- name: "Configuring CI options"
|
|
||||||
id: configure
|
|
||||||
env:
|
|
||||||
ARTIFACT_GROUP: ${{ inputs.artifact_group }}
|
|
||||||
AMDGPU_FAMILIES: ${{ inputs.amdgpu_families }}
|
|
||||||
TEST_TYPE: ${{ inputs.test_type }}
|
|
||||||
TEST_LABELS: ${{ inputs.test_labels }}
|
|
||||||
RUN_EXTENDED_TESTS: ${{ inputs.run_extended_tests }}
|
|
||||||
WINDOWS_HIP_ROCR_TESTS: ${{ inputs.windows_hip_rocr_tests }}
|
|
||||||
PROJECTS_TO_TEST: ${{ steps.test_deps.outputs.projects_to_test }}
|
|
||||||
CI_CONFIG_PATH: ci-config
|
|
||||||
BUILD_VARIANT: ${{ inputs.build_variant }}
|
|
||||||
run: |
|
|
||||||
python ./build_tools/github_actions/fetch_test_configurations.py \
|
|
||||||
--platform=${{ contains(inputs.test_runs_on, 'windows') && 'windows' || 'linux' }}
|
|
||||||
|
|
||||||
test_sanity_check:
|
|
||||||
name: 'Test Sanity Check'
|
|
||||||
needs: configure_test_matrix
|
|
||||||
uses: './.github/workflows/test_component.yml'
|
|
||||||
with:
|
|
||||||
artifact_run_id: ${{ inputs.artifact_run_id }}
|
|
||||||
artifact_group: ${{ inputs.artifact_group }}
|
|
||||||
amdgpu_families: ${{ inputs.amdgpu_families }}
|
|
||||||
amdgpu_targets: ${{ inputs.amdgpu_targets }}
|
|
||||||
# For workflow_dispatch, honor the explicit test_runs_on input if provided.
|
|
||||||
# Otherwise, use the runner selected by fetch_test_configurations.py.
|
|
||||||
test_runs_on: ${{ (github.event_name == 'workflow_dispatch' && inputs.test_runs_on) || fromJSON(needs.configure_test_matrix.outputs.sanity_component).test_runner }}
|
|
||||||
platform: ${{ needs.configure_test_matrix.outputs.platform }}
|
|
||||||
component: ${{ needs.configure_test_matrix.outputs.sanity_component }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
build_variant: ${{ inputs.build_variant }}
|
|
||||||
|
|
||||||
test_components:
|
|
||||||
name: 'Test ${{ matrix.components.job_name }}'
|
|
||||||
needs: [test_sanity_check, configure_test_matrix]
|
|
||||||
# Run when:
|
|
||||||
# - sanity check passed
|
|
||||||
# - there are components to test
|
|
||||||
# - sanity_check_only_for_family is not set
|
|
||||||
if: >-
|
|
||||||
${{
|
|
||||||
!failure() &&
|
|
||||||
!cancelled() &&
|
|
||||||
needs.configure_test_matrix.outputs.components != '' &&
|
|
||||||
needs.configure_test_matrix.outputs.components != '[]' &&
|
|
||||||
!inputs.sanity_check_only_for_family
|
|
||||||
}}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
components: ${{ fromJSON(needs.configure_test_matrix.outputs.components || '[]') }}
|
|
||||||
uses: './.github/workflows/test_component.yml'
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
artifact_run_id: ${{ inputs.artifact_run_id }}
|
|
||||||
artifact_group: ${{ inputs.artifact_group }}
|
|
||||||
amdgpu_families: ${{ inputs.amdgpu_families }}
|
|
||||||
amdgpu_targets: ${{ inputs.amdgpu_targets }}
|
|
||||||
# Route to the appropriate runner:
|
|
||||||
# 0. For workflow_dispatch, honor the explicit test_runs_on input if provided
|
|
||||||
# 1. Benchmark components use the dedicated benchmark runner
|
|
||||||
# 2. Multi-GPU components use the multi-GPU runner
|
|
||||||
# 3. CPU-only components use standard GitHub runners (azure-linux-scale-rocm)
|
|
||||||
# 4. Per-component runner (set by fetch_test_configurations.py)
|
|
||||||
test_runs_on: >-
|
|
||||||
${{
|
|
||||||
(github.event_name == 'workflow_dispatch' &&
|
|
||||||
inputs.test_runs_on != '' &&
|
|
||||||
inputs.test_runs_on) ||
|
|
||||||
(matrix.components.is_benchmark == true &&
|
|
||||||
inputs.benchmark_runs_on != '' &&
|
|
||||||
inputs.benchmark_runs_on) ||
|
|
||||||
(matrix.components.multi_gpu_runner != '' &&
|
|
||||||
matrix.components.multi_gpu_runner) ||
|
|
||||||
(matrix.components.linux_cpu_runner == true &&
|
|
||||||
'azure-linux-scale-rocm') ||
|
|
||||||
matrix.components.test_runner
|
|
||||||
}}
|
|
||||||
platform: ${{ needs.configure_test_matrix.outputs.platform }}
|
|
||||||
component: ${{ toJSON(matrix.components) }}
|
|
||||||
release_type: ${{ inputs.release_type }}
|
|
||||||
repository: ${{ inputs.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
build_variant: ${{ inputs.build_variant }}
|
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test Artifact Structure
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
description: "Run ID to fetch artifacts from (defaults to current run)"
|
|
||||||
default: ""
|
|
||||||
artifact_github_repo:
|
|
||||||
description: "GitHub repository for artifact_run_id"
|
|
||||||
type: string
|
|
||||||
default: ROCm/TheRock
|
|
||||||
amdgpu_families:
|
|
||||||
description: "amdgpu_families as a semicolon-separated list (e.g. 'gfx94X-dcgpu;gfx120X-all')"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
platform:
|
|
||||||
type: choice
|
|
||||||
description: "Platform to fetch artifacts for"
|
|
||||||
options:
|
|
||||||
- linux
|
|
||||||
- windows
|
|
||||||
default: "linux"
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci" or "dev"'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- ci
|
|
||||||
- dev
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
artifact_github_repo:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
amdgpu_families:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
platform:
|
|
||||||
type: string
|
|
||||||
default: "linux"
|
|
||||||
release_type:
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_artifact_structure:
|
|
||||||
name: "Validate artifact structure"
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'aws-linux-scale-rocm-prod-rc' || 'ubuntu-24.04' }}
|
|
||||||
container:
|
|
||||||
image: python:3.12-slim
|
|
||||||
env:
|
|
||||||
ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id != '' && inputs.artifact_run_id || github.run_id }}"
|
|
||||||
PLATFORM: ${{ inputs.platform }}
|
|
||||||
THEROCK_ARTIFACTS_DIR: ${{ github.workspace }}/.download_cache
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Install test requirements
|
|
||||||
run: |
|
|
||||||
pip install -r requirements-test.txt
|
|
||||||
|
|
||||||
- name: Fetch artifact archives (no extract)
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
python ./build_tools/artifact_manager.py fetch \
|
|
||||||
--run-id="${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--run-github-repo="${{ inputs.artifact_github_repo }}" \
|
|
||||||
--stage=all \
|
|
||||||
--amdgpu-families="${{ inputs.amdgpu_families }}" \
|
|
||||||
--platform="${{ env.PLATFORM }}" \
|
|
||||||
--output-dir="${GITHUB_WORKSPACE}" \
|
|
||||||
--no-extract
|
|
||||||
# NOTE: artifact_manager.py appends /.download_cache to --output-dir
|
|
||||||
# in --no-extract mode, so pass workspace root here so that
|
|
||||||
# artifacts land in THEROCK_ARTIFACTS_DIR ($workspace/.download_cache).
|
|
||||||
|
|
||||||
- name: Validate artifact structure
|
|
||||||
run: |
|
|
||||||
python -m pytest tests/test_artifact_structure.py \
|
|
||||||
-v --log-cli-level=info --timeout=300
|
|
||||||
@@ -1,227 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test component
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
artifact_run_id:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
artifact_group:
|
|
||||||
type: string
|
|
||||||
amdgpu_families:
|
|
||||||
type: string
|
|
||||||
amdgpu_targets:
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
test_runs_on:
|
|
||||||
type: string
|
|
||||||
platform:
|
|
||||||
type: string
|
|
||||||
component:
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
type: string
|
|
||||||
default: ci
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (e.g., release, asan). Used to skip tests incompatible with certain builds."
|
|
||||||
type: string
|
|
||||||
default: "release"
|
|
||||||
default_container_image:
|
|
||||||
type: string
|
|
||||||
default: "ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:4150afe4759d14822f0e3f8930e1124f26e11f68b5c7b91ec9a02b20b1ebbb98"
|
|
||||||
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_component:
|
|
||||||
name: >-
|
|
||||||
Test ${{ fromJSON(inputs.component).job_name }}
|
|
||||||
(shard ${{ matrix.shard }}/${{ fromJSON(inputs.component).total_shards }})
|
|
||||||
(${{ inputs.amdgpu_families }})
|
|
||||||
${{ fromJSON(inputs.component).expect_failure == true && '(xfail)' || '' }}
|
|
||||||
runs-on: ${{ inputs.test_runs_on }}
|
|
||||||
continue-on-error: ${{ fromJSON(inputs.component).expect_failure == true }}
|
|
||||||
timeout-minutes: 210
|
|
||||||
container:
|
|
||||||
# If the component has specified an alternate image, honor that option.
|
|
||||||
# Otherwise use the default image.
|
|
||||||
image: >-
|
|
||||||
${{ inputs.platform == 'linux' &&
|
|
||||||
(fromJSON(inputs.component).container_image || inputs.default_container_image)
|
|
||||||
|| null
|
|
||||||
}}
|
|
||||||
# Container options are configured in build_tools/github_actions/fetch_test_configurations.py
|
|
||||||
# and include base options (ipc, user, ulimit, seccomp), GPU options (devices, groups),
|
|
||||||
# and any job-specific options
|
|
||||||
options: ${{ fromJSON(inputs.component).container_options }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
# The shard array is based on "total_shards" from "fetch_test_configurations.py"
|
|
||||||
# The test executable will shard based on the array. (ex: [1, 2, 3, 4] = four test shards)
|
|
||||||
shard: ${{ fromJSON(inputs.component).shard_arr }}
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
VENV_DIR: ${{ github.workspace }}/.venv
|
|
||||||
ARTIFACT_RUN_ID: "${{ inputs.artifact_run_id != '' && inputs.artifact_run_id || github.run_id }}"
|
|
||||||
OUTPUT_ARTIFACTS_DIR: "./build"
|
|
||||||
THEROCK_BIN_DIR: "./build/bin"
|
|
||||||
AMDGPU_FAMILIES: ${{ inputs.amdgpu_families }}
|
|
||||||
AMDGPU_TARGETS: ${{ inputs.amdgpu_targets }}
|
|
||||||
ARTIFACT_GROUP: ${{ inputs.artifact_group }}
|
|
||||||
BUILD_VARIANT: ${{ inputs.build_variant }}
|
|
||||||
# Benchmark results database API endpoints for performance metrics collection
|
|
||||||
# NOTE: These secrets are only required for benchmark results submission in nightly CI runs.
|
|
||||||
# For PR/push workflows, secret retrieval will fail gracefully and benchmarks will skip API submission.
|
|
||||||
BENCHMARK_DB_URL: ${{ secrets.BENCHMARK_DB_URL }}
|
|
||||||
BENCHMARK_DB_FALLBACK_URL: ${{ secrets.BENCHMARK_DB_FALLBACK_URL }}
|
|
||||||
steps:
|
|
||||||
- name: "Fetch 'build_tools' from repository"
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
sparse-checkout: build_tools
|
|
||||||
path: "prejob"
|
|
||||||
|
|
||||||
- name: Pre-job cleanup processes on Windows
|
|
||||||
if: ${{ runner.os == 'Windows' }}
|
|
||||||
timeout-minutes: 5
|
|
||||||
shell: powershell
|
|
||||||
run: . '${{ github.workspace }}\prejob\build_tools\github_actions\cleanup_processes.ps1'
|
|
||||||
|
|
||||||
- name: Pre-job cleanup GPU processes on Linux
|
|
||||||
if: ${{ runner.os == 'Linux' }}
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: bash ./prejob/build_tools/github_actions/cleanup_processes.sh
|
|
||||||
|
|
||||||
- name: Checking repository
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
- name: Run setup test environment workflow
|
|
||||||
timeout-minutes: 15
|
|
||||||
env:
|
|
||||||
RETRY_THIS_STEP: "true"
|
|
||||||
STEP_TIMEOUT_MINUTES: "15" # should match timeout-minutes specified above at this step
|
|
||||||
uses: './.github/actions/setup_test_environment'
|
|
||||||
with:
|
|
||||||
ARTIFACT_RUN_ID: ${{ env.ARTIFACT_RUN_ID }}
|
|
||||||
# TODO(#3381): revert back to `inputs.artifact_group` once issue is resolved
|
|
||||||
ARTIFACT_GROUP: ${{ inputs.amdgpu_families }}
|
|
||||||
AMDGPU_TARGETS: ${{ inputs.amdgpu_targets }}
|
|
||||||
OUTPUT_ARTIFACTS_DIR: ${{ env.OUTPUT_ARTIFACTS_DIR }}
|
|
||||||
VENV_DIR: ${{ env.VENV_DIR }}
|
|
||||||
FETCH_ARTIFACT_ARGS: ${{ fromJSON(inputs.component).fetch_artifact_args }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
|
|
||||||
# safe.directory must be set before Runner Health Status
|
|
||||||
- name: Adjust git config
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory $PWD
|
|
||||||
git config fetch.parallel 10
|
|
||||||
|
|
||||||
- name: Runner health status
|
|
||||||
run: |
|
|
||||||
python ./build_tools/health_status.py
|
|
||||||
|
|
||||||
- name: Driver / GPU sanity check
|
|
||||||
timeout-minutes: 3
|
|
||||||
run: |
|
|
||||||
python ./build_tools/print_driver_gpu_info.py
|
|
||||||
|
|
||||||
- name: Setup Additional Requirements
|
|
||||||
if: ${{ fromJSON(inputs.component).additional_requirements_files != '' }}
|
|
||||||
run: |
|
|
||||||
python ./build_tools/install_additional_requirements.py \
|
|
||||||
--requirements-files ${{ join(fromJSON(inputs.component).additional_requirements_files, ',') }}
|
|
||||||
|
|
||||||
# TODO(#3755): Clean this up after final sanitizer environment variable flags are determined
|
|
||||||
- name: Enable sanitizer-specific test flags
|
|
||||||
if: ${{ contains(inputs.artifact_group, 'asan') }}
|
|
||||||
run: |
|
|
||||||
echo "ASAN_OPTIONS=detect_odr_violation=0:quarantine_size_mb=600" >> $GITHUB_ENV
|
|
||||||
echo "HSA_XNACK=1" >> $GITHUB_ENV
|
|
||||||
echo "ASAN_SYMBOLIZER_PATH=${{ env.OUTPUT_ARTIFACTS_DIR }}/llvm/bin/llvm-symbolizer" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
# Set thread limits from KUBE_CPU_REQUEST (Kubernetes-injected) to avoid oversubscription.
|
|
||||||
# Must be done at runtime since container env vars aren't in GitHub's env context.
|
|
||||||
- name: Set thread limits
|
|
||||||
run: |
|
|
||||||
if [[ -n "${KUBE_CPU_REQUEST:-}" ]]; then
|
|
||||||
CPU_COUNT="${KUBE_CPU_REQUEST%.*}"
|
|
||||||
echo "OPENBLAS_NUM_THREADS=${CPU_COUNT}" >> $GITHUB_ENV
|
|
||||||
echo "OMP_NUM_THREADS=${CPU_COUNT}" >> $GITHUB_ENV
|
|
||||||
echo "Thread limits set: OPENBLAS_NUM_THREADS=${CPU_COUNT}, OMP_NUM_THREADS=${CPU_COUNT} (from KUBE_CPU_REQUEST=${KUBE_CPU_REQUEST})"
|
|
||||||
else
|
|
||||||
echo "KUBE_CPU_REQUEST not set, thread limits not configured"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
id: test
|
|
||||||
timeout-minutes: ${{ fromJSON(inputs.component).timeout_minutes }}
|
|
||||||
env:
|
|
||||||
SHARD_INDEX: ${{ matrix.shard }}
|
|
||||||
TOTAL_SHARDS: ${{ fromJSON(inputs.component).total_shards }}
|
|
||||||
TEST_TYPE: ${{ fromJSON(inputs.component).test_type }}
|
|
||||||
TEST_COMPONENT: ${{ fromJSON(inputs.component).job_name }}
|
|
||||||
ROCM_KPACK_DEBUG: "1"
|
|
||||||
# Windows hip-tests (PAL=1, ROCR=0) set this via matrix; other components
|
|
||||||
# leave it empty. #3587
|
|
||||||
# An empty GPU_ENABLE_PAL is misread as ROCr on Windows (atoi("")==0),
|
|
||||||
# whose Windows memory path OOMs some tests (e.g. rocsparse bsr*0 graph_test).
|
|
||||||
# Default unset components to the platform backend, mirroring the runtime fix
|
|
||||||
# in ROCm/rocm-systems#8050 (Windows -> PAL, Linux -> ROCr).
|
|
||||||
GPU_ENABLE_PAL: ${{ fromJSON(inputs.component).gpu_enable_pal || (inputs.platform == 'windows' && '1' || '0') }}
|
|
||||||
RETRY_THIS_STEP: "true"
|
|
||||||
RETRY_COUNT: "1"
|
|
||||||
RETRY_DELAY: "7"
|
|
||||||
STEP_TIMEOUT_MINUTES: ${{ fromJSON(inputs.component).timeout_minutes }}
|
|
||||||
STEP_NAME: >-
|
|
||||||
Test ${{ fromJSON(inputs.component).job_name }}
|
|
||||||
(shard ${{ matrix.shard }}/${{ fromJSON(inputs.component).total_shards }})
|
|
||||||
(${{ inputs.amdgpu_families }})
|
|
||||||
${{ fromJSON(inputs.component).expect_failure == true && '(xfail)' || '' }}
|
|
||||||
run: |
|
|
||||||
${{ fromJSON(inputs.component).test_script }}
|
|
||||||
|
|
||||||
- name: Print test reproduction command
|
|
||||||
if: ${{ failure() && steps.test.outcome == 'failure' }}
|
|
||||||
run: |
|
|
||||||
python ./build_tools/github_actions/reproduce_test_failure.py \
|
|
||||||
--run-id "${{ env.ARTIFACT_RUN_ID }}" \
|
|
||||||
--repository "${{ github.repository }}" \
|
|
||||||
--amdgpu-family "${{ inputs.amdgpu_families }}" \
|
|
||||||
--amdgpu-targets "${{ inputs.amdgpu_targets }}" \
|
|
||||||
--test-script "${{ fromJSON(inputs.component).test_script }}" \
|
|
||||||
--shard-index "${{ matrix.shard }}" \
|
|
||||||
--total-shards "${{ fromJSON(inputs.component).total_shards }}" \
|
|
||||||
--test-type "${{ fromJSON(inputs.component).test_type }}" \
|
|
||||||
--print-cmd \
|
|
||||||
${{ fromJSON(inputs.component).fetch_artifact_args && format('--fetch-artifact-args="{0}"', fromJSON(inputs.component).fetch_artifact_args) || '' }}
|
|
||||||
|
|
||||||
- name: Post-job cleanup GPU processes on Linux
|
|
||||||
if: ${{ always() && runner.os == 'Linux' }}
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: bash ./build_tools/github_actions/cleanup_processes.sh
|
|
||||||
|
|
||||||
- name: Post-job cleanup processes on Windows
|
|
||||||
if: ${{ always() && runner.os == 'Windows' }}
|
|
||||||
timeout-minutes: 5
|
|
||||||
shell: powershell
|
|
||||||
run: . '${{ github.workspace }}\build_tools\github_actions\cleanup_processes.ps1'
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test JAX Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
test_runs_on:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
image_name:
|
|
||||||
required: true
|
|
||||||
description: JAX docker image to run tests with
|
|
||||||
type: string
|
|
||||||
jax_version:
|
|
||||||
description: Version of JAX to install
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_plugin_branch:
|
|
||||||
required: true
|
|
||||||
description: JAX plugin branch to checkout
|
|
||||||
type: string
|
|
||||||
default: "rocm-jaxlib-v0.11.0"
|
|
||||||
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
test_runs_on:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
image_name:
|
|
||||||
required: true
|
|
||||||
description: JAX docker image to run tests with
|
|
||||||
type: string
|
|
||||||
jax_version:
|
|
||||||
description: Version of JAX to install instead of the one on the docker image
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_plugin_branch:
|
|
||||||
description: JAX plugin branch to checkout to use for test scripts
|
|
||||||
type: string
|
|
||||||
default: "rocm-jaxlib-v0.11.0"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_wheels:
|
|
||||||
name: Test
|
|
||||||
runs-on: ${{ inputs.test_runs_on }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repo: rocm/rocm-jax
|
|
||||||
# TODO: Add steps for creating the JAX docker image with an install of TheRock and then running JAX tests on the container
|
|
||||||
@@ -1,288 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test Linux JAX Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
package_index_url:
|
|
||||||
description: Base CloudFront URL for the Python package index
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm version (optional, informational)
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
tar_url:
|
|
||||||
description: URL to TheRock tarball to configure ROCm
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
description: Python version(s) to test (e.g., "3.12")
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`."
|
|
||||||
type: string
|
|
||||||
jax_ref:
|
|
||||||
description: rocm-jax repository ref/branch to check out
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "rocm-jaxlib-v0.11.0"
|
|
||||||
jax_version:
|
|
||||||
description: "Base JAX version (e.g. 0.8.2) for installing jax from PyPI. Extracted from built wheels by write_jax_versions.py."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jaxlib_version:
|
|
||||||
description: "jaxlib wheel version (e.g. 0.9.0+rocm7 or 0.8.2+rocm7.12.0). Extracted from built wheels by write_jax_versions.py."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_plugin_version:
|
|
||||||
description: "jax_rocm7_plugin wheel version. Extracted from built wheels by write_jax_versions.py."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_pjrt_version:
|
|
||||||
description: "jax_rocm7_pjrt wheel version. Extracted from built wheels by write_jax_versions.py."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow."
|
|
||||||
type: string
|
|
||||||
test_runs_on:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- gfx101X-dgpu
|
|
||||||
- gfx103X-all
|
|
||||||
- gfx110X-all
|
|
||||||
- gfx1150
|
|
||||||
- gfx1151
|
|
||||||
- gfx1152
|
|
||||||
- gfx1153
|
|
||||||
- gfx120X-all
|
|
||||||
- gfx900
|
|
||||||
- gfx90c
|
|
||||||
- gfx906
|
|
||||||
- gfx908
|
|
||||||
- gfx90a
|
|
||||||
- gfx94X-dcgpu
|
|
||||||
- gfx950-dcgpu
|
|
||||||
- gfx125X-dcgpu
|
|
||||||
default: gfx94X-dcgpu
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev"'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
package_index_url:
|
|
||||||
description: Base CloudFront URL for the Python package index
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: https://rocm.nightlies.amd.com/v2-staging/
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm version
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
tar_url:
|
|
||||||
description: URL to TheRock tarball to configure ROCm
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
description: Python version(s) to test (e.g., "3.12")
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
jax_ref:
|
|
||||||
description: rocm-jax repository ref/branch to check out
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "rocm-jaxlib-v0.11.0"
|
|
||||||
jax_version:
|
|
||||||
description: "Base JAX version (e.g. 0.8.2). Leave empty to auto-detect from rocm-jax requirements."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jaxlib_version:
|
|
||||||
description: "jaxlib wheel version (e.g. 0.9.0+rocm7 or 0.8.2+rocm7.12.0). Leave empty to auto-compute from rocm_version."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_plugin_version:
|
|
||||||
description: "jax_rocm7_plugin wheel version. Leave empty to use jaxlib_version."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_pjrt_version:
|
|
||||||
description: "jax_rocm7_pjrt wheel version. Leave empty to use jaxlib_version."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
test_runs_on:
|
|
||||||
description: Runner label to use. The selected runner should have a GPU supported by amdgpu_family
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow."
|
|
||||||
type: string
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_jax_wheels:
|
|
||||||
name: Test JAX Wheels | ${{ inputs.amdgpu_family }}
|
|
||||||
runs-on: ${{ inputs.test_runs_on }}
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:405945a40deaff9db90b9839c0f41d4cba4a383c1a7459b28627047bf6302a26
|
|
||||||
# DNS workaround: These --dns entries are added to resolve CloudFront/runner DNS issues
|
|
||||||
# They should NOT be required for testing JAX and can be removed once DNS issues are resolved
|
|
||||||
# TODO: Remove these lines when issue is fixed - https://github.com/ROCm/TheRock/issues/3014
|
|
||||||
options: >-
|
|
||||||
--device /dev/kfd
|
|
||||||
--device /dev/dri
|
|
||||||
--group-add render
|
|
||||||
--group-add video
|
|
||||||
--user root
|
|
||||||
--env-file /etc/podinfo/gha-gpu-isolation-settings
|
|
||||||
--dns 8.8.8.8
|
|
||||||
--dns 8.8.4.4
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
VIRTUAL_ENV: ${{ github.workspace }}/.venv
|
|
||||||
AMDGPU_FAMILY: ${{ inputs.amdgpu_family }}
|
|
||||||
THEROCK_TAR_URL: ${{ inputs.tar_url }}
|
|
||||||
PYTHON_VERSION: ${{ inputs.python_version }}
|
|
||||||
WHEEL_INDEX_URL: ${{ inputs.package_index_url }}/${{ inputs.amdgpu_family }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Checkout rocm-jax (plugin + build scripts)
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: rocm-jax
|
|
||||||
repository: ROCm/rocm-jax
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
- name: Checkout JAX extended tests repo
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: jax
|
|
||||||
repository: ROCm/jax
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
check-latest: true
|
|
||||||
|
|
||||||
- name: System deps, venv configure
|
|
||||||
run: |
|
|
||||||
python3 -m venv "${VIRTUAL_ENV}"
|
|
||||||
echo "PATH=${VIRTUAL_ENV}/bin:${PATH}" >> "$GITHUB_ENV"
|
|
||||||
python3 build_tools/setup_venv.py "${VIRTUAL_ENV}" --activate-in-future-github-actions-steps
|
|
||||||
|
|
||||||
- name: Install base JAX test requirements
|
|
||||||
run: |
|
|
||||||
# This script sets up the venv and activates it across steps; keep it consistent
|
|
||||||
pip install -r external-builds/jax/requirements-jax.txt
|
|
||||||
|
|
||||||
- name: Configure ROCm from TheRock tarball
|
|
||||||
env:
|
|
||||||
ROCM_VERSION: ${{ inputs.rocm_version }}
|
|
||||||
AMDGPU_FAMILY: ${{ inputs.amdgpu_family }}
|
|
||||||
run: |
|
|
||||||
DEST="/opt/rocm-${{ inputs.rocm_version }}"
|
|
||||||
# Install directly from TheRock release buckets (nightly/dev) using the provided version
|
|
||||||
python build_tools/install_rocm_from_artifacts.py \
|
|
||||||
--release "${{ inputs.rocm_version }}" \
|
|
||||||
--artifact-group "${{ inputs.amdgpu_family }}" \
|
|
||||||
--output-dir "${DEST}"
|
|
||||||
# Temporary CI workaround.
|
|
||||||
# TODO(#4201): Remove this /opt/rocm symlink once JAX wheel
|
|
||||||
# packaging/RUNPATH fixes are validated and CI no longer depends on
|
|
||||||
# /opt/rocm -> /opt/rocm-<version> path translation.
|
|
||||||
ln -sfn "${DEST}" /opt/rocm
|
|
||||||
|
|
||||||
- name: Determine JAX package versions
|
|
||||||
run: |
|
|
||||||
# The plugin/pjrt wheels embed the ROCm major version in their package
|
|
||||||
# name (jax_rocm7_*, jax_rocm10_*), tracking the ROCm release they were
|
|
||||||
# built against.
|
|
||||||
rocm_major="${{ inputs.rocm_version }}"
|
|
||||||
rocm_major="${rocm_major%%.*}"
|
|
||||||
if [ -z "${rocm_major}" ]; then
|
|
||||||
echo "::error::rocm_version is required to determine the JAX plugin package name"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "JAX_PLUGIN_PACKAGE=jax_rocm${rocm_major}_plugin" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_PJRT_PACKAGE=jax_rocm${rocm_major}_pjrt" >> "$GITHUB_ENV"
|
|
||||||
|
|
||||||
# Use versions passed from the build workflow when available.
|
|
||||||
# For manual workflow_dispatch, compute the version suffix using
|
|
||||||
# compute_jax_package_version.py (matches rocm-jax ci_build format).
|
|
||||||
if [ -n "${{ inputs.jax_plugin_version }}" ] && [ -n "${{ inputs.jax_version }}" ]; then
|
|
||||||
echo "Using versions passed from build workflow"
|
|
||||||
echo "JAXLIB_VERSION=${{ inputs.jaxlib_version }}" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_VERSION=${{ inputs.jax_version }}" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_PLUGIN_VERSION=${{ inputs.jax_plugin_version }}" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_PJRT_VERSION=${{ inputs.jax_pjrt_version }}" >> "$GITHUB_ENV"
|
|
||||||
else
|
|
||||||
echo "Computing versions from rocm_version and rocm-jax requirements"
|
|
||||||
pip install packaging
|
|
||||||
python build_tools/github_actions/compute_jax_package_version.py \
|
|
||||||
--rocm-version "${{ inputs.rocm_version }}" \
|
|
||||||
--jax-requirements rocm-jax/build/requirements.txt
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Install JAX wheels from package index
|
|
||||||
run: |
|
|
||||||
echo "Installing JAX packages:"
|
|
||||||
echo " JAXLIB_VERSION=${JAXLIB_VERSION}"
|
|
||||||
echo " JAX_PLUGIN_VERSION=${JAX_PLUGIN_VERSION}"
|
|
||||||
echo " JAX_PJRT_VERSION=${JAX_PJRT_VERSION}"
|
|
||||||
echo " JAX_VERSION=${JAX_VERSION}"
|
|
||||||
echo " JAX_PLUGIN_PACKAGE=${JAX_PLUGIN_PACKAGE}"
|
|
||||||
echo " JAX_PJRT_PACKAGE=${JAX_PJRT_PACKAGE}"
|
|
||||||
# Install plugin/pjrt from the GPU-family index
|
|
||||||
pip install --index-url "${{ env.WHEEL_INDEX_URL }}" \
|
|
||||||
"${JAX_PLUGIN_PACKAGE}==${JAX_PLUGIN_VERSION}" \
|
|
||||||
"${JAX_PJRT_PACKAGE}==${JAX_PJRT_VERSION}"
|
|
||||||
# For JAX <= 0.9.0, jaxlib is built and installed from GPU index.
|
|
||||||
# For JAX >= 0.9.1, jaxlib is not built - install jax and jaxlib from upstream PyPI.
|
|
||||||
if [ -n "${JAXLIB_VERSION}" ]; then
|
|
||||||
pip install --index-url "${{ env.WHEEL_INDEX_URL }}" "jaxlib==${JAXLIB_VERSION}"
|
|
||||||
pip install jax==${JAX_VERSION}
|
|
||||||
else
|
|
||||||
pip install jax==${JAX_VERSION} jaxlib==${JAX_VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Run JAX tests
|
|
||||||
env:
|
|
||||||
JAX_PLATFORMS: rocm
|
|
||||||
HIP_DEVICE_LIB_PATH: /opt/rocm/lib/llvm/amdgcn/bitcode
|
|
||||||
JAX_ROCM_PLUGIN_INTERNAL_BITCODE_PATH: /opt/rocm/lib/llvm/amdgcn/bitcode
|
|
||||||
JAX_ROCM_PLUGIN_INTERNAL_LLD_PATH: /opt/rocm/lib/llvm/bin
|
|
||||||
run: |
|
|
||||||
pytest jax/tests/multi_device_test.py -q --log-cli-level=INFO
|
|
||||||
pytest jax/tests/core_test.py -q --log-cli-level=INFO
|
|
||||||
pytest jax/tests/util_test.py -q --log-cli-level=INFO
|
|
||||||
pytest jax/tests/scipy_stats_test.py -q --log-cli-level=INFO
|
|
||||||
@@ -1,304 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test Multi-Arch Linux JAX Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
test_amdgpu_family:
|
|
||||||
description: GPU family to test (e.g. gfx94X-dcgpu, gfx110X-all)
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
package_index_url:
|
|
||||||
description: Base URL for the multi-arch Python package index
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm version
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: "Release type"
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
python_version:
|
|
||||||
description: Python version to test
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
jax_ref:
|
|
||||||
description: "rocm-jax repository ref/branch to check out"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
jax_version:
|
|
||||||
description: "Built JAX version"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jaxlib_version:
|
|
||||||
description: "Built jaxlib version"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_plugin_version:
|
|
||||||
description: "Built jax_rocm7_plugin version"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
jax_pjrt_version:
|
|
||||||
description: "Built jax_rocm7_pjrt version"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
test_runs_on:
|
|
||||||
description: Runner label to execute tests on
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
test_amdgpu_family:
|
|
||||||
description: GPU family to test (e.g. gfx94X-dcgpu, gfx110X-all)
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
package_index_url:
|
|
||||||
description: Base URL for the multi-arch Python package index
|
|
||||||
type: string
|
|
||||||
default: "https://rocm.nightlies.amd.com/whl-multi-arch/"
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm version
|
|
||||||
type: string
|
|
||||||
default: "7.14.0.dev0"
|
|
||||||
rocm_package_find_links_url:
|
|
||||||
description: "URL for pip --find-links to install ROCm packages for the JAX manylinux build."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
release_type:
|
|
||||||
description: 'Release type; developer-triggered jobs should use "dev".'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- dev
|
|
||||||
default: dev
|
|
||||||
python_version:
|
|
||||||
description: Python version to test
|
|
||||||
type: string
|
|
||||||
default: "3.13"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
jax_ref:
|
|
||||||
description: "rocm-jax repository ref/branch to check out"
|
|
||||||
type: string
|
|
||||||
default: "rocm-jaxlib-v0.11.0"
|
|
||||||
jax_version:
|
|
||||||
description: "Built JAX version"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
jaxlib_version:
|
|
||||||
description: "Built jaxlib version"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
jax_plugin_version:
|
|
||||||
description: "Built jax_rocm7_plugin version"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
jax_pjrt_version:
|
|
||||||
description: "Built jax_rocm7_pjrt version"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
test_runs_on:
|
|
||||||
description: Runner label to use. The selected runner should have a GPU supported by test_amdgpu_family
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_jax_wheels:
|
|
||||||
name: Test JAX | ${{ inputs.jax_ref }} | Python ${{ inputs.python_version }} | ${{ inputs.test_amdgpu_family }}
|
|
||||||
runs-on: ${{ inputs.test_runs_on }}
|
|
||||||
timeout-minutes: 120
|
|
||||||
|
|
||||||
container:
|
|
||||||
image: ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:405945a40deaff9db90b9839c0f41d4cba4a383c1a7459b28627047bf6302a26
|
|
||||||
options: >-
|
|
||||||
--shm-size=128g
|
|
||||||
--device /dev/kfd
|
|
||||||
--device /dev/dri
|
|
||||||
--group-add render
|
|
||||||
--group-add video
|
|
||||||
--user root
|
|
||||||
--env-file /etc/podinfo/gha-gpu-isolation-settings
|
|
||||||
--dns 8.8.8.8
|
|
||||||
--dns 8.8.4.4
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
env:
|
|
||||||
VIRTUAL_ENV: ${{ github.workspace }}/.venv
|
|
||||||
PYTHON_VERSION: ${{ inputs.python_version }}
|
|
||||||
WHEEL_INDEX_URL: ${{ inputs.package_index_url }}
|
|
||||||
ROCM_PACKAGE_FIND_LINKS_URL: ${{ inputs.rocm_package_find_links_url }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Checkout rocm-jax
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: rocm-jax
|
|
||||||
repository: ROCm/rocm-jax
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
- name: Checkout JAX
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
path: jax
|
|
||||||
repository: ROCm/jax
|
|
||||||
ref: ${{ inputs.jax_ref }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
check-latest: true
|
|
||||||
|
|
||||||
- name: System deps, venv configure
|
|
||||||
run: |
|
|
||||||
python3 -m venv "${VIRTUAL_ENV}"
|
|
||||||
echo "PATH=${VIRTUAL_ENV}/bin:${PATH}" >> "$GITHUB_ENV"
|
|
||||||
python3 build_tools/setup_venv.py \
|
|
||||||
"${VIRTUAL_ENV}" \
|
|
||||||
--activate-in-future-github-actions-steps
|
|
||||||
|
|
||||||
- name: Install base JAX test requirements
|
|
||||||
run: |
|
|
||||||
pip install -r external-builds/jax/requirements-jax.txt
|
|
||||||
|
|
||||||
- name: Determine JAX package versions
|
|
||||||
run: |
|
|
||||||
# The plugin/pjrt wheels embed the ROCm major version in their package
|
|
||||||
# name (jax_rocm7_*, jax_rocm10_*), tracking the ROCm release they were
|
|
||||||
# built against.
|
|
||||||
rocm_major="${{ inputs.rocm_version }}"
|
|
||||||
rocm_major="${rocm_major%%.*}"
|
|
||||||
if [ -z "${rocm_major}" ]; then
|
|
||||||
echo "::error::rocm_version is required to determine the JAX plugin package name"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "JAX_PLUGIN_PACKAGE=jax_rocm${rocm_major}_plugin" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_PJRT_PACKAGE=jax_rocm${rocm_major}_pjrt" >> "$GITHUB_ENV"
|
|
||||||
|
|
||||||
if [ -n "${{ inputs.jax_plugin_version }}" ] && [ -n "${{ inputs.jax_version }}" ]; then
|
|
||||||
echo "JAX_VERSION=${{ inputs.jax_version }}" >> "$GITHUB_ENV"
|
|
||||||
echo "JAXLIB_VERSION=${{ inputs.jaxlib_version }}" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_PLUGIN_VERSION=${{ inputs.jax_plugin_version }}" >> "$GITHUB_ENV"
|
|
||||||
echo "JAX_PJRT_VERSION=${{ inputs.jax_pjrt_version }}" >> "$GITHUB_ENV"
|
|
||||||
else
|
|
||||||
pip install packaging
|
|
||||||
|
|
||||||
python build_tools/github_actions/compute_jax_package_version.py \
|
|
||||||
--rocm-version "${{ inputs.rocm_version }}" \
|
|
||||||
--jax-requirements rocm-jax/build/requirements.txt
|
|
||||||
fi
|
|
||||||
- name: Compute ROCm device extras
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.test_amdgpu_family }}" \
|
|
||||||
--output-mode=device-extras
|
|
||||||
|
|
||||||
- name: Install ROCm packages
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip
|
|
||||||
|
|
||||||
pkg="rocm[libraries]"
|
|
||||||
if [ -n "${{ steps.expand.outputs.device_extras }}" ]; then
|
|
||||||
pkg="${pkg%]},${{ steps.expand.outputs.device_extras }}]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
python -m pip install --pre \
|
|
||||||
--find-links "${ROCM_PACKAGE_FIND_LINKS_URL}" \
|
|
||||||
"${pkg}==${{ inputs.rocm_version }}"
|
|
||||||
|
|
||||||
echo "ROCM_ROOT=$(rocm-sdk path --root)" >> "$GITHUB_ENV"
|
|
||||||
|
|
||||||
- name: Install JAX wheels from package index
|
|
||||||
run: |
|
|
||||||
echo "Installing from:"
|
|
||||||
echo " ${WHEEL_INDEX_URL}"
|
|
||||||
|
|
||||||
pip install \
|
|
||||||
--index-url "${WHEEL_INDEX_URL}" \
|
|
||||||
"${JAX_PLUGIN_PACKAGE}==${JAX_PLUGIN_VERSION}" \
|
|
||||||
"${JAX_PJRT_PACKAGE}==${JAX_PJRT_VERSION}"
|
|
||||||
|
|
||||||
if [ -n "${JAXLIB_VERSION}" ]; then
|
|
||||||
pip install \
|
|
||||||
--index-url "${WHEEL_INDEX_URL}" \
|
|
||||||
"jaxlib==${JAXLIB_VERSION}"
|
|
||||||
|
|
||||||
pip install "jax==${JAX_VERSION}"
|
|
||||||
else
|
|
||||||
pip install \
|
|
||||||
"jax==${JAX_VERSION}" \
|
|
||||||
"jaxlib==${JAX_VERSION}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Run JAX tests
|
|
||||||
timeout-minutes: 60
|
|
||||||
env:
|
|
||||||
# Avoid large upfront GPU memory reservation.
|
|
||||||
XLA_PYTHON_CLIENT_PREALLOCATE: "false"
|
|
||||||
|
|
||||||
# Set XLA allocator. JAX 0.10.2 uses the default allocator; all
|
|
||||||
# other releases keep the platform allocator.
|
|
||||||
XLA_PYTHON_CLIENT_ALLOCATOR: ${{ inputs.jax_ref == 'rocm-jaxlib-v0.10.2' && 'default' || 'platform' }}
|
|
||||||
|
|
||||||
# JAX 0.10.2 only: ROCm/HIP runtime tuning to avoid a pytest
|
|
||||||
# slowdown/hang; other releases keep the runtime defaults.
|
|
||||||
# TODO:(magaonka-amd) remove these as soon as fixes from corresponding system teams lands.
|
|
||||||
ROCPROFILER_QUEUE_INTERPOSITION: ${{ inputs.jax_ref == 'rocm-jaxlib-v0.10.2' && '0' }}
|
|
||||||
DEBUG_HIP_DYNAMIC_QUEUES: ${{ inputs.jax_ref == 'rocm-jaxlib-v0.10.2' && '0' }}
|
|
||||||
HSA_NO_SCRATCH_RECLAIM: ${{ inputs.jax_ref == 'rocm-jaxlib-v0.10.2' && '1' }}
|
|
||||||
|
|
||||||
# Reduce compilation/autotune memory pressure.
|
|
||||||
XLA_FLAGS: >-
|
|
||||||
--xla_gpu_force_compilation_parallelism=1
|
|
||||||
--xla_gpu_enable_nccl_comm_splitting=false
|
|
||||||
--xla_gpu_enable_command_buffer=
|
|
||||||
|
|
||||||
run: |
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
unset ROCM_ROOT
|
|
||||||
unset HIP_DEVICE_LIB_PATH
|
|
||||||
unset JAX_ROCM_PLUGIN_INTERNAL_BITCODE_PATH
|
|
||||||
unset JAX_ROCM_PLUGIN_INTERNAL_LLD_PATH
|
|
||||||
|
|
||||||
python -c "import jax; print(jax.local_devices())"
|
|
||||||
|
|
||||||
echo "=== Starting full test suite ==="
|
|
||||||
pytest jax/tests/multi_device_test.py -q --log-cli-level=INFO
|
|
||||||
pytest jax/tests/core_test.py -q --log-cli-level=INFO
|
|
||||||
pytest jax/tests/util_test.py -q --log-cli-level=INFO
|
|
||||||
pytest jax/tests/scipy_stats_test.py -q --log-cli-level=INFO
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test Native Linux Packages Install
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
package_install_url:
|
|
||||||
description: "Package installation URL (includes architecture subdirectory for RPM)."
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: "Release Type (ci, dev, nightly, prerelease)."
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
gpg_key_url:
|
|
||||||
description: "GPG key URL for signed repos"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
os_profile:
|
|
||||||
description: OS profile (e.g., ubuntu2404, rhel8, rhel10, sles16). Package type (deb/rpm) is derived from this.
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
artifact_group:
|
|
||||||
description: Artifact group to extract GPU architecture from (e.g., gfx94X-dcgpu). Default gfx94X-dcgpu.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
install_prefix:
|
|
||||||
description: Installation prefix path (optional, defaults to /opt/rocm/core).
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "/opt/rocm/core"
|
|
||||||
test_type:
|
|
||||||
description: "Test type: quick, standard, comprehensive, full, install, or sanity. CI test types are mapped to native install test modes."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`"
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow"
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (e.g. 'asan'). Changes expected package names to match variant-suffixed packages."
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
package_install_url:
|
|
||||||
description: "Package installation URL (includes architecture subdirectory for RPM)"
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
release_type:
|
|
||||||
description: 'Release type: "ci" or "dev"'
|
|
||||||
required: true
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- ci
|
|
||||||
- dev
|
|
||||||
gpg_key_url:
|
|
||||||
description: "GPG key URL for signed repos"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
os_profile:
|
|
||||||
description: OS profile (package type deb/rpm is derived from this).
|
|
||||||
required: true
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- ubuntu2404
|
|
||||||
- rhel8
|
|
||||||
- rhel10
|
|
||||||
- sles16
|
|
||||||
artifact_group:
|
|
||||||
description: Artifact group to extract GPU architecture from (e.g., gfx94X-dcgpu)
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
install_prefix:
|
|
||||||
description: Installation prefix path
|
|
||||||
type: string
|
|
||||||
default: "/opt/rocm/core"
|
|
||||||
required: false
|
|
||||||
test_type:
|
|
||||||
description: "Test type: quick, standard, comprehensive, full, install, or sanity (optional; leave empty for sanity)"
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`"
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow"
|
|
||||||
type: string
|
|
||||||
build_variant:
|
|
||||||
description: "Build variant (e.g. 'asan'). Changes expected package names."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Test - Native Linux packages Install (${{ inputs.os_profile }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prepare_install_context:
|
|
||||||
name: Prepare install context (package type, GPU arch, container image)
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
pkg_type: ${{ steps.derive.outputs.pkg_type }}
|
|
||||||
gfx_arch: ${{ steps.derive.outputs.gfx_arch }}
|
|
||||||
container_image: ${{ steps.derive.outputs.container_image }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Derive package type, GPU architecture, and container image
|
|
||||||
id: derive
|
|
||||||
run: |
|
|
||||||
case "${{ inputs.os_profile }}" in
|
|
||||||
ubuntu*|debian*) PKG_TYPE="deb" ;;
|
|
||||||
*) PKG_TYPE="rpm" ;;
|
|
||||||
esac
|
|
||||||
echo "pkg_type=${PKG_TYPE}" >> $GITHUB_OUTPUT
|
|
||||||
python build_tools/packaging/linux/get_url_repo_params.py extract-gfx-arch \
|
|
||||||
--artifact-group "${{ inputs.artifact_group }}"
|
|
||||||
python build_tools/packaging/linux/get_url_repo_params.py get-container-image \
|
|
||||||
--os-profile "${{ inputs.os_profile }}"
|
|
||||||
|
|
||||||
test_native_linux_packages_install:
|
|
||||||
name: Test Native Linux Packages Installation - ${{ inputs.os_profile }}
|
|
||||||
needs: [prepare_install_context]
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
runs-on: ${{ github.repository_owner == 'ROCm' && 'linux-gfx942-1gpu-ccs-csp-ossci-rocm' || 'ubuntu-24.04' }}
|
|
||||||
container:
|
|
||||||
image: ${{ needs.prepare_install_context.outputs.container_image }}
|
|
||||||
options: --ipc host
|
|
||||||
env:
|
|
||||||
REPO_URL: ${{ inputs.package_install_url }}
|
|
||||||
GPG_KEY_URL: ${{ inputs.gpg_key_url || '' }}
|
|
||||||
OS_PROFILE: ${{ inputs.os_profile }}
|
|
||||||
PKG_TYPE: ${{ needs.prepare_install_context.outputs.pkg_type }}
|
|
||||||
RELEASE_TYPE: ${{ inputs.release_type }}
|
|
||||||
GFX_ARCH: ${{ needs.prepare_install_context.outputs.gfx_arch }}
|
|
||||||
INSTALL_PREFIX: ${{ inputs.install_prefix || '/opt/rocm/core' }}
|
|
||||||
TEST_TYPE: ${{ inputs.test_type }}
|
|
||||||
BUILD_VARIANT: ${{ inputs.build_variant }}
|
|
||||||
steps:
|
|
||||||
- name: Install System Prerequisites
|
|
||||||
run: |
|
|
||||||
echo "Installing prerequisites for ${{ env.PKG_TYPE }} on container"
|
|
||||||
|
|
||||||
if [ "${{ env.PKG_TYPE }}" = "deb" ]; then
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y \
|
|
||||||
wget \
|
|
||||||
curl \
|
|
||||||
ca-certificates \
|
|
||||||
gpg \
|
|
||||||
lsb-release
|
|
||||||
if [ "$TEST_TYPE" = "full" ] || [ "$TEST_TYPE" = "comprehensive" ]; then
|
|
||||||
echo "Extra OS packages for --test-type full/comprehensive (e.g. rdhc): pciutils, kmod, apt-utils"
|
|
||||||
sudo apt install -y pciutils kmod apt-utils
|
|
||||||
fi
|
|
||||||
elif [[ "${{ inputs.os_profile }}" == sles* ]]; then
|
|
||||||
# SLES prerequisites (uses BCI base - zypper)
|
|
||||||
zypper refresh
|
|
||||||
zypper install -y \
|
|
||||||
wget \
|
|
||||||
curl \
|
|
||||||
ca-certificates \
|
|
||||||
gpg2 \
|
|
||||||
lsb-release \
|
|
||||||
update-alternatives
|
|
||||||
if [ "$TEST_TYPE" = "full" ] || [ "$TEST_TYPE" = "comprehensive" ]; then
|
|
||||||
echo "Extra OS packages for --test-type full/comprehensive on SLES (e.g. rdhc): pciutils, kmod"
|
|
||||||
zypper install -y pciutils kmod
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# rpm (non-SLES on RHEL/UBI); --allowerasing for curl vs curl-minimal on UBI
|
|
||||||
dnf install -y --allowerasing \
|
|
||||||
wget \
|
|
||||||
curl \
|
|
||||||
ca-certificates \
|
|
||||||
gnupg2 \
|
|
||||||
dnf-plugins-core
|
|
||||||
if [ "$TEST_TYPE" = "full" ] || [ "$TEST_TYPE" = "comprehensive" ]; then
|
|
||||||
echo "Extra OS packages for --test-type full/comprehensive (e.g. rdhc): pciutils, kmod"
|
|
||||||
dnf install -y --allowerasing pciutils kmod
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Setup Python and install runtime
|
|
||||||
run: |
|
|
||||||
bash build_tools/packaging/linux/setup_python_cmd.sh \
|
|
||||||
--os-profile "${{ inputs.os_profile }}" \
|
|
||||||
--install-runtime \
|
|
||||||
--output-format github
|
|
||||||
|
|
||||||
- name: Install Python Dependencies
|
|
||||||
run: |
|
|
||||||
# Use venv for all distros for consistency and future-proofing (PEP 668)
|
|
||||||
$PYTHON_CMD -m venv /tmp/test-venv
|
|
||||||
/tmp/test-venv/bin/python -m pip install --upgrade pip
|
|
||||||
/tmp/test-venv/bin/python -m pip install -r build_tools/packaging/linux/tests/requirements.txt
|
|
||||||
echo "PYTHON_CMD=/tmp/test-venv/bin/python" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Package Installation Test
|
|
||||||
run: |
|
|
||||||
echo "TEST - OS:${{ inputs.os_profile }} REPO:${{ env.REPO_URL }} Arch:${{ env.GFX_ARCH }} Type:${{ env.RELEASE_TYPE }}"
|
|
||||||
$PYTHON_CMD -m pytest build_tools/packaging/linux/native_linux_package_install_test.py -vv --tb=long -s
|
|
||||||
@@ -1,216 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test PyTorch Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
description: GPU family to test
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
test_runs_on:
|
|
||||||
description: Runner label to use. The selected runner should have a GPU supported by amdgpu_family
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
package_index_url:
|
|
||||||
description: Python package index URL to test, typically nightly/dev URL with a "whl-multi-arch" subdir
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "https://rocm.nightlies.amd.com/whl-multi-arch/"
|
|
||||||
python_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
torch_version:
|
|
||||||
description: torch package version to install. (e.g. "2.7.1+rocm7.10.0a20251120")
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout test sources from. (e.g. "nightly", or "release/2.7")
|
|
||||||
type: string
|
|
||||||
default: "release/2.7"
|
|
||||||
device_query:
|
|
||||||
description: >-
|
|
||||||
GPU candidate-set selection (--device-query, stage 1). "unique": one
|
|
||||||
device per architecture. "all": every device of each architecture.
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- "unique"
|
|
||||||
- "all"
|
|
||||||
default: "unique"
|
|
||||||
gpu_policy:
|
|
||||||
description: >-
|
|
||||||
How many candidate GPUs are made visible (--gpu-policy, stage 2).
|
|
||||||
"single": one GPU visible at a time. "all": all candidate GPUs visible
|
|
||||||
at once.
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- "single"
|
|
||||||
- "all"
|
|
||||||
default: "single"
|
|
||||||
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
test_runs_on:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
package_index_url:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
torch_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
pytorch_git_ref:
|
|
||||||
type: string
|
|
||||||
default: "release/2.7"
|
|
||||||
device_query:
|
|
||||||
description: >-
|
|
||||||
--device-query. "unique": one device per architecture; "all": every
|
|
||||||
device of each architecture.
|
|
||||||
type: string
|
|
||||||
default: "unique"
|
|
||||||
gpu_policy:
|
|
||||||
description: >-
|
|
||||||
--gpu-policy. "single": one GPU visible at a time; "all": all candidate
|
|
||||||
GPUs visible at once.
|
|
||||||
type: string
|
|
||||||
default: "single"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow."
|
|
||||||
type: string
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Test PyTorch (${{ inputs.amdgpu_family }}, ${{ inputs.torch_version}}, ${{ inputs.test_runs_on }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_wheels:
|
|
||||||
name: Test PyTorch | ${{ inputs.amdgpu_family }}
|
|
||||||
runs-on: ${{ inputs.test_runs_on }}
|
|
||||||
container:
|
|
||||||
image: ${{ contains(inputs.test_runs_on, 'linux') && 'ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:405945a40deaff9db90b9839c0f41d4cba4a383c1a7459b28627047bf6302a26' || null }}
|
|
||||||
options: --ipc host
|
|
||||||
--group-add video
|
|
||||||
--device /dev/kfd
|
|
||||||
--device /dev/dri
|
|
||||||
--group-add 992
|
|
||||||
--group-add 110
|
|
||||||
--env-file /etc/podinfo/gha-gpu-isolation-settings
|
|
||||||
--user 0:0 # Running as root, by recommendation of GitHub: https://docs.github.com/en/actions/reference/workflows-and-actions/dockerfile-support#user
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
VENV_DIR: ${{ github.workspace }}/.venv
|
|
||||||
AMDGPU_FAMILY: ${{ inputs.amdgpu_family }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
# Multi-arch packages use pip extras (e.g. torch[device-gfx942]) to
|
|
||||||
# select GPU-specific device packages. Expand the family to get the
|
|
||||||
# comma-separated device extras string for pip install.
|
|
||||||
- name: Expand GPU family to device extras
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_family }}" \
|
|
||||||
--output-mode=device-extras
|
|
||||||
|
|
||||||
# TODO: also upload and reference test report together with this logging?
|
|
||||||
- name: Summarize workflow inputs
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/summarize_test_pytorch_workflow.py \
|
|
||||||
--torch-version=${{ inputs.torch_version }} \
|
|
||||||
--pytorch-git-ref=${{ inputs.pytorch_git_ref }} \
|
|
||||||
--index-url=${{ inputs.package_index_url }} \
|
|
||||||
--device-extras="${{ steps.expand.outputs.device_extras }}"
|
|
||||||
|
|
||||||
- name: Set git options
|
|
||||||
run: |
|
|
||||||
git config --global core.longpaths true
|
|
||||||
|
|
||||||
# Here we checkout the same version of PyTorch that wheels were built from
|
|
||||||
# so we have the right set of test source files. We _probably_ don't need
|
|
||||||
# to run HIPIFY, apply patches, or fetch submodules, so we skip those
|
|
||||||
# steps to save time.
|
|
||||||
# TODO(#5110): Accept manifest_url and use checkout_from_manifest.py
|
|
||||||
# --no-hipify --no-submodules so tests use the exact source commit and
|
|
||||||
# related repository pins that produced the package under test.
|
|
||||||
- name: Checkout PyTorch Source Repos from nightly branch
|
|
||||||
if: ${{ (inputs.pytorch_git_ref == 'nightly') }}
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--gitrepo-origin https://github.com/pytorch/pytorch.git \
|
|
||||||
--repo-hashtag nightly \
|
|
||||||
--no-hipify \
|
|
||||||
--no-submodules
|
|
||||||
|
|
||||||
- name: Checkout PyTorch Source Repos from stable branch
|
|
||||||
if: ${{ (inputs.pytorch_git_ref != 'nightly') }}
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--gitrepo-origin https://github.com/ROCm/pytorch.git \
|
|
||||||
--repo-hashtag ${{ inputs.pytorch_git_ref }} \
|
|
||||||
--no-hipify \
|
|
||||||
--no-submodules
|
|
||||||
|
|
||||||
- name: Set up virtual environment
|
|
||||||
timeout-minutes: 15
|
|
||||||
run: |
|
|
||||||
python build_tools/setup_venv.py ${VENV_DIR} \
|
|
||||||
--packages "torch[${{ steps.expand.outputs.device_extras }}]==${{ inputs.torch_version }}" \
|
|
||||||
--index-url=${{ inputs.package_index_url }} \
|
|
||||||
--activate-in-future-github-actions-steps
|
|
||||||
|
|
||||||
- name: Install test requirements
|
|
||||||
run: |
|
|
||||||
python -m pip install -r external-builds/pytorch/requirements-test.txt
|
|
||||||
python -m pip install -r external-builds/pytorch/pytorch/.ci/docker/requirements-ci.txt
|
|
||||||
pip freeze
|
|
||||||
|
|
||||||
- name: Run rocm-sdk sanity tests
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: |
|
|
||||||
rocm-sdk test
|
|
||||||
|
|
||||||
- name: Run PyTorch smoketests
|
|
||||||
timeout-minutes: 10
|
|
||||||
run: |
|
|
||||||
python ./external-builds/pytorch/run_pytorch_smoke_tests.py -- \
|
|
||||||
--log-cli-level=INFO \
|
|
||||||
-v
|
|
||||||
|
|
||||||
- name: Run PyTorch tests
|
|
||||||
timeout-minutes: 120
|
|
||||||
run: |
|
|
||||||
python ./external-builds/pytorch/run_pytorch_tests.py \
|
|
||||||
--device-query "${{ inputs.device_query }}" \
|
|
||||||
--gpu-policy "${{ inputs.gpu_policy }}" \
|
|
||||||
-- \
|
|
||||||
--continue-on-collection-errors \
|
|
||||||
--import-mode=importlib \
|
|
||||||
-v
|
|
||||||
@@ -1,398 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test PyTorch Wheels (Full Suite)
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
description: GPU family to test
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
test_runs_on:
|
|
||||||
description: Runner label to use. The selected runner should have a GPU supported by amdgpu_family
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
test_runs_on_multi_gpu:
|
|
||||||
description: Runner label for multi-GPU test configs (e.g. distributed). Corresponds to test-runs-on-multi-gpu in amdgpu_family_matrix.py
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-8gpu-ossci-rocm"
|
|
||||||
package_index_url:
|
|
||||||
description: Python package index URL to test, typically nightly/dev URL with a "whl-multi-arch" subdir
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "https://rocm.nightlies.amd.com/whl-multi-arch/"
|
|
||||||
python_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
torch_version:
|
|
||||||
description: torch package version to install. (e.g. "2.7.1+rocm7.10.0a20251120")
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
pytorch_git_ref:
|
|
||||||
description: PyTorch ref to checkout test sources from. (e.g. "nightly", or "release/2.9")
|
|
||||||
type: string
|
|
||||||
default: "nightly"
|
|
||||||
pytorch_git_repo:
|
|
||||||
description: "PyTorch git repo to checkout test sources from. (Options: rocm/pytorch, pytorch/pytorch)"
|
|
||||||
type: string
|
|
||||||
default: "pytorch/pytorch"
|
|
||||||
test_configs:
|
|
||||||
description: Space-separated test configs to run (e.g. "default", "default distributed", "default distributed inductor")
|
|
||||||
type: string
|
|
||||||
default: "default distributed inductor"
|
|
||||||
tests_to_include:
|
|
||||||
description: Space-separated list of test modules to run (passed as TESTS_TO_INCLUDE to run_test.py). Leave empty to run all tests.
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
device_query:
|
|
||||||
description: >-
|
|
||||||
GPU candidate-set selection (--device-query, stage 1). "unique": one
|
|
||||||
device per architecture. "all": every device of each architecture.
|
|
||||||
"auto": derive from the test config ("all" for distributed, "unique"
|
|
||||||
otherwise).
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- "auto"
|
|
||||||
- "unique"
|
|
||||||
- "all"
|
|
||||||
default: "auto"
|
|
||||||
gpu_policy:
|
|
||||||
description: >-
|
|
||||||
How many candidate GPUs are made visible (--gpu-policy, stage 2).
|
|
||||||
"single": one GPU visible at a time. "all": all candidate GPUs visible
|
|
||||||
at once. "auto": derive from the test config ("all" for distributed,
|
|
||||||
"single" otherwise).
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- "auto"
|
|
||||||
- "single"
|
|
||||||
- "all"
|
|
||||||
default: "auto"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow."
|
|
||||||
type: string
|
|
||||||
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
test_runs_on:
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
test_runs_on_multi_gpu:
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-8gpu-ossci-rocm"
|
|
||||||
package_index_url:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
torch_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
pytorch_git_ref:
|
|
||||||
type: string
|
|
||||||
default: "nightly"
|
|
||||||
pytorch_git_repo:
|
|
||||||
type: string
|
|
||||||
default: "pytorch/pytorch"
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Otherwise, defaults to `github.repository`."
|
|
||||||
type: string
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag or SHA to checkout. Defaults to the reference or SHA that triggered the workflow."
|
|
||||||
type: string
|
|
||||||
test_configs:
|
|
||||||
type: string
|
|
||||||
default: "default distributed inductor"
|
|
||||||
tests_to_include:
|
|
||||||
description: Space-separated list of test modules to run (passed as TESTS_TO_INCLUDE to run_test.py). Leave empty to run all tests.
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
device_query:
|
|
||||||
description: >-
|
|
||||||
--device-query. "unique": one device per architecture; "all": every
|
|
||||||
device of each architecture; "auto": derive from the test config.
|
|
||||||
type: string
|
|
||||||
default: "auto"
|
|
||||||
gpu_policy:
|
|
||||||
description: >-
|
|
||||||
--gpu-policy. "single": one GPU visible at a time; "all": all candidate
|
|
||||||
GPUs visible at once; "auto": derive from the test config.
|
|
||||||
type: string
|
|
||||||
default: "auto"
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Test PyTorch Full (${{ inputs.amdgpu_family }}, ${{ inputs.torch_version}}, ${{ inputs.test_runs_on }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
prepare_matrix:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
outputs:
|
|
||||||
matrix: ${{ steps.generate.outputs.matrix }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- id: generate
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/generate_test_sharding_matrix.py \
|
|
||||||
--test-configs '${{ inputs.test_configs }}' \
|
|
||||||
--default-runner '${{ inputs.test_runs_on }}' \
|
|
||||||
--multi-gpu-runner '${{ inputs.test_runs_on_multi_gpu }}'
|
|
||||||
|
|
||||||
test_wheels:
|
|
||||||
needs: prepare_matrix
|
|
||||||
name: Test PyTorch Full | ${{ inputs.amdgpu_family }} / ${{ matrix.test_config }} (shard ${{ matrix.shard }}/${{ matrix.num_shards }})
|
|
||||||
runs-on: ${{ matrix.runs_on }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix: ${{ fromJSON(needs.prepare_matrix.outputs.matrix) }}
|
|
||||||
container:
|
|
||||||
image: ${{ contains(inputs.test_runs_on, 'linux') && 'ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:405945a40deaff9db90b9839c0f41d4cba4a383c1a7459b28627047bf6302a26' || null }}
|
|
||||||
# SYS_PTRACE is required by PyTorch's test infra which uses gdb to
|
|
||||||
# collect stack traces on segfaults and hangs (torch/testing/_internal).
|
|
||||||
options: --shm-size=10g
|
|
||||||
--cap-add=SYS_PTRACE
|
|
||||||
--group-add video
|
|
||||||
--device /dev/kfd
|
|
||||||
--device /dev/dri
|
|
||||||
--group-add 992
|
|
||||||
--group-add 110
|
|
||||||
--env-file /etc/podinfo/gha-gpu-isolation-settings
|
|
||||||
--user 0:0 # Running as root, by recommendation of GitHub: https://docs.github.com/en/actions/reference/workflows-and-actions/dockerfile-support#user
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
# These env vars are set at the job level so they are available to all steps
|
|
||||||
# (e.g. export_test_times.py, run_pytorch_tests_full.py). The Python script
|
|
||||||
# uses os.environ.setdefault() so values set here take precedence.
|
|
||||||
env:
|
|
||||||
VENV_DIR: ${{ github.workspace }}/.venv
|
|
||||||
AMDGPU_FAMILY: ${{ inputs.amdgpu_family }}
|
|
||||||
SHARD_NUMBER: ${{ matrix.shard }}
|
|
||||||
NUM_TEST_SHARDS: ${{ matrix.num_shards }}
|
|
||||||
CI: "1"
|
|
||||||
PYTORCH_TEST_WITH_ROCM: "1"
|
|
||||||
PYTORCH_TESTING_DEVICE_ONLY_FOR: "cuda"
|
|
||||||
# Pin OpenBLAS threads to 1 for deterministic reductions; without this,
|
|
||||||
# OpenBLAS defaults to the number of CPU cores, which causes
|
|
||||||
# non-deterministic results in tests like test_entropy_monte_carlo.
|
|
||||||
OPENBLAS_NUM_THREADS: "1"
|
|
||||||
PYTORCH_NUM_PYTEST_RERUNS: "2"
|
|
||||||
TEST_CONFIG: ${{ matrix.test_config }}
|
|
||||||
TESTS_TO_INCLUDE: ${{ inputs.tests_to_include }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
# Multi-arch packages use pip extras (e.g. torch[device-gfx942]) to
|
|
||||||
# select GPU-specific device packages. Expand the family to get the
|
|
||||||
# comma-separated device extras string for pip install.
|
|
||||||
- name: Expand GPU family to device extras
|
|
||||||
id: expand
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_family }}" \
|
|
||||||
--output-mode=device-extras
|
|
||||||
|
|
||||||
# safe.directory must be set before Runner Health Status
|
|
||||||
- name: Adjust git config
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory $PWD
|
|
||||||
git config fetch.parallel 10
|
|
||||||
git config --global core.longpaths true
|
|
||||||
|
|
||||||
# Here we checkout the same version of PyTorch that wheels were built from
|
|
||||||
# so we have the right set of test source files. We _probably_ don't need
|
|
||||||
# to run HIPIFY, apply patches, or fetch submodules, so we skip those
|
|
||||||
# steps to save time.
|
|
||||||
- name: Checkout PyTorch Source
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/pytorch_torch_repo.py checkout \
|
|
||||||
--gitrepo-origin https://github.com/${{ inputs.pytorch_git_repo }}.git \
|
|
||||||
--repo-hashtag ${{ inputs.pytorch_git_ref }} \
|
|
||||||
--no-hipify \
|
|
||||||
--no-submodules
|
|
||||||
|
|
||||||
- name: Set up virtual environment
|
|
||||||
timeout-minutes: 15
|
|
||||||
run: |
|
|
||||||
python build_tools/setup_venv.py ${VENV_DIR} \
|
|
||||||
--packages "torch[${{ steps.expand.outputs.device_extras }}]==${{ inputs.torch_version }} rocm[devel,${{ steps.expand.outputs.device_extras }}]" \
|
|
||||||
--index-url=${{ inputs.package_index_url }} \
|
|
||||||
--activate-in-future-github-actions-steps
|
|
||||||
|
|
||||||
- name: Initialize ROCm SDK and configure environment
|
|
||||||
run: |
|
|
||||||
rocm-sdk init
|
|
||||||
|
|
||||||
ROCM_HOME="$(rocm-sdk path --root)"
|
|
||||||
ROCM_BIN="$(rocm-sdk path --bin)"
|
|
||||||
ROCM_CMAKE_PREFIX="$(rocm-sdk path --cmake)"
|
|
||||||
|
|
||||||
echo "ROCM_HOME=${ROCM_HOME}"
|
|
||||||
echo "ROCM_BIN=${ROCM_BIN}"
|
|
||||||
echo "ROCM_CMAKE_PREFIX=${ROCM_CMAKE_PREFIX}"
|
|
||||||
|
|
||||||
ROCM_SYSDEPS="${ROCM_HOME}/lib/rocm_sysdeps"
|
|
||||||
ROCM_SYSDEPS_INCLUDE="${ROCM_SYSDEPS}/include"
|
|
||||||
ROCM_SYSDEPS_PKGCONFIG="${ROCM_SYSDEPS}/lib/pkgconfig"
|
|
||||||
|
|
||||||
# Add ROCm bin to PATH for all subsequent steps
|
|
||||||
echo "${ROCM_BIN}" >> "${GITHUB_PATH}"
|
|
||||||
|
|
||||||
# Persist ROCm env vars across workflow steps (mirrors install_rocm.sh)
|
|
||||||
echo "ROCM_PATH=${ROCM_HOME}" >> "${GITHUB_ENV}"
|
|
||||||
echo "ROCM_HOME=${ROCM_HOME}" >> "${GITHUB_ENV}"
|
|
||||||
echo "ROCM_SOURCE_DIR=${ROCM_HOME}" >> "${GITHUB_ENV}"
|
|
||||||
echo "ROCM_BIN=${ROCM_BIN}" >> "${GITHUB_ENV}"
|
|
||||||
echo "ROCM_CMAKE=${ROCM_CMAKE_PREFIX}" >> "${GITHUB_ENV}"
|
|
||||||
echo "CMAKE_PREFIX_PATH=${ROCM_CMAKE_PREFIX}:${CMAKE_PREFIX_PATH:-}" >> "${GITHUB_ENV}"
|
|
||||||
echo "HIP_DEVICE_LIB_PATH=${ROCM_HOME}/lib/llvm/amdgcn/bitcode" >> "${GITHUB_ENV}"
|
|
||||||
echo "ROCM_DEVICE_LIB_PATH=${ROCM_HOME}/lib/llvm/amdgcn/bitcode" >> "${GITHUB_ENV}"
|
|
||||||
echo "ROCM_SYSDEPS_INCLUDE=${ROCM_SYSDEPS_INCLUDE}" >> "${GITHUB_ENV}"
|
|
||||||
echo "CPLUS_INCLUDE_PATH=${ROCM_SYSDEPS_INCLUDE}:${CPLUS_INCLUDE_PATH:-}" >> "${GITHUB_ENV}"
|
|
||||||
echo "C_INCLUDE_PATH=${ROCM_SYSDEPS_INCLUDE}:${C_INCLUDE_PATH:-}" >> "${GITHUB_ENV}"
|
|
||||||
echo "PKG_CONFIG_PATH=${ROCM_SYSDEPS_PKGCONFIG}:${PKG_CONFIG_PATH:-}" >> "${GITHUB_ENV}"
|
|
||||||
echo "LD_LIBRARY_PATH=${ROCM_HOME}/lib/host-math/lib:${ROCM_SYSDEPS}/lib:${LD_LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
|
|
||||||
echo "LIBRARY_PATH=${ROCM_HOME}/lib/host-math/lib:${ROCM_SYSDEPS}/lib:${LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
|
|
||||||
echo "USE_MSLK=0" >> "${GITHUB_ENV}"
|
|
||||||
|
|
||||||
# Use ROCm's clang for JIT C++ compilation (torch.utils.cpp_extension)
|
|
||||||
# instead of requiring gcc/build-essential.
|
|
||||||
echo "CC=${ROCM_HOME}/lib/llvm/bin/clang" >> "${GITHUB_ENV}"
|
|
||||||
echo "CXX=${ROCM_HOME}/lib/llvm/bin/clang++" >> "${GITHUB_ENV}"
|
|
||||||
|
|
||||||
# export_test_times.py must run from the PyTorch repo root with
|
|
||||||
# PYTHONPATH=. because it imports internal PyTorch modules (e.g.
|
|
||||||
# tools.stats.*) that expect the repo root on sys.path.
|
|
||||||
- name: Export test times for sharding
|
|
||||||
run: |
|
|
||||||
pushd external-builds/pytorch/pytorch
|
|
||||||
PYTHONPATH=. python tools/stats/export_test_times.py
|
|
||||||
popd
|
|
||||||
|
|
||||||
- name: Install test requirements
|
|
||||||
run: |
|
|
||||||
python -m pip install -r external-builds/pytorch/requirements-test.txt
|
|
||||||
python -m pip install -r external-builds/pytorch/pytorch/.ci/docker/requirements-ci.txt
|
|
||||||
pip freeze
|
|
||||||
|
|
||||||
- name: Runner health status
|
|
||||||
run: |
|
|
||||||
./build_tools/health_status.py
|
|
||||||
|
|
||||||
- name: Run rocm-sdk sanity tests
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: |
|
|
||||||
rocm-sdk test
|
|
||||||
|
|
||||||
- name: Run PyTorch smoketests
|
|
||||||
timeout-minutes: 10
|
|
||||||
run: |
|
|
||||||
python ./external-builds/pytorch/run_pytorch_smoke_tests.py -- \
|
|
||||||
--log-cli-level=INFO \
|
|
||||||
-v
|
|
||||||
|
|
||||||
- name: (Linux) Run PyTorch full test suite
|
|
||||||
if: ${{ runner.os == 'Linux' }}
|
|
||||||
run: |
|
|
||||||
python ./external-builds/pytorch/run_pytorch_tests_full.py \
|
|
||||||
--device-query "${{ inputs.device_query }}" \
|
|
||||||
--gpu-policy "${{ inputs.gpu_policy }}" \
|
|
||||||
-- \
|
|
||||||
--continue-on-collection-errors
|
|
||||||
|
|
||||||
- name: Upload test reports
|
|
||||||
if: always()
|
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
||||||
with:
|
|
||||||
name: test-reports-${{ matrix.test_config }}-${{ matrix.shard }}-${{ matrix.num_shards }}
|
|
||||||
path: external-builds/pytorch/pytorch/test/test-reports/
|
|
||||||
if-no-files-found: ignore
|
|
||||||
retention-days: 30
|
|
||||||
|
|
||||||
# HACK: The test process does not terminate on its own gracefully,
|
|
||||||
# so we write to run_pytorch_tests_exit_code.txt and then kill the process.
|
|
||||||
# After killing the process we read the return code to signal it normally.
|
|
||||||
# See https://github.com/ROCm/TheRock/issues/999.
|
|
||||||
- name: (Windows) Run PyTorch tests
|
|
||||||
if: ${{ runner.os == 'Windows'}}
|
|
||||||
continue-on-error: true
|
|
||||||
run: |
|
|
||||||
python ./external-builds/pytorch/run_pytorch_tests.py -- \
|
|
||||||
--continue-on-collection-errors \
|
|
||||||
-v
|
|
||||||
|
|
||||||
- name: (Windows) Read and propagate exit code
|
|
||||||
if: ${{ runner.os == 'Windows'}}
|
|
||||||
run: |
|
|
||||||
if [ -f run_pytorch_tests_exit_code.txt ]; then
|
|
||||||
EXIT_CODE=$(cat run_pytorch_tests_exit_code.txt)
|
|
||||||
echo "Exit code from file: ${EXIT_CODE}"
|
|
||||||
exit ${EXIT_CODE}
|
|
||||||
else
|
|
||||||
echo "No run_pytorch_tests_exit_code.txt found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Aggregate every shard's JUnit XML test reports into a single failure table
|
|
||||||
# on the run's summary page, so all failures across configs/shards are visible
|
|
||||||
# in one place without digging into individual matrix jobs or artifacts.
|
|
||||||
test_summary:
|
|
||||||
if: always()
|
|
||||||
needs: test_wheels
|
|
||||||
name: Test Summary
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref || '' }}
|
|
||||||
sparse-checkout: external-builds/pytorch/summarize_test_results.py
|
|
||||||
|
|
||||||
- name: Download all test report artifacts
|
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
||||||
with:
|
|
||||||
path: artifacts
|
|
||||||
pattern: test-reports-*
|
|
||||||
|
|
||||||
- name: Generate combined summary
|
|
||||||
env:
|
|
||||||
AMDGPU_FAMILY: ${{ inputs.amdgpu_family }}
|
|
||||||
TORCH_VERSION: ${{ inputs.torch_version }}
|
|
||||||
PYTHON_VERSION: ${{ inputs.python_version }}
|
|
||||||
PACKAGE_INDEX_URL: ${{ inputs.package_index_url }}
|
|
||||||
PYTORCH_GIT_REF: ${{ inputs.pytorch_git_ref }}
|
|
||||||
run: |
|
|
||||||
python external-builds/pytorch/summarize_test_results.py \
|
|
||||||
--combined-dir artifacts
|
|
||||||
@@ -1,194 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Test ROCm Wheels
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
description: GPU family to test (e.g., gfx94X-dcgpu, gfx110X-all)
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "gfx94X-dcgpu"
|
|
||||||
test_runs_on:
|
|
||||||
description: Runner label to use. The selected runner should have a GPU supported by amdgpu_family
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "linux-gfx942-1gpu-ccs-csp-ossci-rocm"
|
|
||||||
package_index_url:
|
|
||||||
description: >-
|
|
||||||
Full Python package index URL for use with --index-url.
|
|
||||||
type: string
|
|
||||||
default: "https://rocm.nightlies.amd.com/whl-multi-arch/"
|
|
||||||
package_find_links_url:
|
|
||||||
description: Full Python package index URL for use with --find-links (usually instead of package_index_url)
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
default: "3.12"
|
|
||||||
rocm_version:
|
|
||||||
description: ROCm version to pip install (e.g. "7.10.0a20251124")
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
kpack_split:
|
|
||||||
description: "'true' if this is a kpack-split flat build."
|
|
||||||
type: string
|
|
||||||
default: "false"
|
|
||||||
container_image_name:
|
|
||||||
description: >-
|
|
||||||
Short, human-readable label for the container image (e.g. 'ubuntu24.04',
|
|
||||||
'ubi10', 'native'). Use 'native' (with an empty container_image_url) for
|
|
||||||
native runners like Windows.
|
|
||||||
type: string
|
|
||||||
default: "ubuntu24.04"
|
|
||||||
container_image_url:
|
|
||||||
description: >-
|
|
||||||
Container image reference (e.g. 'ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:...').
|
|
||||||
Only applied when test_runs_on targets Linux. Leave empty to run directly
|
|
||||||
on the runner (required for Windows and native Linux runners).
|
|
||||||
type: string
|
|
||||||
default: "ghcr.io/rocm/no_rocm_image_ubuntu24_04@sha256:405945a40deaff9db90b9839c0f41d4cba4a383c1a7459b28627047bf6302a26"
|
|
||||||
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
amdgpu_family:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
test_runs_on:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
package_index_url:
|
|
||||||
description: >-
|
|
||||||
Full Python package index URL for use with --index-url.
|
|
||||||
type: string
|
|
||||||
package_find_links_url:
|
|
||||||
type: string
|
|
||||||
python_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
rocm_version:
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
container_image_name:
|
|
||||||
description: >-
|
|
||||||
Short, human-readable label for the container image (e.g. 'ubuntu24.04',
|
|
||||||
'ubi10', 'native'). Callers must pass this explicitly so this workflow
|
|
||||||
stays image-agnostic. Use 'native' (with an empty container_image_url)
|
|
||||||
for native runners like Windows.
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
container_image_url:
|
|
||||||
description: >-
|
|
||||||
Container image reference. Only applied when test_runs_on targets Linux.
|
|
||||||
Pass an empty string to run directly on the runner (required for Windows
|
|
||||||
and native Linux runners).
|
|
||||||
required: true
|
|
||||||
type: string
|
|
||||||
repository:
|
|
||||||
description: "Repository to checkout. Defaults to github.repository."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
ref:
|
|
||||||
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
|
|
||||||
type: string
|
|
||||||
default: ""
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
run-name: Test ROCm Wheels (${{ inputs.amdgpu_family }}, py${{ inputs.python_version }}, ${{ inputs.rocm_version }}, ${{ inputs.test_runs_on }})
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
test_wheels:
|
|
||||||
name: Test ROCm wheels | ${{ inputs.amdgpu_family }} | py${{ inputs.python_version }} | ${{ inputs.container_image_name }}
|
|
||||||
if: ${{ inputs.test_runs_on != '' }}
|
|
||||||
runs-on: ${{ inputs.test_runs_on }}
|
|
||||||
timeout-minutes: 30
|
|
||||||
container:
|
|
||||||
image: ${{ contains(inputs.test_runs_on, 'linux') && inputs.container_image_url != '' && inputs.container_image_url || null }}
|
|
||||||
options: --ipc host
|
|
||||||
--group-add video
|
|
||||||
--device /dev/kfd
|
|
||||||
--device /dev/dri
|
|
||||||
--group-add 992
|
|
||||||
--group-add 110
|
|
||||||
--env-file /etc/podinfo/gha-gpu-isolation-settings
|
|
||||||
--user 0:0 # Running as root, by recommendation of GitHub: https://docs.github.com/en/actions/reference/workflows-and-actions/dockerfile-support#user
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
VENV_DIR: ${{ github.workspace }}/.venv
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
with:
|
|
||||||
repository: ${{ inputs.repository || github.repository }}
|
|
||||||
ref: ${{ inputs.ref }}
|
|
||||||
|
|
||||||
# actions/setup-python only has prebuilt binaries for Ubuntu
|
|
||||||
- name: Set up Python
|
|
||||||
if: ${{ inputs.container_image_url == '' || contains(inputs.container_image_name, 'ubuntu') }}
|
|
||||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: ${{ inputs.python_version }}
|
|
||||||
|
|
||||||
- name: Compute ROCm device extras
|
|
||||||
id: device_extras
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/expand_amdgpu_families.py \
|
|
||||||
--amdgpu-families "${{ inputs.amdgpu_family }}" \
|
|
||||||
--output-mode=device-extras
|
|
||||||
|
|
||||||
# Key off install_libraries success (not test_libraries) so devel install/test still run
|
|
||||||
- name: Install rocm[libraries]
|
|
||||||
id: install_libraries
|
|
||||||
run: |
|
|
||||||
pkg="rocm[libraries]"
|
|
||||||
if [ -n "${{ steps.device_extras.outputs.device_extras }}" ]; then
|
|
||||||
pkg="${pkg%]},${{ steps.device_extras.outputs.device_extras }}]"
|
|
||||||
fi
|
|
||||||
python build_tools/setup_venv.py ${VENV_DIR} \
|
|
||||||
--packages "${pkg}==${{ inputs.rocm_version }}" \
|
|
||||||
--index-url=${{ inputs.package_index_url }} \
|
|
||||||
--find-links=${{ inputs.package_find_links_url }} \
|
|
||||||
--activate-in-future-github-actions-steps
|
|
||||||
|
|
||||||
- name: Show installed packages (libraries)
|
|
||||||
if: ${{ !cancelled() && steps.install_libraries.outcome == 'success' }}
|
|
||||||
run: |
|
|
||||||
pip freeze
|
|
||||||
|
|
||||||
- name: Test rocm[libraries]
|
|
||||||
id: test_libraries
|
|
||||||
if: ${{ !cancelled() && steps.install_libraries.outcome == 'success' }}
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: |
|
|
||||||
rocm-sdk test
|
|
||||||
|
|
||||||
- name: Install rocm[libraries,devel]
|
|
||||||
id: install_devel
|
|
||||||
if: ${{ !cancelled() && steps.install_libraries.outcome == 'success' }}
|
|
||||||
run: |
|
|
||||||
pkg="rocm[libraries,devel]"
|
|
||||||
if [ -n "${{ steps.device_extras.outputs.device_extras }}" ]; then
|
|
||||||
pkg="${pkg%]},${{ steps.device_extras.outputs.device_extras }}]"
|
|
||||||
fi
|
|
||||||
python build_tools/setup_venv.py ${VENV_DIR} \
|
|
||||||
--packages "${pkg}==${{ inputs.rocm_version }}" \
|
|
||||||
--index-url=${{ inputs.package_index_url }} \
|
|
||||||
--find-links=${{ inputs.package_find_links_url }}
|
|
||||||
|
|
||||||
- name: Show installed packages (libraries,devel)
|
|
||||||
if: ${{ !cancelled() && steps.install_devel.outcome == 'success' }}
|
|
||||||
run: |
|
|
||||||
pip freeze
|
|
||||||
|
|
||||||
- name: Test rocm[libraries,devel]
|
|
||||||
if: ${{ !cancelled() && steps.install_devel.outcome == 'success' }}
|
|
||||||
timeout-minutes: 5
|
|
||||||
run: |
|
|
||||||
rocm-sdk test
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
name: TheRock PR Bot
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
# SECURITY: pull_request_target runs in the BASE-repo context, so secrets and
|
|
||||||
# a write token are available even for PRs opened from FORKS.
|
|
||||||
#
|
|
||||||
# This is SAFE here ONLY because this workflow:
|
|
||||||
# • NEVER checks out or executes PR head code (see checkout step below),
|
|
||||||
# • runs the TRUSTED policy_check.py / policy.yml from the base branch, and
|
|
||||||
# • reads all PR data via the GitHub API.
|
|
||||||
# Do NOT add build/test/install steps that run PR-provided code, and do NOT
|
|
||||||
# change the checkout to the PR head — that would create a "pwn request".
|
|
||||||
# Refs:
|
|
||||||
# https://docs.github.com/en/actions/reference/security/securely-using-pull_request_target
|
|
||||||
# https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
|
|
||||||
pull_request_target:
|
|
||||||
branches: [main, pr-bot-test]
|
|
||||||
types: [opened, synchronize, reopened, ready_for_review, edited]
|
|
||||||
|
|
||||||
# Least privilege. Writes are needed to post the results comment and manage the
|
|
||||||
# "Not ready to Review" label; everything else stays read-only.
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write # post / update the policy results table comment
|
|
||||||
issues: write # add / remove the "Not ready to Review" label
|
|
||||||
checks: read
|
|
||||||
|
|
||||||
# Avoid two runs racing on the same PR's comment/label (e.g. fast pushes).
|
|
||||||
concurrency:
|
|
||||||
group: therock-pr-bot-${{ github.event.pull_request.number }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
policy:
|
|
||||||
name: therock-pr-bot
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# SECURITY: check out the TRUSTED base commit, NEVER the PR head. This
|
|
||||||
# guarantees we run OUR policy_check.py / policy.yml — not the fork's.
|
|
||||||
# `persist-credentials: false` follows the safer-checkout defaults
|
|
||||||
# (https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/).
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.pull_request.base.sha }}
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: "3.11"
|
|
||||||
|
|
||||||
- name: Detect GitHub App secrets
|
|
||||||
id: app-secrets
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
APP_ID: ${{ secrets.THEROCK_PR_BOT_APPID }}
|
|
||||||
APP_KEY: ${{ secrets.THEROCK_PRBOT_KEY }}
|
|
||||||
run: |
|
|
||||||
if [[ -n "$APP_ID" && -n "$APP_KEY" ]]; then
|
|
||||||
echo "available=true" >> "$GITHUB_OUTPUT"
|
|
||||||
else
|
|
||||||
echo "available=false" >> "$GITHUB_OUTPUT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Create GitHub App token
|
|
||||||
id: app-token
|
|
||||||
if: steps.app-secrets.outputs.available == 'true'
|
|
||||||
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
||||||
with:
|
|
||||||
app-id: ${{ secrets.THEROCK_PR_BOT_APPID }}
|
|
||||||
private-key: ${{ secrets.THEROCK_PRBOT_KEY }}
|
|
||||||
|
|
||||||
# SECURITY: only fixed, trusted dependencies — never installed from the PR.
|
|
||||||
- name: Install deps
|
|
||||||
run: python -m pip install --upgrade pip requests pyyaml
|
|
||||||
|
|
||||||
- name: Enforce policy
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ steps.app-token.outputs.token || github.token }}
|
|
||||||
HAS_GITHUB_APP_TOKEN: ${{ steps.app-secrets.outputs.available }}
|
|
||||||
POST_COMMENTS: ${{ steps.app-secrets.outputs.available }}
|
|
||||||
MUTATE_PR: ${{ steps.app-secrets.outputs.available }}
|
|
||||||
OWNER: ${{ github.repository_owner }}
|
|
||||||
REPO: ${{ github.event.repository.name }}
|
|
||||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
||||||
SHA: ${{ github.event.pull_request.head.sha }}
|
|
||||||
run: python skills/therock_pr_bot/policy_check.py --timeout-seconds 900 --poll-seconds 15
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
# Copyright Advanced Micro Devices, Inc.
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
name: Unit Tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- release/therock-*
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
unit_tests:
|
|
||||||
name: "Unit Tests :: ${{ matrix.runs-on}}"
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
runs-on: [ubuntu-24.04, windows-2022]
|
|
||||||
runs-on: ${{ matrix.runs-on }}
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
||||||
with:
|
|
||||||
python-version: 3.12
|
|
||||||
|
|
||||||
- name: Install python deps
|
|
||||||
run: pip install -r requirements-test.txt
|
|
||||||
|
|
||||||
# Note: build_tools/github_actions/ contains complicated tests in some
|
|
||||||
# subdirectories that do not support pytest:
|
|
||||||
# build_tools/github_actions/benchmarks/scripts/
|
|
||||||
# build_tools/github_actions/test_executable_scripts/
|
|
||||||
# We could move them if we want a simple `pytest build_tools/` to work.
|
|
||||||
- name: Test build_tools
|
|
||||||
working-directory: build_tools
|
|
||||||
run: |
|
|
||||||
python -m pytest -vv \
|
|
||||||
--cov --cov-report=term-missing --cov-report=html
|
|
||||||
|
|
||||||
- name: Test scan_tools
|
|
||||||
working-directory: build_tools/scan_tools
|
|
||||||
run: python -m pytest -vv
|
|
||||||
|
|
||||||
# TODO: upload to AWS S3 instead (so reports are hosted and don't require
|
|
||||||
# a download step to view).
|
|
||||||
# We could also use https://about.codecov.io/ instead of custom infra.
|
|
||||||
- name: Upload coverage report
|
|
||||||
if: always()
|
|
||||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
||||||
with:
|
|
||||||
name: coverage-report-${{ matrix.runs-on }}
|
|
||||||
path: build/coverage-html/
|
|
||||||
|
|
||||||
unit_tests_summary:
|
|
||||||
name: Unit Tests Summary
|
|
||||||
if: always()
|
|
||||||
needs:
|
|
||||||
- unit_tests
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
||||||
- name: Evaluate workflow results
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
run: |
|
|
||||||
python build_tools/github_actions/workflow_summary.py \
|
|
||||||
--needs-json '${{ toJSON(needs) }}'
|
|
||||||
Reference in new issue
Block a user