Commit 391fac164 for llama.cpp
commit 391fac16460f15233a7740550d858ac96df3419d
Author: Oliver Simons <osimons@nvidia.com>
Date: Mon Sep 14 19:07:53 2026 +0200
ci : add ubuntu-cuda builds to release (#28186)
* release : add ubuntu-cuda build job (12.8/13.3, x64+arm64)
* Add GCC 14 for CUDA arm64 builds in CI
* Eplicit bash
* Install git for CCCL fetch
* Install git before we clone/checkout
* Match CI names for WIndows
* Whitelist llama.cpp repo to git
* Use $GITHUB_WORKSPACE
* Also ship dependent libs on Ubuntu
Need NCCL additionally as it's pre-built available on Linux
* Avoid duplicate files in packaged cudart
* Copy NCCL license
* Install CURL to fetch NCCL license
* Update .github/workflows/release.yml
Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>
* Remove NCCL until licensing has been confirmed
---------
Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@huggingface.co>
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 91dcbe48b..be36b0432 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -310,6 +310,145 @@ jobs:
with:
key: release-${{ matrix.os }}-vulkan
+ ubuntu-cuda:
+ name: ubuntu-cuda (${{ matrix.label }}, ${{ matrix.build }})
+ needs: [check-release, ui-build]
+ if: ${{ needs.check-release.outputs.should_release == 'true' }}
+
+ strategy:
+ matrix:
+ include:
+ # label = short version used in artifact names / release body
+ # cuda = full container image tag
+ - build: 'x64'
+ os: ubuntu-24.04
+ cuda: '12.8.2'
+ label: '12.8'
+ defines: '-DGGML_CUDA_CUB_3DOT2=ON'
+ - build: 'x64'
+ os: ubuntu-24.04
+ cuda: '13.3.1'
+ label: '13.3'
+ defines: ''
+ - build: 'arm64'
+ os: ubuntu-24.04-arm
+ cuda: '13.3.1'
+ label: '13.3'
+ defines: ''
+
+ runs-on: ${{ matrix.os }}
+ container: nvidia/cuda:${{ matrix.cuda }}-devel-ubuntu24.04
+
+ permissions:
+ actions: write
+
+ steps:
+ # the container has no git; install it before checkout so that a real git
+ # repository is created (the get-tag-name action and the build both need it)
+ - name: Install git
+ run: |
+ apt-get update
+ apt-get install -y --no-install-recommends git
+
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+
+ # checkout runs as the host user; in-container steps run as root, so git
+ # refuses to touch a repo it does not own. Mark the workspace as safe.
+ # use the env var: the github.workspace context holds the HOST path,
+ # GITHUB_WORKSPACE the container path
+ - name: Git safe directory
+ run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
+
+ - name: Download UI build
+ uses: actions/download-artifact@v7
+ with:
+ name: llama-ui.zip
+ path: tools/ui/dist
+
+ - name: Dependencies
+ id: depends
+ # container jobs default to sh (dash); need bash for the [[ ]] below
+ shell: bash
+ run: |
+ apt-get update
+ apt-get install -y --no-install-recommends build-essential cmake ninja-build libssl-dev jq python3-venv
+ # the container ships GCC 13, which does not know the 'sme' march
+ # feature used by the armv9.2 CPU variant of GGML_CPU_ALL_VARIANTS
+ if [[ "${{ matrix.build }}" == "arm64" ]]; then
+ apt-get install -y --no-install-recommends gcc-14 g++-14
+ echo "CC=gcc-14" >> "$GITHUB_ENV"
+ echo "CXX=g++-14" >> "$GITHUB_ENV"
+ fi
+
+ - name: ccache
+ uses: ggml-org/ccache-action@v1.2.24
+ with:
+ key: release-ubuntu-${{ matrix.os }}-cuda-${{ matrix.label }}-${{ matrix.build }}
+ evict-old-files: 1d
+ max-size: "1G"
+
+ - name: Build
+ id: cmake_build
+ # no CMAKE_CUDA_ARCHITECTURES: use the broad default arch set from
+ # ggml/src/ggml-cuda/CMakeLists.txt so the release binary covers many GPUs
+ run: |
+ cmake -B build \
+ -DCMAKE_INSTALL_RPATH='$ORIGIN' \
+ -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
+ -DGGML_BACKEND_DL=ON \
+ -DGGML_NATIVE=OFF \
+ -DGGML_CPU_ALL_VARIANTS=ON \
+ -DGGML_CUDA=ON \
+ -DGGML_CUDA_NCCL=OFF \
+ ${{ env.CMAKE_ARGS }} ${{ matrix.defines }}
+ cmake --build build --config Release -j $(nproc)
+
+ - name: Determine tag name
+ id: tag
+ uses: ./.github/actions/get-tag-name
+
+ - name: Pack artifacts
+ id: pack_artifacts
+ run: |
+ cp LICENSE ./build/bin/
+ tar -czvf llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-${{ matrix.label }}-${{ 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-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-${{ matrix.label }}-${{ matrix.build }}.tar.gz
+ name: llama-bin-ubuntu-cuda-${{ matrix.label }}-${{ matrix.build }}.tar.gz
+
+ # ship the CUDA runtime libraries the backend links against, mirroring
+ # the windows-cuda cudart zip - extract next to the binaries ($ORIGIN rpath)
+ - name: Pack CUDA runtime
+ id: pack_cuda_runtime
+ run: |
+ major="${{ matrix.label }}"
+ major="${major%%.*}"
+ mkdir -p ./cudart
+ # cp -L dereferences the SONAME symlinks into plain files, so the
+ # tarball holds exactly 3 files with no versioned duplicates
+ cp -L /usr/local/cuda/lib64/libcudart.so.${major} ./cudart/
+ cp -L /usr/local/cuda/lib64/libcublas.so.${major} ./cudart/
+ cp -L /usr/local/cuda/lib64/libcublasLt.so.${major} ./cudart/
+ tar -czvf cudart-llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-${{ matrix.label }}-${{ matrix.build }}.tar.gz --transform "s,^\.,cudart-llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-${{ matrix.label }}-${{ matrix.build }}," -C ./cudart .
+
+ - name: Upload CUDA runtime
+ uses: actions/upload-artifact@v6
+ with:
+ path: cudart-llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-${{ matrix.label }}-${{ matrix.build }}.tar.gz
+ name: cudart-llama-bin-ubuntu-cuda-${{ matrix.label }}-${{ matrix.build }}.tar.gz
+
+ - name: ccache-clear
+ uses: ./.github/actions/ccache-clear
+ with:
+ key: release-ubuntu-${{ matrix.os }}-cuda-${{ matrix.label }}-${{ matrix.build }}
+
android-arm64:
needs: [check-release, ui-build]
if: ${{ needs.check-release.outputs.should_release == 'true' }}
@@ -1572,6 +1711,7 @@ jobs:
- ubuntu-24-rocm
- ubuntu-cpu
- ubuntu-vulkan
+ - ubuntu-cuda
- ubuntu-24-openvino
- ubuntu-24-sycl
- android-arm64
@@ -1703,6 +1843,9 @@ jobs:
- [Ubuntu s390x (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-s390x.tar.gz)
- [Ubuntu x64 (Vulkan)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-vulkan-x64.tar.gz)
- [Ubuntu arm64 (Vulkan)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-vulkan-arm64.tar.gz)
+ - [Ubuntu x64 (CUDA 12)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-12.8-x64.tar.gz) - [CUDA 12.8 libraries](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/cudart-llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-12.8-x64.tar.gz)
+ - [Ubuntu x64 (CUDA 13)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-13.3-x64.tar.gz) - [CUDA 13.3 libraries](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/cudart-llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-13.3-x64.tar.gz)
+ - [Ubuntu arm64 (CUDA 13)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-13.3-arm64.tar.gz) - [CUDA 13.3 libraries](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/cudart-llama-${{ steps.tag.outputs.name }}-bin-ubuntu-cuda-13.3-arm64.tar.gz)
- [Ubuntu x64 (ROCm 10.0)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-rocm-10.0-x64.tar.gz)
- [Ubuntu x64 (OpenVINO)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-openvino-${{ needs.ubuntu-24-openvino.outputs.openvino_version }}-x64.tar.gz)
- [Ubuntu x64 (SYCL FP32)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-sycl-fp32-x64.tar.gz)