This commit is contained in:
Jianlin Shi 2026-03-16 02:08:34 +08:00 committed by GitHub
commit 5fed1f1db0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 378 additions and 0 deletions

View File

@ -0,0 +1,161 @@
name: build-linux-cuda
on:
workflow_dispatch: # allows manual triggering
inputs:
create_release:
description: 'Create new release'
required: true
type: boolean
tag_name:
description: 'Tag name for the release (required for manual trigger)'
required: true
type: string
gpu_arch:
description: 'nvidia gpu arch numbers (semicolon-separated, e.g. 70;75;80;86)'
required: false
type: string
default: '70;75;80;86;89'
release:
types: [published]
permissions:
contents: write
jobs:
build-linux-cuda:
runs-on: ubuntu-latest
container:
image: nvidia/cuda:12.8.0-devel-rockylinux8
env:
BUILD_TYPE: Release
ARCHIVE_BASENAME: llama-bin-linux-cuda-12.8-rockylinux8
TAG_NAME: ${{ github.event.release.tag_name || github.event.inputs.tag_name }}
steps:
- name: Install build dependencies
shell: bash
run: |
set -euxo pipefail
# dnf -y update
dnf -y install epel-release
dnf config-manager --set-enabled powertools
dnf -y install \
git \
cmake \
gcc-toolset-12 \
make \
ninja-build \
tar \
gzip \
zip \
findutils \
file \
which
dnf clean all
- name: Checkout source
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Create tag if it does not exist
shell: bash
run: |
set -euxo pipefail
git config --global --add safe.directory "${GITHUB_WORKSPACE:-/__w/llama.cpp/llama.cpp}"
if git rev-parse "refs/tags/${TAG_NAME}" >/dev/null 2>&1; then
echo "Tag ${TAG_NAME} already exists, checking out."
git checkout "${TAG_NAME}"
else
echo "Tag ${TAG_NAME} does not exist, creating it on HEAD."
git tag "${TAG_NAME}"
git push origin "refs/tags/${TAG_NAME}"
fi
- name: Show build environment
shell: bash
run: |
set -euxo pipefail
set +u; source scl_source enable gcc-toolset-12; set -u
cat /etc/os-release || true
uname -a
gcc --version
g++ --version
cmake --version
nvcc --version
- name: Configure
shell: bash
run: |
set -euxo pipefail
set +u; source scl_source enable gcc-toolset-12; set -u
cmake -S . -B build \
-G Ninja \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DGGML_CUDA=ON \
-DCMAKE_CUDA_COMPILER=$(command -v nvcc) \
-DCMAKE_CUDA_ARCHITECTURES="${{ github.event.inputs.gpu_arch }}" \
-DCMAKE_EXE_LINKER_FLAGS=-Wl,--allow-shlib-undefined
- name: Build
shell: bash
run: |
set -euxo pipefail
set +u; source scl_source enable gcc-toolset-12; set -u
cmake --build build --config ${BUILD_TYPE} -j"$(nproc)"
- name: Prepare release payload
shell: bash
run: |
set -euxo pipefail
TAG="${TAG_NAME}"
OUTDIR="${ARCHIVE_BASENAME}-${TAG}"
mkdir -p "${OUTDIR}/bin" "${OUTDIR}/lib" "${OUTDIR}/meta"
if [[ -d build/bin ]]; then
find build/bin -maxdepth 1 -type f \( -name 'llama-*' -o -name 'ggml-*' \) -exec cp -av {} "${OUTDIR}/bin/" \;
fi
# Keep both files and symlinks so SONAME links (for example libmtmd.so.0) survive packaging.
find build -maxdepth 3 \( -type f -o -type l \) \( -name 'libllama*' -o -name 'libggml*' -o -name 'libmtmd*' \) -exec cp -av {} "${OUTDIR}/lib/" \; || true
# Fail fast if required runtime library links are missing from the payload.
test -e "${OUTDIR}/lib/libmtmd.so.0"
test -e "${OUTDIR}/lib/libllama.so.0"
git config --global --add safe.directory "${GITHUB_WORKSPACE:-/__w/llama.cpp/llama.cpp}"
git rev-parse HEAD > "${OUTDIR}/meta/git-commit.txt"
git describe --tags --always > "${OUTDIR}/meta/git-describe.txt" || true
cat /etc/os-release > "${OUTDIR}/meta/os-release.txt" || true
gcc --version > "${OUTDIR}/meta/gcc-version.txt"
g++ --version > "${OUTDIR}/meta/gxx-version.txt"
cmake --version > "${OUTDIR}/meta/cmake-version.txt"
nvcc --version > "${OUTDIR}/meta/nvcc-version.txt"
if compgen -G "${OUTDIR}/bin/*" > /dev/null; then
file "${OUTDIR}"/bin/* > "${OUTDIR}/meta/file-bin.txt" || true
ldd "${OUTDIR}"/bin/* > "${OUTDIR}/meta/ldd-bin.txt" || true
fi
if compgen -G "${OUTDIR}/lib/*" > /dev/null; then
file "${OUTDIR}"/lib/* > "${OUTDIR}/meta/file-lib.txt" || true
ldd "${OUTDIR}"/lib/* > "${OUTDIR}/meta/ldd-lib.txt" || true
fi
tar -czf "${OUTDIR}.tar.gz" "${OUTDIR}"
sha256sum "${OUTDIR}.tar.gz" > "${OUTDIR}.tar.gz.sha256"
- name: Upload release assets
if: github.event_name == 'release' || github.event.inputs.create_release == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.TAG_NAME }}
files: |
./${{ env.ARCHIVE_BASENAME }}-${{ env.TAG_NAME }}.tar.gz
./${{ env.ARCHIVE_BASENAME }}-${{ env.TAG_NAME }}.tar.gz.sha256

View File

@ -0,0 +1,177 @@
name: custom_build_wincuda
on:
workflow_dispatch: # allows manual triggering
inputs:
create_release:
description: 'Create new release'
required: true
type: boolean
cuda:
description: 'cuda version used to build. For available versions, check https://github.com/Jimver/cuda-toolkit/blob/master/src/links/windows-links.ts'
required: false
type: string
default: '12.6.2'
gpu_arch:
description: 'nvidia gpu arch numbers'
required: false
type: string
default: '70;75;80;86'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: write
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
GGML_NLOOP: 3
GGML_N_THREADS: 1
LLAMA_LOG_COLORS: 1
LLAMA_LOG_PREFIX: 1
LLAMA_LOG_TIMESTAMPS: 1
jobs:
windows-latest-cmake-cuda:
runs-on: windows-latest
steps:
- name: Clone
id: checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get Python
uses: actions/setup-python@v2
with:
python-version: 3.8.10
- name: Install python dependencies
run: |
python -m pip install --upgrade pip
pip install customtkinter==5.2.0 pyinstaller==5.11.0 psutil==5.9.5
- name: Download and install win64devkit
run: |
curl -L https://github.com/skeeto/w64devkit/releases/download/v1.22.0/w64devkit-1.22.0.zip --output w64devkit.zip
Expand-Archive w64devkit.zip -DestinationPath .
- name: Add w64devkit to PATH
run: |
echo "$(Get-Location)\w64devkit\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8
- name: Print System Environment Variables
id: printvars
run: |
echo "Number of processors: ${env:NUMBER_OF_PROCESSORS}"
echo "Processor Architecture: ${env:PROCESSOR_ARCHITECTURE}"
echo "Computer Name: ${env:COMPUTERNAME}"
wmic cpu get name
wmic os get TotalVisibleMemorySize, FreePhysicalMemory
- uses: Jimver/cuda-toolkit@v0.2.19
id: cuda-toolkit
with:
cuda: ${{ github.event.inputs.cuda }}
- name: Install ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ github.job }}-cuda${{ github.event.inputs.cuda }}
- name: Build
id: cmake_build
run: |
mkdir build
cd build
cmake .. -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="${{ github.event.inputs.gpu_arch }}" -DCMAKE_SYSTEM_VERSION="10.0.19041.0"
cmake --build . --config Release -j 2
- name: Determine tag name
id: tag
shell: bash
run: |
BUILD_NUMBER="$(git rev-list --count HEAD)"
SHORT_HASH="$(git rev-parse --short=7 HEAD)"
if [[ "${{ env.BRANCH_NAME }}" == "master" ]]; then
echo "name=b${BUILD_NUMBER}-${{ github.event.inputs.cuda }}" >> $GITHUB_OUTPUT
else
SAFE_NAME=$(echo "${{ env.BRANCH_NAME }}" | tr '/' '-')
echo "name=WinFull-${SAFE_NAME}-b${BUILD_NUMBER}-${SHORT_HASH}-${{ github.event.inputs.cuda }}" >> $GITHUB_OUTPUT
fi
- name: Pack artifacts
id: pack_artifacts
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
run: |
7z a llama-${{ steps.tag.outputs.name }}-bin-win-cu${{ github.event.inputs.cuda }}-x64.zip .\build\bin\Release\*
- name: Upload artifacts
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
uses: actions/upload-artifact@v4
with:
path: llama-${{ steps.tag.outputs.name }}-bin-win-cu${{ github.event.inputs.cuda }}-x64.zip
name: llama-bin-win-cu${{ github.event.inputs.cuda }}-x64.zip
- name: Copy and pack Cuda runtime
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
7z a cudart-llama-bin-win-cu${{ github.event.inputs.cuda }}-x64.zip $dst\*
- name: Upload Cuda runtime
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
uses: actions/upload-artifact@v4
with:
path: cudart-llama-bin-win-cu${{ github.event.inputs.cuda }}-x64.zip
name: cudart-llama-bin-win-cu${{ github.event.inputs.cuda }}-x64.zip
- name: Download artifacts
id: download-artifact
uses: actions/download-artifact@v4
with:
path: ./artifact
- name: Move artifacts
id: move_artifacts
run: mkdir -p ./artifact/release && mv ./artifact/*/*.zip ./artifact/release
- name: Create release
id: create_release
if: ${{ github.event.inputs.create_release == 'true' }}
uses: anzz1/action-create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.tag.outputs.name }}
- name: Upload release
id: upload_release
if: ${{ github.event.inputs.create_release == 'true' }}
uses: actions/github-script@v3
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('./artifact/release')) {
if (path.extname(file) === '.zip') {
console.log('uploadReleaseAsset', file);
await github.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release_id,
name: file,
data: await fs.readFileSync(`./artifact/release/${file}`)
});
}
}

40
.github/workflows/syn_upstream.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: Sync Upstream
on:
schedule:
- cron: '0 0 * * 0' # Every Sunday at midnight
jobs:
merge:
runs-on: ubuntu-latest
steps:
- name: Checkout master branch
uses: actions/checkout@v2
with:
ref: master
- name: Merge upstream master
id: merge
run: |
git remote add upstream https://github.com/ggml-org/repository.git
git fetch upstream
if git merge upstream/master; then
echo "merge_success=true" >> $GITHUB_OUTPUT
else
echo "merge_success=false" >> $GITHUB_OUTPUT
echo "Automatic merge failed. Skipping push."
exit 0
fi
- name: Push changes
if: steps.merge.outputs.merge_success == 'true'
run: |
# Check if there are any changes
if git diff --quiet HEAD@{1} HEAD; then
echo "No changes to push"
else
echo "Changes detected, pushing updates..."
git push origin master
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}