Files
TheRock/rocm-libraries/.github/workflows/hipdnn-superbuild-ci.yml
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

358 lines
13 KiB
YAML

# Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
# SPDX-License-Identifier: MIT
#
# Lightweight CI for hipDNN + providers using the rocm-libraries superbuild
# and pre-built ROCm wheels (no TheRock source build required).
name: hipDNN Superbuild CI
on:
pull_request:
types: [opened, synchronize, reopened]
paths:
- '.github/workflows/hipdnn-superbuild-ci.yml'
- 'projects/hipdnn/**'
- 'dnn-providers/**'
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
cancel-in-progress: true
jobs:
hipdnn-windows-superbuild:
name: HipDNN Windows Superbuild
runs-on: azure-windows-scale-rocm
defaults:
run:
shell: bash
env:
VENV_PATH: B:\rocm_wheels
PYTHON_BUILD_DIR: B:\hipdnn-python
THIRD_PARTY_DEPS_DIR: B:\third-party-deps
GPU_TARGET: gfx1151
# Multi-arch nightly device extra (rocm[...,device-<DEVICE_TARGET>]).
DEVICE_TARGET: gfx1151
steps:
- name: Runner health status
shell: pwsh
run: |
Write-Host "=== OS ==="
(Get-CimInstance Win32_OperatingSystem).Caption
Write-Host "=== CPU ==="
$cpu = Get-CimInstance Win32_Processor
Write-Host "$($cpu.Name) ($($cpu.NumberOfLogicalProcessors) logical cores)"
Write-Host "=== Memory ==="
$os = Get-CimInstance Win32_OperatingSystem
$totalGB = [math]::Round($os.TotalVisibleMemorySize / 1MB, 1)
$freeGB = [math]::Round($os.FreePhysicalMemory / 1MB, 1)
Write-Host "Total: ${totalGB} GB Free: ${freeGB} GB"
Write-Host "=== Disk ==="
Get-PSDrive -PSProvider FileSystem |
Select-Object Name,
@{N='Used(GB)';E={[math]::Round($_.Used/1GB,1)}},
@{N='Free(GB)';E={[math]::Round($_.Free/1GB,1)}},
Root |
Format-Table -AutoSize | Out-String | Write-Host
- name: Configure git longpaths
run: git config --global core.longpaths true
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
sparse-checkout: |
.dvc
.github
cmake
dnn-providers
projects/hipdnn
projects/miopen
test
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.12'
- name: Configure MSVC
uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0
- name: Install build tools
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
choco install --no-progress -y ninja --version 1.12.1
- name: Install ROCm wheels
shell: pwsh
run: |
Write-Host "Creating Python virtual environment at $env:VENV_PATH"
python -m venv $env:VENV_PATH
& "$env:VENV_PATH\Scripts\Activate.ps1"
Write-Host "Installing ROCm wheels from multi-arch nightlies (device: $env:DEVICE_TARGET)"
pip install --index-url "https://rocm.nightlies.amd.com/whl-multi-arch/" "rocm[libraries,devel,device-$env:DEVICE_TARGET]"
if ($LASTEXITCODE -ne 0) { throw "Failed to install ROCm wheels" }
Write-Host "Initializing ROCm SDK"
rocm-sdk init
if ($LASTEXITCODE -ne 0) { throw "Failed to initialize ROCm SDK" }
$RocmSdkPath = "$env:VENV_PATH\Lib\site-packages\_rocm_sdk_devel" -replace '\\', '/'
Write-Host "ROCM_SDK_PATH=$RocmSdkPath"
echo "ROCM_SDK_PATH=$RocmSdkPath" >> $env:GITHUB_ENV
- name: Check ROCm wheel freshness
shell: pwsh
run: |
& "$env:VENV_PATH\Scripts\python.exe" .github/scripts/check_wheel_freshness.py --max-age-days 14
if ($LASTEXITCODE -ne 0) { throw "ROCm nightly wheels are stale" }
- name: Configure superbuild
run: |
cmake --preset hipdnn-dev-all -GNinja \
-DROCM_PATH="$ROCM_SDK_PATH" \
-DCMAKE_PROGRAM_PATH="$ROCM_SDK_PATH/lib/llvm/bin" \
-DGPU_TARGETS="$GPU_TARGET" \
-DROCM_LIBS_ENABLE_ROOT_CTEST=ON \
-DENABLE_CLANG_FORMAT=OFF \
-DHIPKERNELPROVIDER_ENABLE_ROCKE=ON \
-DENABLE_CLANG_TIDY=OFF
- name: Build
run: cmake --build build
- name: Add ROCm bin to PATH
run: echo "$ROCM_SDK_PATH/bin" >> "$GITHUB_PATH"
- name: Run tests
run: ctest --test-dir build --output-on-failure
- name: Patch ROCm SDK with superbuild outputs
shell: pwsh
run: cmake --install build --prefix $env:ROCM_SDK_PATH
- name: Install Python build dependencies
shell: pwsh
run: |
$python = Join-Path $env:VENV_PATH "Scripts\python.exe"
& $python -m pip install --upgrade build numpy pytest
if ($LASTEXITCODE -ne 0) { throw "Failed to install Python build dependencies" }
- name: Download third-party dependency sources
shell: pwsh
run: |
$python = Join-Path $env:VENV_PATH "Scripts\python.exe"
& $python projects/hipdnn/python/download_third_party_deps.py `
--deps-dir $env:THIRD_PARTY_DEPS_DIR
if ($LASTEXITCODE -ne 0) { throw "Failed to download third-party dependency sources" }
- name: Configure frontend bindings
shell: pwsh
run: |
$python = Join-Path $env:VENV_PATH "Scripts\python.exe"
$rocmSdkPath = $env:ROCM_SDK_PATH -replace '\\', '/'
$workspace = $env:GITHUB_WORKSPACE -replace '\\', '/'
$toolchainFile = "$workspace/cmake/toolchains/rocm-clang.cmake"
cmake -S projects/hipdnn/python/frontend_bindings `
-B $env:PYTHON_BUILD_DIR `
-GNinja `
-DCMAKE_BUILD_TYPE=Release `
"-DCMAKE_TOOLCHAIN_FILE=$toolchainFile" `
"-DROCM_PATH=$rocmSdkPath" `
"-DCMAKE_PREFIX_PATH=$rocmSdkPath" `
"-DCMAKE_PROGRAM_PATH=$rocmSdkPath/lib/llvm/bin" `
"-DFETCHCONTENT_SOURCE_DIR_NANOBIND=$env:THIRD_PARTY_DEPS_DIR\nanobind-2.12.0" `
"-DFETCHCONTENT_SOURCE_DIR_TSL_ROBIN_MAP=$env:THIRD_PARTY_DEPS_DIR\robin-map-1.4.1" `
"-DPython_EXECUTABLE=$python"
- name: Build frontend bindings
shell: pwsh
run: cmake --build $env:PYTHON_BUILD_DIR
- name: Pack frontend wheel
shell: pwsh
run: |
$python = Join-Path $env:VENV_PATH "Scripts\python.exe"
& $python projects/hipdnn/python/frontend_wheel_package/pack_frontend_wheel.py `
--build-dir $env:PYTHON_BUILD_DIR `
--wheel-dir (Join-Path $env:PYTHON_BUILD_DIR "wheel_package")
- name: Install frontend wheel
shell: pwsh
run: |
$python = Join-Path $env:VENV_PATH "Scripts\python.exe"
$wheel = Get-ChildItem (Join-Path $env:PYTHON_BUILD_DIR "wheel_package\hipdnn_frontend-*.whl") | Select-Object -First 1
if (-not $wheel) { throw "No hipdnn_frontend wheel found" }
& $python -m pip install --force-reinstall $wheel.FullName
- name: Run frontend wheel tests
shell: pwsh
run: |
$python = Join-Path $env:VENV_PATH "Scripts\python.exe"
$env:ROCM_PATH = $env:ROCM_SDK_PATH
$env:HIP_PATH = $env:ROCM_SDK_PATH
$env:PATH = "$env:ROCM_SDK_PATH/bin;$env:ROCM_SDK_PATH/lib;$env:PATH"
& $python -m pytest -q projects/hipdnn/python/frontend_wheel_package/tests
hipdnn-linux-superbuild:
name: HipDNN Linux Superbuild
runs-on: azure-linux-scale-rocm
env:
GPU_TARGET: gfx94X-dcgpu
# Multi-arch nightly device extra (rocm[...,device-<DEVICE_TARGET>]).
DEVICE_TARGET: gfx942
PYTHON_BUILD_DIR: build/hipdnn-python
steps:
- name: Runner health status
run: |
echo "=== OS ==="
cat /etc/os-release | head -2
echo "=== CPU ==="
lscpu | grep -E 'Model name|^CPU\(s\)'
echo "=== Memory ==="
free -h | grep Mem
echo "=== Disk ==="
df -h /
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
sparse-checkout: |
.dvc
.github
cmake
dnn-providers
projects/hipdnn
projects/miopen
test
- name: Set environment
run: |
echo "VENV_PATH=${{ runner.temp }}/rocm_wheels" >> "$GITHUB_ENV"
echo "THIRD_PARTY_DEPS_DIR=${{ runner.temp }}/third-party-deps" >> "$GITHUB_ENV"
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.12'
- name: Install build tools
run: |
sudo apt-get update
sudo apt-get install -y ninja-build ccache lsb-release wget software-properties-common gnupg
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 20
sudo apt-get install -y clang-tidy-20 clang-tools-20
- name: Install ROCm wheels
run: |
echo "Creating Python virtual environment at $VENV_PATH"
python -m venv "$VENV_PATH"
source "$VENV_PATH/bin/activate"
echo "Installing ROCm wheels from multi-arch nightlies (device: $DEVICE_TARGET)"
pip install --index-url "https://rocm.nightlies.amd.com/whl-multi-arch/" "rocm[libraries,devel,device-$DEVICE_TARGET]"
echo "Initializing ROCm SDK"
rocm-sdk init
SITE_PACKAGES=$("$VENV_PATH/bin/python" -c "import site; print(site.getsitepackages()[0])")
ROCM_SDK_PATH="$SITE_PACKAGES/_rocm_sdk_devel"
echo "ROCM_SDK_PATH=$ROCM_SDK_PATH"
echo "ROCM_SDK_PATH=$ROCM_SDK_PATH" >> "$GITHUB_ENV"
- name: Check ROCm wheel freshness
run: |
"$VENV_PATH/bin/python" .github/scripts/check_wheel_freshness.py --max-age-days 14
- name: Configure superbuild
run: |
cmake --preset hipdnn-dev-all -GNinja \
-DROCM_PATH="$ROCM_SDK_PATH" \
-DCMAKE_PROGRAM_PATH="$ROCM_SDK_PATH/lib/llvm/bin" \
-DGPU_TARGETS="$GPU_TARGET" \
-DROCM_LIBS_ENABLE_ROOT_CTEST=ON \
-DENABLE_CLANG_FORMAT=OFF \
-DENABLE_CLANG_TIDY=ON \
-DHIPKERNELPROVIDER_ENABLE_ROCKE=ON \
-DCMAKE_CXX_CLANG_TIDY=/usr/bin/clang-tidy-20
- name: Build
run: cmake --build build
- name: Run tests
run: ctest --test-dir build --output-on-failure
- name: Patch ROCm SDK with superbuild outputs
run: cmake --install build --prefix "$ROCM_SDK_PATH"
- name: Install Python build dependencies
run: |
set -euo pipefail
"$VENV_PATH/bin/python" -m pip install --upgrade build numpy pytest
- name: Download third-party dependency sources
run: |
set -euo pipefail
"$VENV_PATH/bin/python" projects/hipdnn/python/download_third_party_deps.py \
--deps-dir "$THIRD_PARTY_DEPS_DIR"
- name: Configure frontend bindings
run: |
cmake -S projects/hipdnn/python/frontend_bindings \
-B "$PYTHON_BUILD_DIR" \
-GNinja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/cmake/toolchains/rocm-clang.cmake" \
-DROCM_PATH="$ROCM_SDK_PATH" \
-DCMAKE_PREFIX_PATH="$ROCM_SDK_PATH" \
-DCMAKE_PROGRAM_PATH="$ROCM_SDK_PATH/lib/llvm/bin" \
-DFETCHCONTENT_SOURCE_DIR_NANOBIND="$THIRD_PARTY_DEPS_DIR/nanobind-2.12.0" \
-DFETCHCONTENT_SOURCE_DIR_TSL_ROBIN_MAP="$THIRD_PARTY_DEPS_DIR/robin-map-1.4.1" \
-DPython_EXECUTABLE="$VENV_PATH/bin/python"
- name: Build frontend bindings
run: cmake --build "$PYTHON_BUILD_DIR"
- name: Pack frontend wheel
run: |
"$VENV_PATH/bin/python" projects/hipdnn/python/frontend_wheel_package/pack_frontend_wheel.py \
--build-dir "$PYTHON_BUILD_DIR" \
--wheel-dir "$PYTHON_BUILD_DIR/wheel_package"
- name: Install frontend wheel
run: |
set -euo pipefail
wheel=$(ls "$PYTHON_BUILD_DIR"/wheel_package/hipdnn_frontend-*.whl)
"$VENV_PATH/bin/python" -m pip install --force-reinstall "$wheel"
- name: Run frontend wheel tests
run: |
LD_LIBRARY_PATH="$ROCM_SDK_PATH/lib:${LD_LIBRARY_PATH:-}" \
"$VENV_PATH/bin/python" -m pytest -q projects/hipdnn/python/frontend_wheel_package/tests
hipdnn_build_summary:
name: hipDNN Superbuild Summary
if: always()
needs:
- hipdnn-windows-superbuild
- hipdnn-linux-superbuild
runs-on: ubuntu-24.04
steps:
- name: Report results
run: |
echo '${{ toJson(needs) }}'
FAILED_JOBS="$(echo '${{ toJson(needs) }}' \
| jq --raw-output \
'map_values(select(.result!="success" and .result!="skipped")) | keys | join(",")' \
)"
if [[ "${FAILED_JOBS}" != "" ]]; then
echo "Failed jobs: ${FAILED_JOBS}"
exit 1
fi