# 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: 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: 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