Release #41
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: Release | |
| on: | |
| schedule: | |
| - cron: '0 3 * * *' # nightly at 03:00 UTC | |
| workflow_dispatch: # allows manual triggering | |
| inputs: | |
| create_release: | |
| description: 'Create new release' | |
| required: true | |
| type: boolean | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| CMAKE_ARGS: "-DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=ON -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON" | |
| jobs: | |
| ubuntu-22-rocm: | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| matrix: | |
| include: | |
| - ROCM_VERSION: "7.12.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: | |
| fetch-depth: 0 | |
| repository: 'ggml-org/llama.cpp' | |
| - name: ccache | |
| uses: ggml-org/ccache-action@v1.2.21 | |
| with: | |
| key: ubuntu-rocm-${{ matrix.ROCM_VERSION }}-${{ matrix.build }} | |
| evict-old-files: 1d | |
| - name: Dependencies | |
| id: depends | |
| run: | | |
| sudo apt install -y build-essential git cmake wget | |
| - name: Setup Legacy ROCm | |
| if: matrix.ROCM_VERSION == '7.2.1' | |
| 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 }} jammy 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.1' | |
| 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 with native CMake HIP support | |
| id: cmake_build | |
| run: | | |
| cmake -B build -S . \ | |
| -DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DGGML_BACKEND_DL=ON \ | |
| -DGGML_NATIVE=OFF \ | |
| -DCMAKE_INSTALL_RPATH='$ORIGIN' \ | |
| -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \ | |
| -DGGML_CPU_ALL_VARIANTS=ON \ | |
| -DGPU_TARGETS="${{ matrix.gpu_targets }}" \ | |
| -DGGML_HIP=ON \ | |
| -DHIP_PLATFORM=amd \ | |
| -DGGML_HIP_ROCWMMA_FATTN=ON \ | |
| -DGGML_OPENMP=ON \ | |
| ${{ env.CMAKE_ARGS }} | |
| cmake --build build --config Release -j $(nproc) | |
| - name: Determine tag name | |
| id: tag | |
| uses: lemonade-sdk/llama.cpp/.github/actions/get-tag-name@lemonade | |
| - name: Get ROCm short version | |
| run: echo "ROCM_VERSION_SHORT=$(echo '${{ matrix.ROCM_VERSION }}' | cut -d '.' -f 1,2)" >> $GITHUB_ENV | |
| - name: Pack artifacts | |
| id: pack_artifacts | |
| run: | | |
| cp LICENSE ./build/bin/ | |
| tar -czvf llama-bin-ubuntu-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.tar.gz --transform "s,./,llama-${{ steps.tag.outputs.name }}/," -C ./build/bin . | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| path: llama-bin-ubuntu-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.tar.gz | |
| name: llama-bin-ubuntu-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.tar.gz | |
| windows-cpu: | |
| runs-on: windows-2025 | |
| strategy: | |
| matrix: | |
| include: | |
| - arch: 'x64' | |
| steps: | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| repository: 'ggml-org/llama.cpp' | |
| - name: ccache | |
| uses: ggml-org/ccache-action@v1.2.21 | |
| with: | |
| key: windows-latest-cpu-${{ matrix.arch }} | |
| variant: ccache | |
| evict-old-files: 1d | |
| - name: Install Ninja | |
| run: | | |
| choco install ninja | |
| - name: Build | |
| shell: cmd | |
| run: | | |
| call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.arch == 'x64' && 'x64' || 'amd64_arm64' }} | |
| cmake -S . -B build -G "Ninja Multi-Config" ^ | |
| -D CMAKE_TOOLCHAIN_FILE=cmake/${{ matrix.arch }}-windows-llvm.cmake ^ | |
| -DLLAMA_BUILD_BORINGSSL=ON ^ | |
| -DGGML_NATIVE=OFF ^ | |
| -DGGML_BACKEND_DL=ON ^ | |
| -DGGML_CPU_ALL_VARIANTS=${{ matrix.arch == 'x64' && 'ON' || 'OFF' }} ^ | |
| -DGGML_OPENMP=ON ^ | |
| ${{ env.CMAKE_ARGS }} | |
| cmake --build build --config Release | |
| - name: Pack artifacts | |
| id: pack_artifacts | |
| run: | | |
| Copy-Item "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Redist\MSVC\14.44.35112\debug_nonredist\${{ matrix.arch }}\Microsoft.VC143.OpenMP.LLVM\libomp140.${{ matrix.arch == 'x64' && 'x86_64' || 'aarch64' }}.dll" .\build\bin\Release\ | |
| 7z a -snl llama-bin-win-cpu-${{ matrix.arch }}.zip .\build\bin\Release\* | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| path: llama-bin-win-cpu-${{ matrix.arch }}.zip | |
| name: llama-bin-win-cpu-${{ matrix.arch }}.zip | |
| windows-rocm: | |
| runs-on: windows-2022 | |
| strategy: | |
| matrix: | |
| include: | |
| - ROCM_VERSION: "7.12.0" | |
| gpu_targets: "gfx906;gfx908;gfx90a;gfx942;gfx950;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151;gfx1200;gfx1201" | |
| build: x64 | |
| steps: | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| repository: 'ggml-org/llama.cpp' | |
| - name: Cache ROCm Installation | |
| id: cache-rocm | |
| uses: actions/cache@v4 | |
| with: | |
| path: C:\TheRock\build | |
| key: rocm-${{ matrix.ROCM_VERSION }}-gfx1151-${{ runner.os }} | |
| - name: ccache | |
| uses: ggml-org/ccache-action@v1.2.16 | |
| with: | |
| key: windows-rocm-${{ matrix.ROCM_VERSION }}-${{ matrix.build }} | |
| evict-old-files: 1d | |
| - name: Install ROCm | |
| if: steps.cache-rocm.outputs.cache-hit != 'true' | |
| run: | | |
| $ErrorActionPreference = "Stop" | |
| write-host "Downloading AMD ROCm ${{ matrix.ROCM_VERSION }} tarball" | |
| Invoke-WebRequest -Uri "https://repo.amd.com/rocm/tarball/therock-dist-windows-gfx1151-${{ matrix.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}" ` | |
| -DCMAKE_BUILD_TYPE=Release ` | |
| -DGGML_BACKEND_DL=ON ` | |
| -DGGML_NATIVE=OFF ` | |
| -DGGML_CPU=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 ` | |
| -DGGML_HIP_ROCWMMA_FATTN=ON ` | |
| -DGPU_TARGETS="${{ matrix.gpu_targets }}" | |
| cmake --build . --config Release --parallel ${env:NUMBER_OF_PROCESSORS} | |
| - name: Determine tag name | |
| id: tag | |
| uses: lemonade-sdk/llama.cpp/.github/actions/get-tag-name@lemonade | |
| - name: Get ROCm short version | |
| run: | | |
| $rocmVersionShort = ('${{ matrix.ROCM_VERSION }}'.Split('.')[0..1] -join '.') | |
| echo "ROCM_VERSION_SHORT=$rocmVersionShort" >> $env:GITHUB_ENV | |
| - name: Pack artifacts | |
| run: | | |
| cp "LICENSE" "build\bin\" | |
| 7z a -snl llama-bin-win-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.zip .\build\bin\* | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| path: llama-bin-win-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.zip | |
| name: llama-bin-win-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.zip | |
| release: | |
| if: ${{ github.event_name == 'schedule' || github.event.inputs.create_release == 'true' }} | |
| # Fine-grant permission | |
| # https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token | |
| permissions: | |
| contents: write # for creating release | |
| runs-on: ubuntu-slim | |
| needs: | |
| - windows-cpu | |
| - windows-rocm | |
| - ubuntu-22-rocm | |
| steps: | |
| - name: Clone | |
| id: checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| repository: 'ggml-org/llama.cpp' | |
| - name: Determine tag name | |
| id: tag | |
| uses: lemonade-sdk/llama.cpp/.github/actions/get-tag-name@lemonade | |
| - name: Download artifacts | |
| id: download-artifact | |
| uses: actions/download-artifact@v7 | |
| with: | |
| path: ./artifact | |
| merge-multiple: true | |
| - name: Move artifacts | |
| id: move_artifacts | |
| run: | | |
| mkdir -p release | |
| echo "Adding CPU backend files to existing zips..." | |
| for arch in x64; do | |
| cpu_zip="artifact/llama-bin-win-cpu-${arch}.zip" | |
| temp_dir=$(mktemp -d) | |
| echo "Extracting CPU backend for $arch..." | |
| unzip "$cpu_zip" -d "$temp_dir" | |
| echo "Adding CPU files to $arch zips..." | |
| for target_zip in artifact/llama-bin-win-*-${arch}.zip; do | |
| if [[ "$target_zip" == "$cpu_zip" ]]; then | |
| continue | |
| fi | |
| echo "Adding CPU backend to $(basename "$target_zip")" | |
| realpath_target_zip=$(realpath "$target_zip") | |
| (cd "$temp_dir" && zip -r "$realpath_target_zip" .) | |
| done | |
| rm -rf "$temp_dir" | |
| done | |
| echo "Renaming and moving zips to release..." | |
| for zip_file in artifact/llama-bin-win-*.zip; do | |
| base_name=$(basename "$zip_file" .zip) | |
| zip_name="llama-${{ steps.tag.outputs.name }}-${base_name#llama-}.zip" | |
| echo "Moving $zip_file to release/$zip_name" | |
| mv "$zip_file" "release/$zip_name" | |
| done | |
| echo "Renaming and moving tar.gz files to release..." | |
| for tar_file in artifact/*.tar.gz; do | |
| base_name=$(basename "$tar_file" .tar.gz) | |
| tar_name="llama-${{ steps.tag.outputs.name }}-${base_name#llama-}.tar.gz" | |
| echo "Moving $tar_file to release/$tar_name" | |
| mv "$tar_file" "release/$tar_name" | |
| done | |
| - name: Determine release summary | |
| id: release_summary | |
| run: | | |
| if [[ "${{ github.event_name }}" == "schedule" ]]; then | |
| echo "value=Nightly release for ${{ github.sha }}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "value=$(git log -1 --pretty=%s)" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Check if tag exists | |
| id: check_tag | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| TAG_NAME="${{ steps.tag.outputs.name }}" | |
| if git ls-remote --tags https://github.com/${{ github.repository }}.git | grep -q "refs/tags/${TAG_NAME}$"; then | |
| echo "Tag ${TAG_NAME} already exists in ${{ github.repository }}. Skipping release creation." | |
| echo "exists=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "Tag ${TAG_NAME} does not exist in ${{ github.repository }}. Proceeding with release." | |
| echo "exists=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Create release | |
| id: create_release | |
| if: steps.check_tag.outputs.exists == 'false' | |
| uses: ggml-org/action-create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ steps.tag.outputs.name }} | |
| body: | | |
| <details open> | |
| ${{ steps.release_summary.outputs.value }} | |
| </details> | |
| **Linux:** | |
| - [Ubuntu x64 (ROCm 7.12)](https://github.com/lemonade-sdk/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-rocm-7.12-x64.tar.gz) | |
| **Windows:** | |
| - [Windows x64 (ROCm 7.12)](https://github.com/lemonade-sdk/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-rocm-7.12-x64.zip) | |
| - name: Upload release | |
| id: upload_release | |
| if: steps.check_tag.outputs.exists == 'false' | |
| uses: actions/github-script@v8 | |
| 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('./release')) { | |
| if (path.extname(file) === '.zip' || file.endsWith('.tar.gz')) { | |
| console.log('uploadReleaseAsset', file); | |
| await github.rest.repos.uploadReleaseAsset({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| release_id: release_id, | |
| name: file, | |
| data: await fs.readFileSync(`./release/${file}`) | |
| }); | |
| } | |
| } |