Fix Windows ROCm CMake HIP detection #35
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| workflow_dispatch: # allows manual triggering | |
| inputs: | |
| create_release: | |
| description: "Create new release" | |
| required: true | |
| type: boolean | |
| push: | |
| branches: | |
| - master | |
| - ci | |
| paths: | |
| [ | |
| ".github/workflows/**", | |
| "**/CMakeLists.txt", | |
| "**/Makefile", | |
| "**/*.h", | |
| "**/*.hpp", | |
| "**/*.c", | |
| "**/*.cpp", | |
| "**/*.cu", | |
| ] | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| paths: | |
| [ | |
| "**/CMakeLists.txt", | |
| "**/Makefile", | |
| "**/*.h", | |
| "**/*.hpp", | |
| "**/*.c", | |
| "**/*.cpp", | |
| "**/*.cu", | |
| ] | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| windows-latest-cmake-hip: | |
| runs-on: windows-2022 | |
| env: | |
| ROCM_VERSION: "7.11.0" | |
| GPU_TARGETS: "gfx906;gfx908;gfx90a;gfx942;gfx950;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151;gfx1152;gfx1200;gfx1201" | |
| steps: | |
| - uses: actions/checkout@v3 | |
| with: | |
| submodules: recursive | |
| - name: Cache ROCm Installation | |
| id: cache-rocm | |
| uses: actions/cache@v4 | |
| with: | |
| path: C:\TheRock\build | |
| key: rocm-${{ env.ROCM_VERSION }}-gfx1151-${{ runner.os }} | |
| - name: ccache | |
| uses: ggml-org/ccache-action@v1.2.16 | |
| with: | |
| key: windows-latest-cmake-hip-${{ env.ROCM_VERSION }}-x64 | |
| evict-old-files: 1d | |
| - name: Install ROCm | |
| if: steps.cache-rocm.outputs.cache-hit != 'true' | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| write-host "Downloading AMD ROCm ${{ env.ROCM_VERSION }} tarball" | |
| Invoke-WebRequest -Uri "https://repo.amd.com/rocm/tarball/therock-dist-windows-gfx1151-${{ env.ROCM_VERSION }}.tar.gz" -OutFile "${env:RUNNER_TEMP}\rocm.tar.gz" | |
| write-host "Extracting ROCm tarball" | |
| mkdir C:\TheRock\build -Force | |
| tar -xzf "${env:RUNNER_TEMP}\rocm.tar.gz" -C C:\TheRock\build | |
| write-host "Completed ROCm extraction" | |
| - name: Setup ROCm Environment | |
| run: | | |
| $rocmPath = "C:\TheRock\build" | |
| echo "HIP_PATH=$rocmPath" >> $env:GITHUB_ENV | |
| echo "HIP_DEVICE_LIB_PATH=$rocmPath\lib\llvm\amdgcn\bitcode" >> $env:GITHUB_ENV | |
| echo "HIP_PLATFORM=amd" >> $env:GITHUB_ENV | |
| echo "LLVM_PATH=$rocmPath\lib\llvm" >> $env:GITHUB_ENV | |
| echo "$rocmPath\bin" >> $env:GITHUB_PATH | |
| echo "$rocmPath\lib\llvm\bin" >> $env:GITHUB_PATH | |
| - name: Build | |
| run: | | |
| mkdir build | |
| cd build | |
| $env:CMAKE_PREFIX_PATH="${env:HIP_PATH};${env:HIP_PATH}\lib\cmake\hip" | |
| cmake .. ` | |
| -G "Unix Makefiles" ` | |
| -DSD_HIPBLAS=ON ` | |
| -DSD_BUILD_SHARED_LIBS=ON ` | |
| -DGGML_NATIVE=OFF ` | |
| -DCMAKE_C_COMPILER=clang ` | |
| -DCMAKE_CXX_COMPILER=clang++ ` | |
| -DCMAKE_HIP_COMPILER="${env:HIP_PATH}\bin\clang.exe" ` | |
| -DHIP_PATH="${env:HIP_PATH}" ` | |
| -DHIP_DIR="${env:HIP_PATH}\lib\cmake\hip" ` | |
| -DCMAKE_BUILD_TYPE=Release ` | |
| -DGPU_TARGETS="${{ env.GPU_TARGETS }}" | |
| cmake --build . --config Release --parallel ${env:NUMBER_OF_PROCESSORS} | |
| - name: Get commit hash | |
| id: commit | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| uses: pr-mpt/actions-commit-hash@v2 | |
| - name: Pack artifacts | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| run: | | |
| md "build\bin\rocblas\library\" | |
| md "build\bin\hipblaslt\library" | |
| cp "${env:HIP_PATH}\bin\hipblas.dll" "build\bin\" | |
| cp "${env:HIP_PATH}\bin\hipblaslt.dll" "build\bin\" | |
| cp "${env:HIP_PATH}\bin\rocblas.dll" "build\bin\" | |
| cp "${env:HIP_PATH}\bin\rocblas\library\*" "build\bin\rocblas\library\" | |
| cp "${env:HIP_PATH}\bin\hipblaslt\library\*" "build\bin\hipblaslt\library\" | |
| 7z a sd-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-rocm-x64.zip .\build\bin\* | |
| - name: Upload artifacts | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sd-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-rocm-x64.zip | |
| path: | | |
| sd-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-rocm-x64.zip | |
| ubuntu-latest-rocm: | |
| runs-on: ubuntu-24.04 | |
| env: | |
| UBUNTU_VERSION: "24.04" | |
| strategy: | |
| matrix: | |
| include: | |
| - ROCM_VERSION: "7.2" | |
| gpu_targets: "gfx908;gfx90a;gfx942;gfx1030;gfx1031;gfx1032;gfx1100;gfx1101;gfx1102;gfx1151;gfx1150;gfx1200;gfx1201" | |
| build: 'x64' | |
| - ROCM_VERSION: "7.11.0" | |
| gpu_targets: "gfx906;gfx908;gfx90a;gfx942;gfx950;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151;gfx1152;gfx1200;gfx1201" | |
| build: x64 | |
| steps: | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: ccache | |
| uses: ggml-org/ccache-action@v1.2.16 | |
| with: | |
| key: ubuntu-rocm-cmake-${{ matrix.ROCM_VERSION }}-${{ matrix.build }} | |
| evict-old-files: 1d | |
| - name: Dependencies | |
| id: depends | |
| run: | | |
| sudo apt install -y build-essential cmake wget zip ninja-build | |
| - name: Setup Legacy ROCm | |
| if: matrix.ROCM_VERSION == '7.2' | |
| id: legacy_env | |
| run: | | |
| sudo mkdir --parents --mode=0755 /etc/apt/keyrings | |
| wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | \ | |
| gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null | |
| sudo tee /etc/apt/sources.list.d/rocm.list << EOF | |
| deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/${{ matrix.ROCM_VERSION }} noble main | |
| EOF | |
| sudo tee /etc/apt/preferences.d/rocm-pin-600 << EOF | |
| Package: * | |
| Pin: release o=repo.radeon.com | |
| Pin-Priority: 600 | |
| EOF | |
| sudo apt update | |
| sudo apt-get install -y libssl-dev rocm-hip-sdk | |
| - name: Setup TheRock | |
| if: matrix.ROCM_VERSION != '7.2' | |
| id: therock_env | |
| run: | | |
| wget https://repo.amd.com/rocm/tarball/therock-dist-linux-gfx1151-${{ matrix.ROCM_VERSION }}.tar.gz | |
| mkdir install | |
| tar -xf *.tar.gz -C install | |
| export ROCM_PATH=$(pwd)/install | |
| echo ROCM_PATH=$ROCM_PATH >> $GITHUB_ENV | |
| echo PATH=$PATH:$ROCM_PATH/bin >> $GITHUB_ENV | |
| echo LD_LIBRARY_PATH=$ROCM_PATH/lib:$ROCM_PATH/llvm/lib:$ROCM_PATH/lib/rocprofiler-systems >> $GITHUB_ENV | |
| - name: Build | |
| id: cmake_build | |
| run: | | |
| mkdir build | |
| cd build | |
| cmake .. -G Ninja \ | |
| -DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" \ | |
| -DCMAKE_HIP_FLAGS="-mllvm --amdgpu-unroll-threshold-local=600" \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DSD_HIPBLAS=ON \ | |
| -DHIP_PLATFORM=amd \ | |
| -DGPU_TARGETS="${{ matrix.gpu_targets }}" \ | |
| -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ | |
| -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ | |
| -DSD_BUILD_SHARED_LIBS=ON | |
| cmake --build . --config Release | |
| - name: Get commit hash | |
| id: commit | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| uses: pr-mpt/actions-commit-hash@v2 | |
| - name: Prepare artifacts | |
| id: prepare_artifacts | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| run: | | |
| # Copy licenses | |
| cp ggml/LICENSE ./build/bin/ggml.txt | |
| cp LICENSE ./build/bin/stable-diffusion.cpp.txt | |
| - name: Fetch system info | |
| id: system-info | |
| run: | | |
| echo "CPU_ARCH=`uname -m`" >> "$GITHUB_OUTPUT" | |
| echo "OS_NAME=`lsb_release -s -i`" >> "$GITHUB_OUTPUT" | |
| echo "OS_VERSION=`lsb_release -s -r`" >> "$GITHUB_OUTPUT" | |
| echo "OS_TYPE=`uname -s`" >> "$GITHUB_OUTPUT" | |
| - name: Pack artifacts | |
| id: pack_artifacts | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| run: | | |
| cp ggml/LICENSE ./build/bin/ggml.txt | |
| cp LICENSE ./build/bin/stable-diffusion.cpp.txt | |
| zip -y -r sd-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-${{ steps.system-info.outputs.OS_TYPE }}-Ubuntu-${{ env.UBUNTU_VERSION }}-${{ steps.system-info.outputs.CPU_ARCH }}-rocm-${{ matrix.ROCM_VERSION }}.zip ./build/bin | |
| - name: Upload artifacts | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sd-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-${{ steps.system-info.outputs.OS_TYPE }}-Ubuntu-${{ env.UBUNTU_VERSION }}-${{ steps.system-info.outputs.CPU_ARCH }}-rocm-${{ matrix.ROCM_VERSION }}.zip | |
| path: | | |
| sd-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-${{ steps.system-info.outputs.OS_TYPE }}-Ubuntu-${{ env.UBUNTU_VERSION }}-${{ steps.system-info.outputs.CPU_ARCH }}-rocm-${{ matrix.ROCM_VERSION }}.zip | |
| release: | |
| if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }} | |
| runs-on: ubuntu-latest | |
| needs: | |
| - ubuntu-latest-rocm | |
| - windows-latest-cmake-hip | |
| steps: | |
| - name: Clone | |
| uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 0 | |
| - name: Download artifacts | |
| id: download-artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ./artifact | |
| pattern: sd-* | |
| merge-multiple: true | |
| - name: Get commit count | |
| id: commit_count | |
| run: | | |
| echo "count=$(git rev-list --count HEAD)" >> $GITHUB_OUTPUT | |
| - name: Get commit hash | |
| id: commit | |
| uses: pr-mpt/actions-commit-hash@v2 | |
| - name: Create release | |
| id: create_release | |
| if: ${{ github.event_name == 'workflow_dispatch' || github.ref_name == 'master' }} | |
| uses: anzz1/action-create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ format('{0}-{1}-{2}', env.BRANCH_NAME, steps.commit_count.outputs.count, steps.commit.outputs.short) }} | |
| - name: Upload release | |
| id: upload_release | |
| if: ${{ github.event_name == 'workflow_dispatch' || github.ref_name == 'master' }} | |
| uses: actions/github-script@v3 | |
| with: | |
| github-token: ${{secrets.GITHUB_TOKEN}} | |
| script: | | |
| const path = require('path'); | |
| const fs = require('fs'); | |
| const release_id = '${{ steps.create_release.outputs.id }}'; | |
| for (let file of await fs.readdirSync('./artifact')) { | |
| if (path.extname(file) === '.zip') { | |
| console.log('uploadReleaseAsset', file); | |
| await github.repos.uploadReleaseAsset({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| release_id: release_id, | |
| name: file, | |
| data: await fs.readFileSync(`./artifact/${file}`) | |
| }); | |
| } | |
| } |