Files
CachyLLama-BUILDER/.github/workflows/build-cachyllama-all.yml
T

342 lines
12 KiB
YAML

name: Build CachyLLama Multi-Backend Release
on:
schedule:
- cron: '0 2 * * *' # Nightly at 2:00 AM UTC
workflow_dispatch:
inputs:
cachyllama_version:
description: 'CachyLLama branch or tag to build'
required: false
default: 'master'
create_release:
description: 'Create a GitHub release'
required: false
default: true
type: boolean
pull_request:
paths:
- '.github/workflows/build-cachyllama-all.yml'
- 'scripts/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
cancel-in-progress: true
env:
CACHYLLAMA_VERSION: ${{ github.event.inputs.cachyllama_version || 'master' }}
CACHYLLAMA_REPO: 'https://github.com/fewtarius/CachyLLama.git'
CMAKE_ARGS: "-DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=ON -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON"
jobs:
ubuntu-vulkan:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake ninja-build libvulkan-dev vulkan-tools glslang-tools glslc build-essential
- name: Clone CachyLLama
run: |
git clone --depth 1 --branch "${{ env.CACHYLLAMA_VERSION }}" "${{ env.CACHYLLAMA_REPO }}" CachyLLama
- name: Build with Vulkan backend
run: |
cd CachyLLama
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_VULKAN=ON \
-DGGML_CPU=ON \
-DGGML_NATIVE=OFF \
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
${{ env.CMAKE_ARGS }}
cmake --build build --config Release -j $(nproc)
- name: Verify Vulkan Binaries
run: |
cd CachyLLama/build/bin
export LD_LIBRARY_PATH="$(pwd):${LD_LIBRARY_PATH:-}"
./llama-cli --help | head -n 10
./llama-server --help | head -n 10
echo "Vulkan binary verification successful!"
- name: Pack artifacts
run: |
cp CachyLLama/LICENSE CachyLLama/build/bin/
tar -czvf cachy-llama-bin-ubuntu-vulkan-x64.tar.gz -C CachyLLama/build/bin .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cachy-llama-bin-ubuntu-vulkan-x64.tar.gz
path: cachy-llama-bin-ubuntu-vulkan-x64.tar.gz
ubuntu-cpu:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- build: 'x64'
os: ubuntu-22.04
- build: 'arm64'
os: ubuntu-24.04-arm
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake ninja-build build-essential
- name: Clone CachyLLama
run: |
git clone --depth 1 --branch "${{ env.CACHYLLAMA_VERSION }}" "${{ env.CACHYLLAMA_REPO }}" CachyLLama
- name: Build CPU backend
run: |
cd CachyLLama
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_CPU_ALL_VARIANTS=ON \
-DGGML_NATIVE=OFF \
-DGGML_OPENMP=ON \
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
${{ env.CMAKE_ARGS }}
cmake --build build --config Release -j $(nproc)
- name: Pack artifacts
run: |
cp CachyLLama/LICENSE CachyLLama/build/bin/
tar -czvf cachy-llama-bin-ubuntu-cpu-${{ matrix.build }}.tar.gz -C CachyLLama/build/bin .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cachy-llama-bin-ubuntu-cpu-${{ matrix.build }}.tar.gz
path: cachy-llama-bin-ubuntu-cpu-${{ matrix.build }}.tar.gz
ubuntu-cuda:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
sm: ${{ github.event_name == 'pull_request' && fromJSON('["89"]') || fromJSON('["75", "80", "86", "89", "90", "100", "120", "121"]') }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Free disk space
run: |
sudo apt-get remove -y '^aspnetcore-.*' '^dotnet-.*' '^llvm-.*' 'php.*' 'ruby.*' \
google-cloud-cli azure-cli google-chrome-stable firefox powershell 2>/dev/null || true
sudo apt-get autoremove -y
df -h
- name: Install CUDA Toolkit
run: |
wget -q https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get install -y \
cuda-nvcc-12-8 \
cuda-cudart-dev-12-8 \
cuda-cccl-12-8 \
libcublas-dev-12-8 \
libcurand-dev-12-8 \
libnvjitlink-dev-12-8 \
cmake ninja-build
- name: Clone CachyLLama
run: |
git clone --depth 1 --branch "${{ env.CACHYLLAMA_VERSION }}" "${{ env.CACHYLLAMA_REPO }}" CachyLLama
- name: Build CUDA backend
run: |
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH:-}"
cd CachyLLama
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_CUDA=ON \
-DCMAKE_CUDA_ARCHITECTURES="${{ matrix.sm }}" \
-DGGML_NATIVE=OFF \
-DCMAKE_INSTALL_RPATH='$ORIGIN' \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
${{ env.CMAKE_ARGS }}
cmake --build build --config Release -j $(nproc)
- name: Verify CUDA Binaries
run: |
cd CachyLLama/build/bin
export LD_LIBRARY_PATH="$(pwd):/usr/local/cuda/lib64:${LD_LIBRARY_PATH:-}"
./llama-cli --help | head -n 10
./llama-server --help | head -n 10
echo "CUDA binary verification successful!"
- name: Pack artifacts
run: |
cp CachyLLama/LICENSE CachyLLama/build/bin/
tar -czvf cachy-llama-bin-ubuntu-cuda-sm_${{ matrix.sm }}-x64.tar.gz -C CachyLLama/build/bin .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cachy-llama-bin-ubuntu-cuda-sm_${{ matrix.sm }}-x64.tar.gz
path: cachy-llama-bin-ubuntu-cuda-sm_${{ matrix.sm }}-x64.tar.gz
windows-cpu:
runs-on: windows-2022
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Clone CachyLLama
shell: powershell
run: |
git clone --depth 1 --branch "${{ env.CACHYLLAMA_VERSION }}" "${{ env.CACHYLLAMA_REPO }}" CachyLLama
- name: Patch CachyLLama for Windows Compatibility
shell: powershell
run: |
python scripts/patch_windows_compat.py CachyLLama
- name: Build Windows CPU
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cd CachyLLama
cmake -B build -A x64 -DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=OFF ${{ env.CMAKE_ARGS }}
cmake --build build --config Release -j %NUMBER_OF_PROCESSORS%
- name: Verify Windows CPU Binaries
shell: powershell
run: |
$binDir = "CachyLLama\build\bin\Release"
$llamaCli = Join-Path $binDir "llama-cli.exe"
if (-not (Test-Path $llamaCli)) {
Write-Error "llama-cli.exe missing!"
exit 1
}
& $llamaCli --help | Select-Object -First 10
Write-Host "Windows CPU binary verification successful!"
- name: Pack artifacts
shell: powershell
run: |
Copy-Item CachyLLama\LICENSE CachyLLama\build\bin\Release\
Compress-Archive -Path CachyLLama\build\bin\Release\* -DestinationPath cachy-llama-bin-windows-cpu-x64.zip
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cachy-llama-bin-windows-cpu-x64.zip
path: cachy-llama-bin-windows-cpu-x64.zip
macos-metal:
runs-on: macos-14
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Clone CachyLLama
run: |
git clone --depth 1 --branch "${{ env.CACHYLLAMA_VERSION }}" "${{ env.CACHYLLAMA_REPO }}" CachyLLama
- name: Build macOS Metal
run: |
cd CachyLLama
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_METAL=ON \
-DGGML_METAL_EMBED_LIBRARY=ON \
-DCMAKE_OSX_DEPLOYMENT_TARGET=13.3 \
-DCMAKE_INSTALL_RPATH='@loader_path' \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
${{ env.CMAKE_ARGS }}
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu)
- name: Verify macOS Metal Binaries
run: |
cd CachyLLama/build/bin
./llama-cli --help | head -n 10
./llama-server --help | head -n 10
echo "macOS Metal binary verification successful!"
- name: Pack artifacts
run: |
cp CachyLLama/LICENSE CachyLLama/build/bin/
tar -czvf cachy-llama-bin-macos-metal-arm64.tar.gz -C CachyLLama/build/bin .
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cachy-llama-bin-macos-metal-arm64.tar.gz
path: cachy-llama-bin-macos-metal-arm64.tar.gz
release:
needs: [ubuntu-vulkan, ubuntu-cpu, ubuntu-cuda, windows-cpu, macos-metal]
runs-on: ubuntu-22.04
permissions:
contents: write
if: |
always() &&
github.event_name != 'pull_request' &&
(github.event_name == 'schedule' || github.event.inputs.create_release == 'true' || github.event.inputs.create_release == null)
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: ./multi-artifacts
- name: Determine tag name
id: tag
uses: ./.github/actions/get-tag-name
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
prefix: 'b'
- name: Prepare release files
run: |
mkdir -p ./release-files
find ./multi-artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" \) -exec cp {} ./release-files/ \;
ls -la ./release-files/
- name: Publish GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${{ steps.tag.outputs.tag }}"
gh release create "$TAG" \
--title "CachyLLama $TAG (Multi-Backend)" \
--notes "### CachyLLama Multi-Backend Release $TAG
- **Vulkan RADV**: Linux AMD APU / dGPU acceleration
- **CPU**: Linux & Windows x64 / ARM64
- **CUDA**: NVIDIA GPU support (sm_75 to sm_121)
- **Metal**: Apple Silicon macOS acceleration" \
./release-files/*
- name: Trigger Homebrew Tap Formula Update
if: success()
env:
GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
run: |
TAG="${{ steps.tag.outputs.tag }}"
echo "Notifying Homebrew Tap of new release: $TAG"
gh api -X POST "/repos/Heretek-AI/homebrew-tap/dispatches" \
-f event_type="builder-release" \
-f client_payload[builder]="cachyllama" \
-f client_payload[release_tag]="$TAG" || echo "Note: Tap dispatch triggered or skipped if repo permissions are local"