184 lines
7.3 KiB
YAML
184 lines
7.3 KiB
YAML
name: Build & Release TurboQuant (Windows x64)
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- feature/turboquant-kv-cache
|
|
paths:
|
|
- '.github/workflows/build-turboquant-windows.yml'
|
|
- '.github/actions/windows-setup-cuda/**'
|
|
- '**/CMakeLists.txt'
|
|
- '**/*.h'
|
|
- '**/*.hpp'
|
|
- '**/*.c'
|
|
- '**/*.cpp'
|
|
- '**/*.cu'
|
|
- '**/*.cuh'
|
|
- '**/*.comp'
|
|
- '**/*.glsl'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
LLAMA_LOG_COLORS: 1
|
|
LLAMA_LOG_PREFIX: 1
|
|
LLAMA_LOG_TIMESTAMPS: 1
|
|
# Keep in sync with the upstream `windows` release job.
|
|
VULKAN_VERSION: 1.4.313.2
|
|
|
|
jobs:
|
|
windows-x64:
|
|
runs-on: windows-2022
|
|
permissions:
|
|
contents: write
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- variant: cpu
|
|
cmake_flags: ''
|
|
- variant: vulkan
|
|
cmake_flags: '-DGGML_VULKAN=ON'
|
|
- variant: cuda-12.4
|
|
cuda: '12.4'
|
|
cmake_flags: '-DGGML_CUDA=ON -DGGML_CUDA_CUB_3DOT2=ON'
|
|
- variant: cuda-13.3
|
|
cuda: '13.3'
|
|
cmake_flags: '-DGGML_CUDA=ON -DGGML_CUDA_CUB_3DOT2=ON'
|
|
|
|
steps:
|
|
- name: Clone
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Set version tag
|
|
id: version
|
|
shell: pwsh
|
|
run: |
|
|
$SHORT_SHA = git rev-parse --short HEAD
|
|
"tag=turboquant-windows-x64-${{ matrix.variant }}-$SHORT_SHA" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
|
|
"short_sha=$SHORT_SHA" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
|
|
|
|
- name: ccache
|
|
uses: ggml-org/ccache-action@v1.2.21
|
|
with:
|
|
key: turboquant-windows-x64-${{ matrix.variant }}
|
|
evict-old-files: 1d
|
|
|
|
- name: Install CUDA Toolkit
|
|
if: ${{ startsWith(matrix.variant, 'cuda') }}
|
|
uses: ./.github/actions/windows-setup-cuda
|
|
with:
|
|
cuda_version: ${{ matrix.cuda }}
|
|
|
|
- name: Install Vulkan SDK
|
|
if: ${{ matrix.variant == 'vulkan' }}
|
|
shell: pwsh
|
|
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
|
|
run: choco install ninja -y
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
shell: cmd
|
|
# NOTE: GGML_CUDA_CUB_3DOT2 can be dropped once CCCL 3.2 ships in the CTK used here.
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
|
|
cmake -S . -B build -G "Ninja Multi-Config" ^
|
|
-DGGML_NATIVE=OFF ^
|
|
-DGGML_BACKEND_DL=ON ^
|
|
-DGGML_CPU_ALL_VARIANTS=ON ^
|
|
-DGGML_RPC=OFF ^
|
|
-DLLAMA_CURL=OFF ^
|
|
-DLLAMA_OPENSSL=OFF ^
|
|
-DLLAMA_BUILD_SERVER=ON ^
|
|
-DLLAMA_BUILD_TOOLS=ON ^
|
|
-DLLAMA_BUILD_TESTS=OFF ^
|
|
-DLLAMA_BUILD_EXAMPLES=OFF ^
|
|
${{ matrix.cmake_flags }}
|
|
set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1
|
|
cmake --build build --config Release -j %NINJA_JOBS% -t ggml
|
|
cmake --build build --config Release -j %NINJA_JOBS%
|
|
|
|
- name: Verify turbo3 support
|
|
shell: pwsh
|
|
run: |
|
|
.\build\bin\Release\llama-server.exe --version 2>&1 | Write-Output
|
|
Write-Output "---"
|
|
.\build\bin\Release\llama-server.exe --help 2>&1 | Select-String -Pattern "cache-type-k" -Context 0,2
|
|
Write-Output "=== build\bin\Release contents ==="
|
|
Get-ChildItem .\build\bin\Release | Select-Object Name, Length | Format-Table -AutoSize
|
|
|
|
- name: Bundle CUDA runtime DLLs
|
|
if: ${{ startsWith(matrix.variant, 'cuda') }}
|
|
shell: pwsh
|
|
run: |
|
|
$dst = ".\build\bin\Release"
|
|
Get-ChildItem "$env:CUDA_PATH\bin" -Filter *.dll |
|
|
Where-Object { $_.Name -match '^(cudart64|cublas64|cublasLt64)_.*\.dll$' } |
|
|
ForEach-Object {
|
|
Write-Output "Bundling $($_.Name)"
|
|
Copy-Item $_.FullName -Destination $dst -Force
|
|
}
|
|
|
|
- name: Prepare release archive
|
|
shell: pwsh
|
|
run: |
|
|
New-Item -ItemType Directory -Force -Path release\build\bin | Out-Null
|
|
Copy-Item .\build\bin\Release\* release\build\bin\ -Recurse -Force
|
|
Copy-Item .\LICENSE release\build\bin\ -ErrorAction SilentlyContinue
|
|
Compress-Archive -Path release\build -DestinationPath llama-turboquant-windows-x64-${{ matrix.variant }}.zip -Force
|
|
Get-Item llama-turboquant-windows-x64-${{ matrix.variant }}.zip | Select-Object Name, Length | Format-Table -AutoSize
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: llama-turboquant-windows-x64-${{ matrix.variant }}
|
|
path: release/
|
|
retention-days: 30
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ steps.version.outputs.tag }}
|
|
target_commitish: ${{ github.sha }}
|
|
name: "TurboQuant Windows x64 ${{ matrix.variant }} (${{ steps.version.outputs.short_sha }})"
|
|
body: |
|
|
## TurboQuant KV Cache — Windows x64 (${{ matrix.variant }})
|
|
|
|
Built from `feature/turboquant-kv-cache` branch at commit `${{ steps.version.outputs.short_sha }}`.
|
|
|
|
### What's included
|
|
- `llama-server.exe` with `--cache-type-k turbo3` / `turbo4` support
|
|
- `llama-cli`, `llama-bench`, `llama-perplexity`
|
|
- Dynamically-loaded GGML backends (`GGML_BACKEND_DL`): portable CPU (`GGML_CPU_ALL_VARIANTS`)${{ matrix.variant == 'vulkan' && ' + Vulkan (`ggml-vulkan.dll`)' || '' }}${{ startsWith(matrix.variant, 'cuda') && format(' + CUDA {0} (`ggml-cuda.dll` + bundled `cudart64`/`cublas64`/`cublasLt64` DLLs)', matrix.cuda) || '' }}
|
|
|
|
### Requirements
|
|
${{ matrix.variant == 'cpu' && 'CPU-only — no GPU driver needed.' || '' }}${{ matrix.variant == 'vulkan' && 'A working Vulkan 1.2+ driver (NVIDIA / AMD / Intel).' || '' }}${{ startsWith(matrix.variant, 'cuda') && format('An NVIDIA driver supporting CUDA {0}. The CUDA runtime DLLs are bundled — no system CUDA Toolkit install required.', matrix.cuda) || '' }}
|
|
|
|
> GitHub Windows runners have no GPU, so CI only verifies the build + `llama-server.exe --version/--help`. Real GPU `turbo3` validation is a manual step on Windows hardware.
|
|
|
|
### Usage
|
|
```bat
|
|
tar -xf llama-turboquant-windows-x64-${{ matrix.variant }}.zip
|
|
.\build\bin\llama-server.exe -m model.gguf --cache-type-k turbo3 --cache-type-v turbo3
|
|
```
|
|
|
|
### For Atomic Chat integration
|
|
Replace the binary at:
|
|
```
|
|
%LOCALAPPDATA%\Atomic Chat\data\llamacpp\backends\<version>\win-x64\build\bin\llama-server.exe
|
|
```
|
|
files: |
|
|
llama-turboquant-windows-x64-${{ matrix.variant }}.zip
|
|
draft: false
|
|
prerelease: true
|