mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2026-08-28 16:10:52 +02:00
511f9c1379
* OpenVINO Backend: Fuse IM2COL + MatMul convolution into OpenVINO convolution * ci:ggml-ov: Skip recurrent state rollback tests * ci:ggml-ov: Skip recurrent state rollback tests * Update OPENVINO.md * ggml-openvino : add env-var gated op support debugging * Fix ggml_rope_set_offset case * OpenVINO backend: Support Whisper.cpp * Fix code style * openvino : enable qwen35 on NPU Static shapes: - get_graph_input_shape() left the s_copy / s_copy-leaf inputs dynamic ([1,1,1,-1]) even in static mode, which propagated a dynamic slot dim through GET_ROWS into the conv/GDN state, the state reshapes and the GDN output. - With -np 1 the s_copy defrag remainder gathers zero rows; short-circuit that CPY to the untouched cache instead of emitting a degenerate Slice/Concat, and skip binding its zero-byte ggml tensor as an output (the dynamic path already did the latter, the static path wrote the full cache over a 0-byte buffer). Token-count independence: - In static mode the compiled model's token count is the prefill chunk size or 1, not the captured cgraph's. Offsets derived from the captured count were therefore wrong. Anchor the GDN state slice at the end of the packed [attn | state] output and drop the rs_src_begin runtime inputs, and make VIEWs over the GDN output / conv_input pass through so the consumer does the slicing. - CONT could not identify its token axis when the graph was captured with a single token (every trailing dim has the same stride and size 1) and baked the captured shape into the prefill model. Chunked prefill: - The last chunk is padded with fabricated tokens. Attention masks them, but the recurrent path folded them into cache_r/cache_s permanently. Add a chunk_valid_len runtime input, use it to zero g and beta for padded steps (making the recurrence an exact identity) and to end the conv snapshot window at the last valid token, and disable the recurrent-cache reset after the first chunk so earlier chunks are not wiped. - get_is_prefill() and the chunk loop bound read inp_pos->ne[0] directly, but IMROPE stacks 4 position planes, so every decode step was run through the padded prefill model and the loop ran extra out-of-bounds chunks. cache_rs_reset_idx/len now stay runtime Parameters in static mode, since can_reuse_statically() does not invalidate the cached model on ComputeParams changes. Add GGML_OPENVINO_FORCE_STATIC to exercise the static path on CPU. * Update to OpenVINO 2026.3.1 * ggml-openvino: forward NPU compilation mode parameters Add GGML_OPENVINO_NPU_COMPILE_CONFIG to the backend's cached environment so callers can configure the NPU compiler without using the generic property escape hatch. When the value is non-empty, pass it to OpenVINO as NPU_COMPILATION_MODE_PARAMS. This enables settings such as optimization-level=3 for NPU compilation while preserving the existing behavior when the variable is unset and leaving CPU and GPU configuration unchanged. Document the variable, its NPU-only scope, and the optimization-level=3 example in the OpenVINO backend runtime configuration table. * ggml-openvino : support RELU, POOL_2D, QUICK_GEGLU, and ROLL ops * reorder op table * exclude GPU/NPU failing POOL_2D case * move op type detection to compute_op_case * Relax rope supported cases * Fix pool case * Update openvino doc, gpu driver in ov docker * openvino: remove unused static remote context branch * openvino: parallelize static model build * Apply editorconfig --------- Co-authored-by: Mostafa Faheem <mostafaaafaheem@gmail.com> Co-authored-by: Ravi Panchumarthy <ravi.panchumarthy@intel.com> Co-authored-by: zhaixuejun1993 <xuejun.zhai@intel.com>
1769 lines
66 KiB
YAML
1769 lines
66 KiB
YAML
name: Release
|
|
|
|
on:
|
|
workflow_dispatch: # allows manual triggering
|
|
inputs:
|
|
create_release:
|
|
description: 'Create new release'
|
|
required: true
|
|
type: boolean
|
|
push:
|
|
branches:
|
|
- master
|
|
paths: [
|
|
'.github/workflows/release.yml',
|
|
'**/CMakeLists.txt',
|
|
'**/.cmake',
|
|
'**/*.h',
|
|
'**/*.hpp',
|
|
'**/*.c',
|
|
'**/*.cpp',
|
|
'**/*.cu',
|
|
'**/*.cuh',
|
|
'**/*.swift',
|
|
'**/*.m',
|
|
'**/*.metal',
|
|
'**/*.comp',
|
|
'**/*.glsl'
|
|
]
|
|
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
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"
|
|
|
|
# note: run this workflow one at a time for better cache reuse
|
|
concurrency:
|
|
group: release
|
|
queue: max
|
|
|
|
jobs:
|
|
check-release:
|
|
runs-on: ubuntu-slim
|
|
|
|
outputs:
|
|
should_release: ${{ steps.check.outputs.should_release }}
|
|
|
|
steps:
|
|
- id: check
|
|
env:
|
|
COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
|
|
run: |
|
|
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
|
|
echo "should_release=true" >> $GITHUB_OUTPUT
|
|
elif [[ "${{ github.event_name }}" == "push" && "${{ github.ref }}" == "refs/heads/master" ]]; then
|
|
if echo "$COMMIT_MESSAGE" | grep -q '\[no release\]'; then
|
|
echo "should_release=false" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "should_release=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
else
|
|
echo "should_release=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
macos-cpu:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build: 'arm64'
|
|
arch: 'arm64'
|
|
os: macos-26
|
|
defines: "-DGGML_METAL_EMBED_LIBRARY=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=13.3"
|
|
# TODO: this build is disabled to save Github Actions resources (https://github.com/ggml-org/llama.cpp/pull/23780)
|
|
# in order to enable it again, we have to provision dedicated runners to run it
|
|
#- build: 'arm64-kleidiai'
|
|
# arch: 'arm64'
|
|
# os: macos-14
|
|
# defines: "-DGGML_METAL_EMBED_LIBRARY=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=13.3 -DGGML_CPU_KLEIDIAI=ON"
|
|
- build: 'x64'
|
|
arch: 'x64'
|
|
os: macos-15-intel
|
|
# Metal is disabled on x64 due to intermittent failures with Github runners not having a GPU:
|
|
# https://github.com/ggml-org/llama.cpp/actions/runs/8635935781/job/23674807267#step:5:2313
|
|
defines: "-DGGML_METAL=OFF -DCMAKE_OSX_DEPLOYMENT_TARGET=13.3"
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-${{ matrix.os }}-${{ matrix.arch }}
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
sysctl -a
|
|
cmake -B build \
|
|
${{ matrix.defines }} \
|
|
-DCMAKE_INSTALL_RPATH='@loader_path' \
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
|
|
-DLLAMA_FATAL_WARNINGS=ON \
|
|
-DLLAMA_BUILD_BORINGSSL=ON \
|
|
${{ env.CMAKE_ARGS }}
|
|
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
|
|
|
|
- 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-macos-${{ matrix.build }}.tar.gz -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-macos-${{ matrix.build }}.tar.gz
|
|
name: llama-bin-macos-${{ matrix.build }}.tar.gz
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-${{ matrix.os }}-${{ matrix.arch }}
|
|
|
|
ubuntu-cpu:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build: 'x64'
|
|
os: ubuntu-22.04
|
|
- build: 'arm64'
|
|
os: ubuntu-24.04-arm
|
|
- build: 's390x'
|
|
os: ubuntu-24.04-s390x
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential libssl-dev
|
|
|
|
- name: Toolchain workaround (GCC 14)
|
|
if: ${{ contains(matrix.os, 'ubuntu-24.04') }}
|
|
run: |
|
|
sudo apt-get install -y gcc-14 g++-14
|
|
echo "CC=gcc-14" >> "$GITHUB_ENV"
|
|
echo "CXX=g++-14" >> "$GITHUB_ENV"
|
|
|
|
- name: ccache
|
|
if: ${{ matrix.build != 's390x' }}
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-${{ matrix.os }}-cpu
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
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 \
|
|
-DLLAMA_FATAL_WARNINGS=ON \
|
|
${{ env.CMAKE_ARGS }}
|
|
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-${{ 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-${{ matrix.build }}.tar.gz
|
|
name: llama-bin-ubuntu-${{ matrix.build }}.tar.gz
|
|
|
|
- name: ccache-clear
|
|
if: ${{ matrix.build != 's390x' }}
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-${{ matrix.os }}-cpu
|
|
|
|
ubuntu-vulkan:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build: 'x64'
|
|
os: ubuntu-22.04
|
|
- build: 'arm64'
|
|
os: ubuntu-24.04-arm
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
if [[ "${{ matrix.os }}" =~ "ubuntu-22.04" ]]; then
|
|
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
|
|
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y build-essential mesa-vulkan-drivers vulkan-sdk libssl-dev
|
|
else
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y gcc-14 g++-14 build-essential glslc libvulkan-dev spirv-headers libssl-dev ninja-build
|
|
echo "CC=gcc-14" >> "$GITHUB_ENV"
|
|
echo "CXX=g++-14" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-${{ matrix.os }}-vulkan
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
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_VULKAN=ON \
|
|
${{ env.CMAKE_ARGS }}
|
|
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-vulkan-${{ 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-vulkan-${{ matrix.build }}.tar.gz
|
|
name: llama-bin-ubuntu-vulkan-${{ matrix.build }}.tar.gz
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-${{ matrix.os }}-vulkan
|
|
|
|
android-arm64:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
#permissions:
|
|
# actions: write
|
|
|
|
env:
|
|
NDK_VERSION: "29.0.14206865"
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: Set up JDK
|
|
uses: actions/setup-java@v5
|
|
with:
|
|
java-version: 17
|
|
distribution: temurin
|
|
|
|
- name: Setup Android SDK
|
|
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1
|
|
with:
|
|
log-accepted-android-sdk-licenses: false
|
|
|
|
- name: Install NDK
|
|
run: |
|
|
sdkmanager "ndk;${{ env.NDK_VERSION }}"
|
|
echo "ANDROID_NDK=${ANDROID_SDK_ROOT}/ndk/${{ env.NDK_VERSION }}" >> $GITHUB_ENV
|
|
|
|
# note : disabled to spare some cache space (https://github.com/ggml-org/llama.cpp/pull/23789)
|
|
# for some reason, the ccache does not improve the build time in this case
|
|
# example:
|
|
# cache off: https://github.com/ggerganov/tmp2/actions/runs/26534713799/job/78160400831
|
|
# cache on: https://github.com/ggerganov/tmp2/actions/runs/26534713799/job/78224189394
|
|
#
|
|
#- name: ccache
|
|
# uses: ggml-org/ccache-action@v1.2.21
|
|
# with:
|
|
# key: release-android-arm64
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
cmake -B build \
|
|
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
|
|
-DANDROID_ABI=arm64-v8a \
|
|
-DANDROID_PLATFORM=android-28 \
|
|
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
|
|
-DGGML_BACKEND_DL=ON \
|
|
-DGGML_NATIVE=OFF \
|
|
-DGGML_CPU_ALL_VARIANTS=ON \
|
|
-DLLAMA_FATAL_WARNINGS=ON \
|
|
-DGGML_OPENMP=OFF \
|
|
-DLLAMA_BUILD_BORINGSSL=ON \
|
|
${{ env.CMAKE_ARGS }}
|
|
cmake --build build --config Release -j $(nproc)
|
|
|
|
#- name: ccache-clear
|
|
# uses: ./.github/actions/ccache-clear
|
|
# with:
|
|
# key: release-android-arm64
|
|
|
|
- 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-android-arm64.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-android-arm64.tar.gz
|
|
name: llama-bin-android-arm64.tar.gz
|
|
|
|
ubuntu-24-openvino:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: ubuntu-24.04
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
outputs:
|
|
openvino_version: ${{ steps.openvino_version.outputs.value }}
|
|
|
|
env:
|
|
# Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile
|
|
OPENVINO_VERSION_MAJOR: "2026.3.1"
|
|
OPENVINO_VERSION_FULL: "2026.3.1.22476.56d9685302d"
|
|
|
|
steps:
|
|
- name: Set OpenVINO version output
|
|
id: openvino_version
|
|
run: echo "value=${{ env.OPENVINO_VERSION_MAJOR }}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-ubuntu-24.04-openvino-release-no-preset-v1
|
|
|
|
- name: Dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential libssl-dev libtbb12 cmake ninja-build python3-pip
|
|
sudo apt install ocl-icd-opencl-dev opencl-headers opencl-clhpp-headers intel-opencl-icd
|
|
|
|
- name: Use OpenVINO Toolkit Cache
|
|
uses: actions/cache@v5
|
|
id: cache-openvino
|
|
with:
|
|
path: ./openvino_toolkit
|
|
key: cache-gha-openvino-toolkit-v${{ env.OPENVINO_VERSION_FULL }}-${{ runner.os }}
|
|
|
|
- name: Setup OpenVINO Toolkit
|
|
if: steps.cache-openvino.outputs.cache-hit != 'true'
|
|
uses: ./.github/actions/linux-setup-openvino
|
|
with:
|
|
path: ./openvino_toolkit
|
|
version_major: ${{ env.OPENVINO_VERSION_MAJOR }}
|
|
version_full: ${{ env.OPENVINO_VERSION_FULL }}
|
|
|
|
- name: Install OpenVINO dependencies
|
|
run: |
|
|
cd ./openvino_toolkit
|
|
chmod +x ./install_dependencies/install_openvino_dependencies.sh
|
|
echo "Y" | sudo -E ./install_dependencies/install_openvino_dependencies.sh
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
source ./openvino_toolkit/setupvars.sh
|
|
cmake -B build/ReleaseOV -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DGGML_OPENVINO=ON \
|
|
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
|
|
${{ env.CMAKE_ARGS }}
|
|
cmake --build build/ReleaseOV --config Release --parallel
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
uses: ./.github/actions/get-tag-name
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
dest=./build/ReleaseOV/bin
|
|
OPENVINO_ROOT=./openvino_toolkit
|
|
ov_lib="$OPENVINO_ROOT/runtime/lib/intel64"
|
|
|
|
# Bundle OpenVINO runtime libs + TBB. Binaries built with RPATH=$ORIGIN
|
|
# load these siblings without setupvars.sh / LD_LIBRARY_PATH.
|
|
cp -P "$ov_lib"/libopenvino.so* \
|
|
"$ov_lib"/libopenvino_c.so* \
|
|
"$ov_lib"/libopenvino_*_plugin.so \
|
|
"$ov_lib"/libopenvino_intel_npu_compiler*.so \
|
|
"$OPENVINO_ROOT"/runtime/3rdparty/tbb/lib/*.so* \
|
|
"$dest"
|
|
cp -P /usr/lib/x86_64-linux-gnu/libOpenCL.so.1* "$dest" 2>/dev/null || true
|
|
cp "$ov_lib"/cache.json "$dest" 2>/dev/null || true
|
|
|
|
# OpenVINO licensing
|
|
cp -r "$OPENVINO_ROOT"/docs/licensing "$dest"/openvino-licensing
|
|
|
|
cp LICENSE "$dest"
|
|
tar -czvf llama-${{ steps.tag.outputs.name }}-bin-ubuntu-openvino-${{ env.OPENVINO_VERSION_MAJOR }}-x64.tar.gz --transform "s,^\.,llama-${{ steps.tag.outputs.name }}," -C "$dest" .
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: llama-${{ steps.tag.outputs.name }}-bin-ubuntu-openvino-${{ env.OPENVINO_VERSION_MAJOR }}-x64.tar.gz
|
|
name: llama-bin-ubuntu-openvino-${{ env.OPENVINO_VERSION_MAJOR }}-x64.tar.gz
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-ubuntu-24.04-openvino-release-no-preset-v1
|
|
|
|
windows-openvino:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: windows-2022
|
|
|
|
outputs:
|
|
openvino_version: ${{ steps.openvino_version.outputs.value }}
|
|
|
|
env:
|
|
# Sync versions in build-openvino.yml, build-self-hosted.yml, release.yml, build-cache.yml, .devops/openvino.Dockerfile
|
|
OPENVINO_VERSION_MAJOR: "2026.3.1"
|
|
OPENVINO_VERSION_FULL: "2026.3.1.22476.56d9685302d"
|
|
|
|
steps:
|
|
- name: Set OpenVINO version output
|
|
id: openvino_version
|
|
shell: bash
|
|
run: echo "value=${{ env.OPENVINO_VERSION_MAJOR }}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-windows-2022-openvino
|
|
variant: ccache
|
|
evict-old-files: 1d
|
|
|
|
- name: Setup Cache
|
|
uses: actions/cache@v5
|
|
id: cache-openvino
|
|
with:
|
|
path: ./openvino_toolkit
|
|
key: cache-gha-openvino-toolkit-v${{ env.OPENVINO_VERSION_FULL }}-${{ runner.os }}
|
|
|
|
- name: Setup OpenVINO Toolkit
|
|
if: steps.cache-openvino.outputs.cache-hit != 'true'
|
|
uses: ./.github/actions/windows-setup-openvino
|
|
with:
|
|
path: ./openvino_toolkit
|
|
version_major: ${{ env.OPENVINO_VERSION_MAJOR }}
|
|
version_full: ${{ env.OPENVINO_VERSION_FULL }}
|
|
|
|
- name: Install OpenCL using vcpkg
|
|
shell: powershell
|
|
run: |
|
|
git clone https://github.com/microsoft/vcpkg C:\vcpkg
|
|
C:\vcpkg\bootstrap-vcpkg.bat
|
|
C:\vcpkg\vcpkg install opencl
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
shell: cmd
|
|
run: |
|
|
REM Find extracted OpenVINO folder dynamically
|
|
for /d %%i in (openvino_toolkit\*) do set OPENVINO_ROOT=%%i
|
|
|
|
if not exist "%OPENVINO_ROOT%\runtime\cmake\OpenVINOConfig.cmake" (
|
|
echo ERROR: OpenVINOConfig.cmake not found
|
|
exit /b 1
|
|
)
|
|
|
|
call "%OPENVINO_ROOT%\setupvars.bat"
|
|
|
|
cmake -B build\ReleaseOV -G "Visual Studio 17 2022" ^
|
|
-A x64 ^
|
|
-DCMAKE_BUILD_TYPE=Release ^
|
|
-DGGML_OPENVINO=ON ^
|
|
-DLLAMA_BUILD_BORINGSSL=ON ^
|
|
-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake ^
|
|
${{ env.CMAKE_ARGS }}
|
|
|
|
cmake --build build\ReleaseOV --config Release -- /m
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
uses: ./.github/actions/get-tag-name
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
shell: powershell
|
|
run: |
|
|
# Locate the extracted OpenVINO toolkit root (same pattern as the Build step).
|
|
$OPENVINO_ROOT = (Get-ChildItem -Directory openvino_toolkit | Select-Object -First 1).FullName
|
|
if (-not $OPENVINO_ROOT) {
|
|
Write-Error "OpenVINO toolkit folder not found under .\openvino_toolkit"
|
|
exit 1
|
|
}
|
|
|
|
$dest = ".\build\ReleaseOV\bin\Release"
|
|
|
|
$ovBin = Join-Path $OPENVINO_ROOT 'runtime\bin\intel64\Release'
|
|
Copy-Item -Path (Join-Path $ovBin '*.dll') -Destination $dest -Force
|
|
Copy-Item -Path (Join-Path $ovBin 'cache.json') -Destination $dest -Force
|
|
|
|
$tbbBin = Join-Path $OPENVINO_ROOT 'runtime\3rdparty\tbb\bin'
|
|
Copy-Item -Path (Join-Path $tbbBin 'tbb*.dll') -Destination $dest -Force
|
|
|
|
# OpenVINO licensing
|
|
$licensingDest = Join-Path $dest 'openvino-licensing'
|
|
New-Item -ItemType Directory -Force -Path $licensingDest | Out-Null
|
|
Copy-Item -Path (Join-Path $OPENVINO_ROOT 'docs\licensing\*') -Destination $licensingDest -Recurse -Force
|
|
|
|
Copy-Item LICENSE $dest
|
|
7z a -snl llama-${{ steps.tag.outputs.name }}-bin-win-openvino-${{ env.OPENVINO_VERSION_MAJOR }}-x64.zip $dest\*
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: llama-${{ steps.tag.outputs.name }}-bin-win-openvino-${{ env.OPENVINO_VERSION_MAJOR }}-x64.zip
|
|
name: llama-bin-win-openvino-${{ env.OPENVINO_VERSION_MAJOR }}-x64.zip
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-windows-2022-openvino
|
|
|
|
windows-cpu:
|
|
name: windows-cpu / ${{ matrix.arch }}
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: windows-2025-vs2026
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- arch: 'x64'
|
|
- arch: 'arm64'
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: Install Ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-windows-2025-vs2026-${{ matrix.arch }}-cpu
|
|
|
|
- name: Build
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\18\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 ^
|
|
-DGGML_OPENMP_FETCH=ON ^
|
|
${{ env.CMAKE_ARGS }}
|
|
cmake --build build --config Release
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
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
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-windows-2025-vs2026-${{ matrix.arch }}-cpu
|
|
|
|
# note: builds only the ggml-hip backend - llama-server is injected from the
|
|
# windows-cpu zip during the release "Merge artifacts" step
|
|
windows-rocm:
|
|
needs: [check-release]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: windows-2022
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- ROCM_VERSION: "7.14.0"
|
|
gpu_targets: "gfx1010;gfx1011;gfx1012;gfx1030;gfx1031;gfx1032;gfx1033;gfx1034;gfx1035;gfx1036;gfx1100;gfx1101;gfx1102;gfx1103;gfx1150;gfx1151;gfx1152;gfx1153;gfx1200;gfx1201"
|
|
build: x64
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Install Ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: windows-rocm-${{ matrix.ROCM_VERSION }}-${{ matrix.build }}
|
|
evict-old-files: 1d
|
|
max-size: "1G"
|
|
|
|
# - name: Cache ROCm Installation
|
|
# id: cache-rocm
|
|
# uses: actions/cache@v5
|
|
# with:
|
|
# path: C:\TheRock\build
|
|
# key: rocm-wheels-${{ matrix.ROCM_VERSION }}-multi-arch-${{ runner.os }}
|
|
|
|
- name: Setup ROCm
|
|
# if: steps.cache-rocm.outputs.cache-hit != 'true'
|
|
uses: ./.github/actions/windows-setup-rocm
|
|
with:
|
|
version: ${{ matrix.ROCM_VERSION }}
|
|
|
|
- name: Setup ROCm Environment
|
|
run: |
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Activate venv from cache or fresh install
|
|
& C:\TheRock\build\.venv\Scripts\Activate.ps1
|
|
|
|
# Expand the devel tree (idempotent; no-op if already done during install)
|
|
rocm-sdk init
|
|
if ($LASTEXITCODE -ne 0) { throw "rocm-sdk init failed with exit code $LASTEXITCODE" }
|
|
|
|
# Get ROCm installation paths using the rocm-sdk CLI tool
|
|
$rocmPath = (rocm-sdk path --root)
|
|
if (-not $rocmPath) { throw "rocm-sdk path --root returned empty - devel package may not be installed" }
|
|
$rocmPath = $rocmPath.Trim()
|
|
$cmakePath = (rocm-sdk path --cmake).Trim()
|
|
$binPath = (rocm-sdk path --bin).Trim()
|
|
write-host "ROCm root: $rocmPath"
|
|
write-host "CMake path: $cmakePath"
|
|
write-host "Bin path: $binPath"
|
|
|
|
echo "HIP_PATH=$rocmPath" >> $env:GITHUB_ENV
|
|
echo "CMAKE_PREFIX_PATH=$cmakePath" >> $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 "$binPath" >> $env:GITHUB_PATH
|
|
|
|
# Keep venv in PATH for subsequent steps
|
|
echo "C:\TheRock\build\.venv\Scripts" >> $env:GITHUB_PATH
|
|
|
|
- name: Build
|
|
run: |
|
|
cmake -S . -B build `
|
|
-G "Ninja Multi-Config" `
|
|
-DCMAKE_PREFIX_PATH="${env:HIP_PATH}" `
|
|
-DGGML_BACKEND_DL=ON `
|
|
-DGGML_NATIVE=OFF `
|
|
-DGGML_CPU=OFF `
|
|
-DGGML_HIP=ON `
|
|
-DCMAKE_C_COMPILER="${env:HIP_PATH}\lib\llvm\bin\clang.exe" `
|
|
-DCMAKE_CXX_COMPILER="${env:HIP_PATH}\lib\llvm\bin\clang++.exe" `
|
|
-DCMAKE_C_FLAGS="-Wno-error=incompatible-pointer-types" `
|
|
-DCMAKE_HIP_COMPILER="${env:HIP_PATH}\lib\llvm\bin\clang.exe" `
|
|
-DHIP_PATH="${env:HIP_PATH}" `
|
|
-DAMDGPU_TARGETS="${{ matrix.gpu_targets }}"
|
|
cmake --build build --config Release --parallel ${env:NUMBER_OF_PROCESSORS} --target ggml-hip
|
|
|
|
- name: Verify HIP backend was built
|
|
run: |
|
|
$hipDll = Get-ChildItem -Path build\bin\Release -Filter "ggml-hip*.dll" -ErrorAction SilentlyContinue
|
|
if (-not $hipDll) {
|
|
Write-Host "##[error]ggml-hip*.dll was NOT produced. The HIP backend silently failed to build."
|
|
Write-Host "Contents of build\bin\Release:"
|
|
Get-ChildItem build\bin\Release | Format-Table -AutoSize
|
|
exit 1
|
|
}
|
|
Write-Host "HIP backend artifact found:"
|
|
$hipDll | Format-Table FullName, Length -AutoSize
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
uses: ./.github/actions/get-tag-name
|
|
|
|
- name: Get ROCm short version
|
|
run: |
|
|
$rocmVersionShort = ('${{ matrix.ROCM_VERSION }}'.Split('.')[0..1] -join '.')
|
|
echo "ROCM_VERSION_SHORT=$rocmVersionShort" >> $env:GITHUB_ENV
|
|
|
|
- name: Bundle HIP runtime DLLs (amdhip64_7.dll, rocm_kpack.dll, amd_comgr.dll)
|
|
run: |
|
|
$ErrorActionPreference = "Stop"
|
|
# See issue https://github.com/ggml-org/llama.cpp/issues/26929.
|
|
# ggml-hip.dll loads amdhip64_7.dll at run time. The Adrenalin driver
|
|
# ships an amdhip64_7.dll in System32, which the loader searches before PATH,
|
|
# so a matching DLL from PATH cannot win. Copy amdhip64 next to the
|
|
# binaries (exe directory is searched before System32) so the correct
|
|
# runtime is used. rocm_kpack.dll is amdhip64_7's direct dependency, so
|
|
# copy the matching version too. amd_comgr is copied as well to keep it
|
|
# in sync with the bundled amdhip64, avoiding a version mismatch with a
|
|
# amd_comgr from System32.
|
|
# rocblas/hipblaslt kernels resolve fine via PATH and are not copied.
|
|
$binPath = (rocm-sdk path --bin).Trim()
|
|
if (-not $binPath) { throw "rocm-sdk path --bin returned empty" }
|
|
write-host "ROCm bin path: $binPath"
|
|
|
|
$patterns = @("amdhip64_7.dll", "rocm_kpack.dll", "amd_comgr.dll")
|
|
foreach ($pattern in $patterns) {
|
|
$files = Get-ChildItem -Path $binPath -Filter $pattern -ErrorAction SilentlyContinue
|
|
if (-not $files) { throw "no match for $pattern in $binPath" }
|
|
foreach ($f in $files) {
|
|
Copy-Item $f.FullName -Destination build\bin\Release -Force
|
|
write-host " copied $($f.Name)"
|
|
}
|
|
}
|
|
|
|
- name: Pack artifacts
|
|
run: |
|
|
7z a -snl llama-bin-win-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.zip `
|
|
.\build\bin\Release\ggml-hip.dll `
|
|
.\build\bin\Release\amdhip64_7.dll `
|
|
.\build\bin\Release\rocm_kpack.dll `
|
|
.\build\bin\Release\amd_comgr.dll
|
|
|
|
- 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
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: windows-rocm-${{ matrix.ROCM_VERSION }}-${{ matrix.build }}
|
|
|
|
# note: builds only the backend library - llama-server (with the embedded UI)
|
|
# is injected from the windows-cpu zip during the release "Merge artifacts" step
|
|
windows:
|
|
needs: [check-release]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: windows-2025
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
env:
|
|
OPENBLAS_VERSION: 0.3.23
|
|
VULKAN_VERSION: 1.4.357.0
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- backend: 'vulkan'
|
|
arch: 'x64'
|
|
defines: '-DGGML_VULKAN=ON'
|
|
target: 'ggml-vulkan'
|
|
- backend: 'opencl-adreno'
|
|
arch: 'arm64'
|
|
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" -DGGML_OPENCL=ON -DGGML_OPENCL_USE_ADRENO_KERNELS=ON'
|
|
target: 'ggml-opencl'
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install Vulkan SDK
|
|
id: get_vulkan
|
|
if: ${{ matrix.backend == 'vulkan' }}
|
|
run: |
|
|
curl.exe -o $env:RUNNER_TEMP/VulkanSDK-Installer.exe -L "https://sdk.lunarg.com/sdk/download/${env:VULKAN_VERSION}/windows/vulkansdk-windows-X64-${env:VULKAN_VERSION}.exe"
|
|
& "$env:RUNNER_TEMP\VulkanSDK-Installer.exe" --accept-licenses --default-answer --confirm-command install
|
|
Add-Content $env:GITHUB_ENV "VULKAN_SDK=C:\VulkanSDK\${env:VULKAN_VERSION}"
|
|
Add-Content $env:GITHUB_PATH "C:\VulkanSDK\${env:VULKAN_VERSION}\bin"
|
|
|
|
- name: Install Ninja
|
|
id: install_ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
# TODO: these jobs need to use llvm toolchain in order to utilize the ccache
|
|
#- name: ccache
|
|
# uses: ggml-org/ccache-action@v1.2.21
|
|
# with:
|
|
# key: release-windows-2025-${{ matrix.arch }}-${{ matrix.backend }}
|
|
|
|
- name: Install OpenCL Headers and Libs
|
|
id: install_opencl
|
|
if: ${{ matrix.backend == 'opencl-adreno' && matrix.arch == 'arm64' }}
|
|
run: |
|
|
git clone https://github.com/KhronosGroup/OpenCL-Headers
|
|
cd OpenCL-Headers
|
|
cmake -B build `
|
|
-DBUILD_TESTING=OFF `
|
|
-DOPENCL_HEADERS_BUILD_TESTING=OFF `
|
|
-DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF `
|
|
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
|
|
cmake --build build --target install
|
|
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader
|
|
cd OpenCL-ICD-Loader
|
|
cmake -B build-arm64-release `
|
|
-A arm64 `
|
|
-DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" `
|
|
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release"
|
|
cmake --build build-arm64-release --target install --config release
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
cmake -S . -B build ${{ matrix.defines }} -DGGML_NATIVE=OFF -DGGML_CPU=OFF -DGGML_BACKEND_DL=ON -DLLAMA_BUILD_BORINGSSL=ON
|
|
cmake --build build --config Release --target ${{ matrix.target }}
|
|
|
|
#- name: ccache-clear
|
|
# uses: ./.github/actions/ccache-clear
|
|
# with:
|
|
# key: release-windows-2025-${{ matrix.arch }}-${{ matrix.backend }}
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
7z a -snl llama-bin-win-${{ matrix.backend }}-${{ matrix.arch }}.zip .\build\bin\Release\${{ matrix.target }}.dll
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: llama-bin-win-${{ matrix.backend }}-${{ matrix.arch }}.zip
|
|
name: llama-bin-win-${{ matrix.backend }}-${{ matrix.arch }}.zip
|
|
|
|
# note: builds only the ggml-cuda backend - llama-server is injected from the
|
|
# windows-cpu zip during the release "Merge artifacts" step
|
|
windows-cuda:
|
|
name: windows-cuda (${{ matrix.cuda }}, ${{ matrix.arch }})
|
|
needs: [check-release]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: windows-2022
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- cuda: '12.4'
|
|
arch: x64
|
|
defines: '-DGGML_CUDA_CUB_3DOT2=ON'
|
|
- cuda: '13.3'
|
|
arch: x64
|
|
defines: ''
|
|
- cuda: '13.4'
|
|
arch: arm64
|
|
defines: '-DCMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-msvc-cuda.cmake'
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Install Cuda Toolkit
|
|
uses: ./.github/actions/windows-setup-cuda
|
|
with:
|
|
cuda_version: ${{ matrix.cuda }}
|
|
cuda_arch: ${{ matrix.arch }}
|
|
|
|
- name: Install Ninja
|
|
id: install_ninja
|
|
run: |
|
|
choco install ninja
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-windows-2022-${{ matrix.arch }}-cuda-${{ matrix.cuda }}
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
shell: cmd
|
|
# TODO: Remove GGML_CUDA_CUB_3DOT2 flag once CCCL 3.2 is bundled within CTK and that CTK version is used in this project
|
|
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" ^
|
|
-DGGML_BACKEND_DL=ON ^
|
|
-DGGML_NATIVE=OFF ^
|
|
-DGGML_CPU=OFF ^
|
|
-DGGML_CUDA=ON ^
|
|
-DLLAMA_BUILD_BORINGSSL=ON ${{ matrix.defines }}
|
|
set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1
|
|
cmake --build build --config Release -j %NINJA_JOBS% --target ggml-cuda
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
7z a -snl llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip .\build\bin\Release\ggml-cuda.dll
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip
|
|
name: llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip
|
|
|
|
- name: Copy and pack Cuda runtime (x64)
|
|
if: ${{ matrix.arch == 'x64' }}
|
|
run: |
|
|
echo "Cuda install location: ${{ env.CUDA_PATH }}"
|
|
$dst='.\build\bin\cudart\'
|
|
robocopy "${{env.CUDA_PATH}}\bin" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll
|
|
robocopy "${{env.CUDA_PATH}}\lib" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll
|
|
robocopy "${{env.CUDA_PATH}}\bin\x64" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll
|
|
7z a cudart-llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip $dst\*
|
|
|
|
- name: Copy and pack Cuda runtime (ARM64)
|
|
if: ${{ matrix.arch == 'arm64' }}
|
|
run: |
|
|
echo "Cuda install location: ${{ env.CUDA_PATH }}"
|
|
$dst='.\build\bin\cudart\'
|
|
robocopy "${{env.CUDA_PATH}}\bin\arm64" $dst cudart64_*.dll cublas64_*.dll cublasLt64_*.dll
|
|
7z a cudart-llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip $dst\*
|
|
|
|
- name: Upload Cuda runtime
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: cudart-llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip
|
|
name: cudart-llama-bin-win-cuda-${{ matrix.cuda }}-${{ matrix.arch }}.zip
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-windows-2022-${{ matrix.arch }}-cuda-${{ matrix.cuda }}
|
|
|
|
# note: builds only the ggml-sycl backend - llama-server is injected from the
|
|
# windows-cpu zip during the release "Merge artifacts" step
|
|
windows-sycl:
|
|
needs: [check-release]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: windows-2022
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
env:
|
|
WINDOWS_BASEKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b60765d1-2b85-4e85-86b6-cb0e9563a699/intel-deep-learning-essentials-2025.3.3.18_offline.exe
|
|
WINDOWS_DPCPP_MKL: intel.oneapi.win.cpp-dpcpp-common:intel.oneapi.win.mkl.devel:intel.oneapi.win.dnnl:intel.oneapi.win.tbb.devel
|
|
LEVEL_ZERO_SDK_URL: https://github.com/oneapi-src/level-zero/releases/download/v1.28.2/level-zero-win-sdk-1.28.2.zip
|
|
ONEAPI_ROOT: "C:/Program Files (x86)/Intel/oneAPI"
|
|
ONEAPI_INSTALLER_VERSION: "2025.3.3"
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Download & Install oneAPI
|
|
shell: bash
|
|
run: |
|
|
scripts/install-oneapi.bat $WINDOWS_BASEKIT_URL $WINDOWS_DPCPP_MKL
|
|
|
|
- name: Install Level Zero SDK
|
|
shell: pwsh
|
|
run: |
|
|
Invoke-WebRequest -Uri "${{ env.LEVEL_ZERO_SDK_URL }}" -OutFile "level-zero-win-sdk.zip"
|
|
Expand-Archive -Path "level-zero-win-sdk.zip" -DestinationPath "C:/level-zero-sdk" -Force
|
|
"LEVEL_ZERO_V1_SDK_PATH=C:/level-zero-sdk" | Out-File -FilePath $env:GITHUB_ENV -Append
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-windows-2022-x64-sycl
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force
|
|
cmake -G "Ninja" -B build ^
|
|
-DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=icx ^
|
|
-DCMAKE_BUILD_TYPE=Release ^
|
|
-DGGML_BACKEND_DL=ON -DBUILD_SHARED_LIBS=ON ^
|
|
-DGGML_CPU=OFF -DGGML_SYCL=ON ^
|
|
-DLLAMA_BUILD_BORINGSSL=ON
|
|
cmake --build build --target ggml-sycl -j %NUMBER_OF_PROCESSORS%
|
|
|
|
- name: Build the release package
|
|
id: pack_artifacts
|
|
run: |
|
|
echo "cp oneAPI running time dll files in ${{ env.ONEAPI_ROOT }} to ./build/bin"
|
|
|
|
cp "${{ env.ONEAPI_ROOT }}/mkl/latest/bin/mkl_sycl_blas.5.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/mkl/latest/bin/mkl_core.2.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/mkl/latest/bin/mkl_tbb_thread.2.dll" ./build/bin
|
|
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/ur_adapter_level_zero.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/ur_adapter_level_zero_v2.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/ur_adapter_opencl.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/ur_loader.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/ur_win_proxy_loader.dll" ./build/bin
|
|
ZE_LOADER_DLL=$(find "${{ env.ONEAPI_ROOT }}" "$LEVEL_ZERO_V1_SDK_PATH" -iname ze_loader.dll -print -quit 2>/dev/null || true)
|
|
if [ -n "$ZE_LOADER_DLL" ]; then
|
|
echo "Using Level Zero loader: $ZE_LOADER_DLL"
|
|
cp "$ZE_LOADER_DLL" ./build/bin
|
|
else
|
|
echo "Level Zero loader DLL not found in oneAPI or SDK; relying on system driver/runtime"
|
|
fi
|
|
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/sycl8.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/svml_dispmd.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/libmmd.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/libiomp5md.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/sycl-ls.exe" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/libsycl-fallback-bfloat16.spv" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/compiler/latest/bin/libsycl-native-bfloat16.spv" ./build/bin
|
|
|
|
cp "${{ env.ONEAPI_ROOT }}/dnnl/latest/bin/dnnl.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/tbb/latest/bin/tbb12.dll" ./build/bin
|
|
|
|
cp "${{ env.ONEAPI_ROOT }}/tcm/latest/bin/tcm.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/tcm/latest/bin/libhwloc-15.dll" ./build/bin
|
|
cp "${{ env.ONEAPI_ROOT }}/umf/latest/bin/umf.dll" ./build/bin
|
|
|
|
echo "cp oneAPI running time dll files to ./build/bin done"
|
|
7z a -snl llama-bin-win-sycl-x64.zip ./build/bin/*
|
|
|
|
- name: Upload the release package
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: llama-bin-win-sycl-x64.zip
|
|
name: llama-bin-win-sycl-x64.zip
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-windows-2022-x64-sycl
|
|
|
|
ubuntu-24-sycl:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
strategy:
|
|
matrix:
|
|
build: [fp32, fp16]
|
|
include:
|
|
- build: fp32
|
|
fp16: OFF
|
|
- build: fp16
|
|
fp16: ON
|
|
|
|
runs-on: ubuntu-24.04
|
|
|
|
env:
|
|
ONEAPI_ROOT: /opt/intel/oneapi/
|
|
ONEAPI_INSTALLER_VERSION: "2025.3.3"
|
|
LEVEL_ZERO_VERSION: "1.28.2"
|
|
LEVEL_ZERO_UBUNTU_VERSION: "u24.04"
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download & Install oneAPI
|
|
shell: bash
|
|
run: |
|
|
cd /tmp
|
|
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/56f7923a-adb8-43f3-8b02-2b60fcac8cab/intel-deep-learning-essentials-2025.3.3.16_offline.sh -O intel-deep-learning-essentials_offline.sh
|
|
sudo bash intel-deep-learning-essentials_offline.sh -s -a --silent --eula accept
|
|
|
|
- name: Install Level Zero SDK
|
|
shell: bash
|
|
run: |
|
|
cd /tmp
|
|
wget -q "https://github.com/oneapi-src/level-zero/releases/download/v${LEVEL_ZERO_VERSION}/level-zero_${LEVEL_ZERO_VERSION}%2B${LEVEL_ZERO_UBUNTU_VERSION}_amd64.deb" -O level-zero.deb
|
|
wget -q "https://github.com/oneapi-src/level-zero/releases/download/v${LEVEL_ZERO_VERSION}/level-zero-devel_${LEVEL_ZERO_VERSION}%2B${LEVEL_ZERO_UBUNTU_VERSION}_amd64.deb" -O level-zero-devel.deb
|
|
sudo apt-get install -y ./level-zero.deb ./level-zero-devel.deb
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-ubuntu-24.04-sycl-${{ matrix.build }}
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
source /opt/intel/oneapi/setvars.sh
|
|
cmake -B build \
|
|
-G "Ninja" \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DGGML_SYCL=ON \
|
|
-DCMAKE_C_COMPILER=icx \
|
|
-DCMAKE_CXX_COMPILER=icpx \
|
|
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
|
|
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
|
|
-DLLAMA_OPENSSL=OFF \
|
|
-DGGML_NATIVE=OFF \
|
|
-DGGML_SYCL_F16=${{ matrix.fp16 }}
|
|
time 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-sycl-${{ matrix.build }}-x64.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-sycl-${{ matrix.build }}-x64.tar.gz
|
|
name: llama-bin-ubuntu-sycl-${{ matrix.build }}-x64.tar.gz
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-ubuntu-24.04-sycl-${{ matrix.build }}
|
|
|
|
ubuntu-24-rocm:
|
|
needs: [check-release, ui-build]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
|
|
runs-on: ubuntu-24.04
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- ROCM_VERSION: "7.14.0"
|
|
gpu_targets: "gfx908;gfx90a;gfx942;gfx950;gfx1010;gfx1011;gfx1012;gfx1030;gfx1031;gfx1032;gfx1033;gfx1034;gfx1035;gfx1036;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151;gfx1152;gfx1200;gfx1201"
|
|
build: 'x64'
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download UI build
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: tools/ui/dist
|
|
|
|
- name: Free up disk space
|
|
uses: ggml-org/free-disk-space@v1.3.1
|
|
with:
|
|
tool-cache: true
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: release-ubuntu-24.04-rocm-${{ matrix.ROCM_VERSION }}-${{ matrix.build }}
|
|
evict-old-files: 1d
|
|
max-size: "1G"
|
|
|
|
- name: Tune ccache for reinstalled ROCm toolchain
|
|
run: |
|
|
# ROCm is pip-installed fresh each run, so the clang binary's mtime
|
|
# changes every time. With the default compiler_check=mtime that
|
|
# invalidates the cache; hash compiler contents instead so warm
|
|
# builds hit.
|
|
ccache --set-config=compiler_check=content
|
|
ccache --set-config=sloppiness=time_macros,include_file_mtime,include_file_ctime
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
sudo apt install -y build-essential git cmake wget
|
|
|
|
- name: Setup TheRock with Wheels
|
|
id: therock_env
|
|
run: |
|
|
# Create Python virtual environment
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
|
|
# Install ROCm wheels for build
|
|
# libraries = HIP runtime and CMake configs needed for linking
|
|
# devel = compilers, headers, static libs
|
|
python -m pip install --upgrade pip
|
|
python -m pip install --index-url https://repo.amd.com/rocm/whl-multi-arch/ "rocm[libraries,devel]==${{ matrix.ROCM_VERSION }}"
|
|
|
|
# Get ROCm installation paths using the rocm-sdk CLI tool
|
|
ROCM_PATH=$(rocm-sdk path --root)
|
|
CMAKE_PATH=$(rocm-sdk path --cmake)
|
|
BIN_PATH=$(rocm-sdk path --bin)
|
|
echo "ROCM_PATH=$ROCM_PATH"
|
|
echo "CMAKE_PATH=$CMAKE_PATH"
|
|
echo "BIN_PATH=$BIN_PATH"
|
|
|
|
# Set environment variables
|
|
echo "ROCM_PATH=$ROCM_PATH" >> $GITHUB_ENV
|
|
echo "CMAKE_PREFIX_PATH=$CMAKE_PATH" >> $GITHUB_ENV
|
|
echo "HIP_PATH=$ROCM_PATH" >> $GITHUB_ENV
|
|
echo "PATH=$BIN_PATH:${PATH}" >> $GITHUB_ENV
|
|
echo "LD_LIBRARY_PATH=$ROCM_PATH/lib:${LD_LIBRARY_PATH:-}" >> $GITHUB_ENV
|
|
|
|
# Keep venv activated for subsequent steps
|
|
echo "$(pwd)/.venv/bin" >> $GITHUB_PATH
|
|
|
|
- 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 \
|
|
${{ env.CMAKE_ARGS }}
|
|
cmake --build build --config Release -j $(nproc)
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
uses: ./.github/actions/get-tag-name
|
|
|
|
- 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-${{ steps.tag.outputs.name }}-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-${{ steps.tag.outputs.name }}-bin-ubuntu-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.tar.gz
|
|
name: llama-bin-ubuntu-rocm-${{ env.ROCM_VERSION_SHORT }}-${{ matrix.build }}.tar.gz
|
|
|
|
- name: ccache-clear
|
|
uses: ./.github/actions/ccache-clear
|
|
with:
|
|
key: release-ubuntu-24.04-rocm-${{ matrix.ROCM_VERSION }}-${{ matrix.build }}
|
|
|
|
ios-xcode:
|
|
needs: [check-release]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
runs-on: macos-26
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup Xcode
|
|
run: |
|
|
sudo xcode-select -s /Applications/Xcode_26.4.app
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
sysctl -a
|
|
cmake -B build -G Xcode \
|
|
-DGGML_METAL_EMBED_LIBRARY=ON \
|
|
-DLLAMA_OPENSSL=OFF \
|
|
-DLLAMA_BUILD_APP=OFF \
|
|
-DLLAMA_BUILD_EXAMPLES=OFF \
|
|
-DLLAMA_BUILD_TOOLS=OFF \
|
|
-DLLAMA_BUILD_TESTS=OFF \
|
|
-DLLAMA_BUILD_SERVER=OFF \
|
|
-DCMAKE_SYSTEM_NAME=iOS \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=16.0 \
|
|
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml
|
|
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO
|
|
|
|
- name: xcodebuild for swift package
|
|
id: xcodebuild
|
|
run: |
|
|
# note: only macos and ios-device due to long build time
|
|
# ref: https://github.com/ggml-org/llama.cpp/pull/27252
|
|
./build-xcframework.sh macos ios-device
|
|
|
|
- name: Build Xcode project
|
|
run: xcodebuild -project examples/llama.swiftui/llama.swiftui.xcodeproj -scheme llama.swiftui -sdk iphoneos CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= -destination 'generic/platform=iOS' FRAMEWORK_FOLDER_PATH=./build-ios build
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
uses: ./.github/actions/get-tag-name
|
|
|
|
- name: Pack artifacts
|
|
id: pack_artifacts
|
|
run: |
|
|
# Zip file is required for Swift Package Manager, which does not support tar.gz for binary targets.
|
|
# For more details, see https://developer.apple.com/documentation/xcode/distributing-binary-frameworks-as-swift-packages
|
|
zip -r -y llama-${{ steps.tag.outputs.name }}-xcframework.zip build-apple/llama.xcframework
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v6
|
|
with:
|
|
path: llama-${{ steps.tag.outputs.name }}-xcframework.zip
|
|
name: llama-${{ steps.tag.outputs.name }}-xcframework.zip
|
|
|
|
# TODO: this build is disabled to save Github Actions resources (https://github.com/ggml-org/llama.cpp/pull/23705)
|
|
# in order to enable it again, we have to provision dedicated runners to run it
|
|
# openEuler-cann:
|
|
# strategy:
|
|
# matrix:
|
|
# include:
|
|
# # 910b with aclgraph (both architectures)
|
|
# - arch: x86
|
|
# chip_type: '910b'
|
|
# build: 'Release'
|
|
# use_acl_graph: 'on'
|
|
# - arch: aarch64
|
|
# chip_type: '910b'
|
|
# build: 'Release'
|
|
# use_acl_graph: 'on'
|
|
# # 310p without aclgraph (both architectures)
|
|
# - arch: x86
|
|
# chip_type: '310p'
|
|
# build: 'Release'
|
|
# use_acl_graph: 'off'
|
|
# - arch: aarch64
|
|
# chip_type: '310p'
|
|
# build: 'Release'
|
|
# use_acl_graph: 'off'
|
|
# runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
|
|
# steps:
|
|
# - name: Checkout
|
|
# uses: actions/checkout@v6
|
|
# with:
|
|
# fetch-depth: 0
|
|
#
|
|
# - name: Free up disk space
|
|
# uses: ggml-org/free-disk-space@v1.3.1
|
|
# with:
|
|
# tool-cache: true
|
|
#
|
|
# - name: Set container image
|
|
# id: cann-image
|
|
# run: |
|
|
# image="ascendai/cann:${{ matrix.chip_type == '910b' && '8.5.0-910b-openeuler24.03-py3.11' || '8.5.0-310p-openeuler24.03-py3.11' }}"
|
|
# echo "image=${image}" >> "${GITHUB_OUTPUT}"
|
|
#
|
|
# - name: Pull container image
|
|
# run: docker pull "${{ steps.cann-image.outputs.image }}"
|
|
#
|
|
# - name: Build
|
|
# env:
|
|
# BUILD_TYPE: ${{ matrix.build }}
|
|
# SOC_TYPE: ascend${{ matrix.chip_type }}
|
|
# USE_ACL_GRAPH: ${{ matrix.use_acl_graph }}
|
|
# run: |
|
|
# HOST_UID=$(id -u)
|
|
# HOST_GID=$(id -g)
|
|
#
|
|
# docker run --rm \
|
|
# -v "${PWD}:/workspace" \
|
|
# -w /workspace \
|
|
# -e SOC_TYPE=${SOC_TYPE} \
|
|
# -e BUILD_TYPE=${BUILD_TYPE} \
|
|
# -e USE_ACL_GRAPH=${USE_ACL_GRAPH} \
|
|
# "${{ steps.cann-image.outputs.image }}" \
|
|
# bash -lc '
|
|
# set -e
|
|
# yum install -y --setopt=install_weak_deps=False --setopt=tsflags=nodocs git gcc gcc-c++ make cmake openssl-devel
|
|
# yum clean all && rm -rf /var/cache/yum
|
|
# git config --global --add safe.directory "/workspace"
|
|
# export LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/$(uname -m)-linux/devlib/:${LD_LIBRARY_PATH}
|
|
# cmake -S . -B build \
|
|
# -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
|
# -DGGML_CANN=on \
|
|
# -DSOC_TYPE=${SOC_TYPE} \
|
|
# -DUSE_ACL_GRAPH=${USE_ACL_GRAPH}
|
|
# cmake --build build -j $(nproc)
|
|
#
|
|
# chown -R '"${HOST_UID}"':'"${HOST_GID}"' /workspace/build
|
|
# '
|
|
#
|
|
# - name: Determine tag name
|
|
# id: tag
|
|
# uses: ./.github/actions/get-tag-name
|
|
#
|
|
# - name: Pack artifacts
|
|
# run: |
|
|
# cp LICENSE ./build/bin/
|
|
# tar -czvf llama-${{ steps.tag.outputs.name }}-bin-${{ matrix.chip_type }}-openEuler-${{ matrix.arch }}${{ matrix.use_acl_graph == 'on' && '-aclgraph' || '' }}.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-${{ matrix.chip_type }}-openEuler-${{ matrix.arch }}${{ matrix.use_acl_graph == 'on' && '-aclgraph' || '' }}.tar.gz
|
|
# name: llama-bin-${{ matrix.chip_type }}-openEuler-${{ matrix.arch }}${{ matrix.use_acl_graph == 'on' && '-aclgraph' || '' }}.tar.gz
|
|
|
|
ui-build:
|
|
needs: [check-release]
|
|
if: ${{ needs.check-release.outputs.should_release == 'true' }}
|
|
uses: ./.github/workflows/ui-build.yml
|
|
|
|
release:
|
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || 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
|
|
id-token: write
|
|
attestations: write
|
|
|
|
runs-on: ubuntu-slim
|
|
|
|
needs:
|
|
- windows
|
|
- windows-cpu
|
|
- windows-cuda
|
|
- windows-sycl
|
|
- windows-rocm
|
|
- windows-openvino
|
|
- ubuntu-24-rocm
|
|
- ubuntu-cpu
|
|
- ubuntu-vulkan
|
|
- ubuntu-24-openvino
|
|
- ubuntu-24-sycl
|
|
- android-arm64
|
|
- macos-cpu
|
|
- ios-xcode
|
|
#- openEuler-cann
|
|
- ui-build
|
|
|
|
outputs:
|
|
tag_name: ${{ steps.tag.outputs.name }}
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
ssh-key: ${{ secrets.DEPLOY_KEY_RELEASE }}
|
|
|
|
- name: Determine tag name
|
|
id: tag
|
|
uses: ./.github/actions/get-tag-name
|
|
|
|
- name: Download artifacts
|
|
id: download-artifact
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
path: ./artifact
|
|
merge-multiple: true
|
|
|
|
- name: Merge artifacts
|
|
id: move_artifacts
|
|
run: |
|
|
mkdir -p release
|
|
|
|
# the windows-cpu zip contains the full toolset (llama-server with the embedded
|
|
# UI, ggml-cpu) - inject it into the other windows zips so that every archive
|
|
# ships the same binaries, only with a different backend library on top
|
|
echo "Injecting windows-cpu binaries (llama-server + CPU backend) into the backend zips..."
|
|
for arch in x64 arm64; do
|
|
cpu_zip="artifact/llama-bin-win-cpu-${arch}.zip"
|
|
temp_dir=$(mktemp -d)
|
|
echo "Extracting windows-cpu-${arch} package..."
|
|
unzip "$cpu_zip" -d "$temp_dir"
|
|
|
|
echo "Merging into $arch zips..."
|
|
for target_zip in artifact/llama-bin-win-*-${arch}.zip; do
|
|
if [[ "$target_zip" == "$cpu_zip" ]]; then
|
|
continue
|
|
fi
|
|
echo "Injecting into $(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 "Moving other artifacts..."
|
|
mv -v artifact/*.zip release
|
|
mv -v artifact/*.tar.gz release
|
|
|
|
- name: Download UI build
|
|
id: download_ui
|
|
uses: actions/download-artifact@v7
|
|
with:
|
|
name: llama-ui.zip
|
|
path: ./ui-dist
|
|
|
|
- name: Package UI
|
|
id: package_ui
|
|
run: |
|
|
tar -czvf release/llama-${{ steps.tag.outputs.name }}-ui.tar.gz --transform "s,^\.,llama-${{ steps.tag.outputs.name }}," -C ./ui-dist .
|
|
|
|
- name: Attest release artifacts
|
|
id: attest
|
|
uses: actions/attest@v4
|
|
with:
|
|
subject-path: 'release/*'
|
|
|
|
- name: Create and push git tag
|
|
run: |
|
|
TAG="${{ steps.tag.outputs.name }}"
|
|
if git rev-parse -q --verify "refs/tags/${TAG}" >/dev/null 2>&1; then
|
|
echo "Tag ${TAG} already exists, skipping creation"
|
|
else
|
|
git tag "${TAG}"
|
|
git push origin "${TAG}"
|
|
fi
|
|
|
|
- name: Create release
|
|
id: create_release
|
|
uses: ggml-org/action-create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ steps.tag.outputs.name }}
|
|
prerelease: true
|
|
body: |
|
|
<details open>
|
|
|
|
${{ github.event.head_commit.message }}
|
|
|
|
</details>
|
|
|
|
**Website:**
|
|
- <https://llama.app>
|
|
|
|
**Attestations:**
|
|
- <${{ steps.attest.outputs.attestation-url }}>
|
|
|
|
**macOS/iOS:**
|
|
- [macOS Apple Silicon (arm64)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-macos-arm64.tar.gz)
|
|
- macOS Apple Silicon (arm64, KleidiAI enabled) [DISABLED](https://github.com/ggml-org/llama.cpp/pull/23780)
|
|
- [macOS Intel (x64)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-macos-x64.tar.gz)
|
|
- [iOS XCFramework](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-xcframework.zip)
|
|
|
|
**Linux:**
|
|
- [Ubuntu x64 (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-x64.tar.gz)
|
|
- [Ubuntu arm64 (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-arm64.tar.gz)
|
|
- [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 (ROCm 7.14)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-rocm-7.14-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)
|
|
- [Ubuntu x64 (SYCL FP16)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-ubuntu-sycl-fp16-x64.tar.gz)
|
|
|
|
**Android:**
|
|
- [Android arm64 (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-android-arm64.tar.gz)
|
|
|
|
**Windows:**
|
|
- [Windows x64 (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-cpu-x64.zip)
|
|
- [Windows arm64 (CPU)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-cpu-arm64.zip)
|
|
- [Windows arm64 (OpenCL Adreno)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-opencl-adreno-arm64.zip)
|
|
- [Windows x64 (CUDA 12)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-cuda-12.4-x64.zip) - [CUDA 12.4 DLLs](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/cudart-llama-bin-win-cuda-12.4-x64.zip)
|
|
- [Windows x64 (CUDA 13)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-cuda-13.3-x64.zip) - [CUDA 13.3 DLLs](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/cudart-llama-bin-win-cuda-13.3-x64.zip)
|
|
- [Windows arm64 (CUDA 13) (preview)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-cuda-13.4-arm64.zip) - [CUDA 13.4 DLLs](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/cudart-llama-bin-win-cuda-13.4-arm64.zip)
|
|
- [Windows x64 (Vulkan)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-vulkan-x64.zip)
|
|
- [Windows x64 (OpenVINO)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-openvino-${{ needs.windows-openvino.outputs.openvino_version }}-x64.zip)
|
|
- [Windows x64 (SYCL)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-sycl-x64.zip)
|
|
- [Windows x64 (ROCm 7.14)](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-bin-win-rocm-7.14-x64.zip)
|
|
|
|
**openEuler:**
|
|
- [DISABLED](https://github.com/ggml-org/llama.cpp/pull/23705)
|
|
- openEuler x86 (310p)
|
|
- openEuler x86 (910b, ACL Graph)
|
|
- openEuler aarch64 (310p)
|
|
- openEuler aarch64 (910b, ACL Graph)
|
|
|
|
**UI:**
|
|
- [UI](https://github.com/ggml-org/llama.cpp/releases/download/${{ steps.tag.outputs.name }}/llama-${{ steps.tag.outputs.name }}-ui.tar.gz)
|
|
|
|
- name: Upload release
|
|
id: upload_release
|
|
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}`)
|
|
});
|
|
}
|
|
}
|
|
|
|
ui-publish:
|
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
|
needs:
|
|
- release
|
|
|
|
uses: ./.github/workflows/ui-publish.yml
|
|
with:
|
|
version_tag: ${{ needs.release.outputs.tag_name }}
|
|
secrets:
|
|
hf_token: ${{ secrets.HF_TOKEN_UI_STATIC_OUTPUT }}
|