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
358 lines
13 KiB
YAML
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
|