136 lines
5.0 KiB
YAML
136 lines
5.0 KiB
YAML
name: Build llama.cpp runtime binaries
|
|
|
|
# Cross-platform prebuilt binaries for the FunASR llama.cpp / GGUF runtime,
|
|
# like whisper.cpp's whisper-bin-*. Push a `runtime-llamacpp-v*` tag to publish
|
|
# a GitHub Release with the binaries; or run manually (workflow_dispatch) to test
|
|
# the build without creating a release.
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
tags:
|
|
- 'runtime-llamacpp-v*'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
name: build-${{ matrix.name }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
name: linux-x64
|
|
cmake_flags: >-
|
|
-DGGML_NATIVE=OFF
|
|
-DGGML_AVX=OFF
|
|
-DGGML_AVX2=OFF
|
|
-DGGML_AVX_VNNI=OFF
|
|
-DGGML_AVX512=OFF
|
|
-DGGML_AVX512_VBMI=OFF
|
|
-DGGML_AVX512_VNNI=OFF
|
|
-DGGML_AVX512_BF16=OFF
|
|
-DGGML_FMA=OFF
|
|
-DGGML_F16C=OFF
|
|
-DGGML_BMI2=OFF
|
|
- os: ubuntu-latest
|
|
name: linux-x64-avx2
|
|
cmake_flags: >-
|
|
-DGGML_NATIVE=OFF
|
|
-DGGML_AVX=ON
|
|
-DGGML_AVX2=ON
|
|
-DGGML_AVX_VNNI=OFF
|
|
-DGGML_AVX512=OFF
|
|
-DGGML_AVX512_VBMI=OFF
|
|
-DGGML_AVX512_VNNI=OFF
|
|
-DGGML_AVX512_BF16=OFF
|
|
-DGGML_FMA=ON
|
|
-DGGML_F16C=ON
|
|
-DGGML_BMI2=ON
|
|
- os: ubuntu-24.04-arm
|
|
name: linux-arm64
|
|
cmake_flags: -DGGML_NATIVE=OFF
|
|
- os: macos-latest
|
|
name: macos-arm64
|
|
cmake_flags: -DGGML_NATIVE=OFF
|
|
- os: windows-latest
|
|
name: windows-x64
|
|
cmake_flags: >-
|
|
-DGGML_NATIVE=OFF
|
|
-DGGML_AVX=OFF
|
|
-DGGML_AVX2=OFF
|
|
-DGGML_AVX_VNNI=OFF
|
|
-DGGML_AVX512=OFF
|
|
-DGGML_AVX512_VBMI=OFF
|
|
-DGGML_AVX512_VNNI=OFF
|
|
-DGGML_AVX512_BF16=OFF
|
|
-DGGML_FMA=OFF
|
|
-DGGML_F16C=OFF
|
|
-DGGML_BMI2=OFF
|
|
- os: windows-latest
|
|
name: windows-x64-avx2
|
|
cmake_flags: >-
|
|
-DGGML_NATIVE=OFF
|
|
-DGGML_AVX=ON
|
|
-DGGML_AVX2=ON
|
|
-DGGML_AVX_VNNI=OFF
|
|
-DGGML_AVX512=OFF
|
|
-DGGML_AVX512_VBMI=OFF
|
|
-DGGML_AVX512_VNNI=OFF
|
|
-DGGML_AVX512_BF16=OFF
|
|
-DGGML_FMA=ON
|
|
-DGGML_F16C=ON
|
|
-DGGML_BMI2=ON
|
|
runs-on: ${{ matrix.os }}
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
working-directory: runtime/llama.cpp
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Configure and build
|
|
run: |
|
|
# Release binaries must be portable across user machines, not tuned to
|
|
# the ephemeral CI runner CPU. A native ggml build may emit AVX512 or
|
|
# AVX-VNNI instructions and then crash with SIGILL on ordinary CPUs.
|
|
# Keep the default x64 package conservative, and publish explicit
|
|
# x64-avx2 assets for machines that support AVX2/FMA/F16C/BMI2.
|
|
cmake -B build -DCMAKE_BUILD_TYPE=Release ${{ matrix.cmake_flags }}
|
|
cmake --build build --config Release -j 2
|
|
- name: Package
|
|
run: |
|
|
mkdir -p pkg
|
|
cp build/bin/llama-funasr-* pkg/ 2>/dev/null || true
|
|
cp build/bin/Release/llama-funasr-* pkg/ 2>/dev/null || true
|
|
cp README.md download-funasr-model.sh pkg/ 2>/dev/null || true
|
|
echo "--- packaged binaries ---"; ls -la pkg
|
|
if [ "${{ runner.os }}" = "Windows" ]; then
|
|
7z a "funasr-llamacpp-${{ matrix.name }}.zip" ./pkg/*
|
|
else
|
|
tar czf "funasr-llamacpp-${{ matrix.name }}.tar.gz" -C pkg .
|
|
fi
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: funasr-llamacpp-${{ matrix.name }}
|
|
path: runtime/llama.cpp/funasr-llamacpp-${{ matrix.name }}.*
|
|
if-no-files-found: error
|
|
|
|
release:
|
|
needs: build
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
path: dist
|
|
merge-multiple: true
|
|
- name: Create GitHub Release
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
gh release create "${{ github.ref_name }}" dist/* \
|
|
--repo "${{ github.repository }}" \
|
|
--title "FunASR llama.cpp runtime ${{ github.ref_name }}" \
|
|
--notes "Prebuilt self-contained binaries for the FunASR llama.cpp / GGUF runtime — SenseVoice, Paraformer and Fun-ASR-Nano with built-in FSMN-VAD (a whisper.cpp-style on-device ASR, strong on Chinese). Get a model with \`bash download-funasr-model.sh <sensevoice|paraformer|nano>\`, then run \`llama-funasr-cli\` / \`llama-funasr-sensevoice\` / \`llama-funasr-paraformer\`. Use the default x64 asset for maximum CPU compatibility; use the x64-avx2 asset on CPUs with AVX2/FMA/F16C/BMI2 for higher throughput. No Python, no build. Docs: runtime/llama.cpp/README.md"
|