mirror of
https://github.com/Heretek-AI/CachyLLama-BUILDER.git
synced 2026-10-12 02:02:33 +00:00
342 lines
12 KiB
YAML
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"
|
|
|