Fix Windows ROCm tarball extraction and compiler paths #36
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 --strip-components=1 | |
| 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 | |
| cmake .. ` | |
| -G "Unix Makefiles" ` | |
| -DCMAKE_PREFIX_PATH="${env:HIP_PATH}" ` | |
| -DSD_HIPBLAS=ON ` | |
| -DSD_BUILD_SHARED_LIBS=ON ` | |
| -DGGML_NATIVE=OFF ` | |
| -DCMAKE_C_COMPILER="${env:HIP_PATH}\lib\llvm\bin\clang.exe" ` | |
| -DCMAKE_CXX_COMPILER="${env:HIP_PATH}\lib\llvm\bin\clang++.exe" ` | |
| -DCMAKE_HIP_COMPILER="${env:HIP_PATH}\lib\llvm\bin\clang.exe" ` | |
| -DHIP_PATH="${env:HIP_PATH}" ` | |
| -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}`) | |
| }); | |
| } | |
| } |