mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-26 22:30:32 +01:00
6a9661ea5a
[Accelerate](https://developer.apple.com/documentation/accelerate) is an Apple framework which can only be used on macOS, and the CMake build [ignores](https://github.com/ggerganov/llama.cpp/blob/master/CMakeLists.txt#L102) the `LLAMA_ACCELERATE` variable when run on non-Apple platforms. This implies setting `LLAMA_ACCELERATE` is a no-op on Ubuntu and can be removed. This will reduce visual noise in CI check results (in addition to reducing the number of checks we have to run for every PR). Right now every sanitized build is duplicated twice for no good reason (e.g., we have `CI / ubuntu-latest-cmake-sanitizer (ADDRESS, Debug, ON)` and `CI / ubuntu-latest-cmake-sanitizer (ADDRESS, Debug, OFF)`).
468 lines
12 KiB
YAML
468 lines
12 KiB
YAML
name: CI
|
|
|
|
on:
|
|
workflow_dispatch: # allows manual triggering
|
|
inputs:
|
|
create_release:
|
|
description: 'Create new release'
|
|
required: true
|
|
type: boolean
|
|
push:
|
|
branches:
|
|
- master
|
|
paths: ['.github/workflows/**', '**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.c', '**/*.cpp']
|
|
pull_request:
|
|
types: [opened, synchronize, edited, reopened, review_requested, ready_for_review]
|
|
paths: ['**/CMakeLists.txt', '**/Makefile', '**/*.h', '**/*.c', '**/*.cpp']
|
|
|
|
env:
|
|
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
|
|
|
|
jobs:
|
|
ubuntu-latest-make:
|
|
if: github.event.pull_request.draft == false
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential
|
|
|
|
- name: Build
|
|
id: make_build
|
|
run: |
|
|
make
|
|
|
|
ubuntu-latest-cmake:
|
|
if: github.event.pull_request.draft == false
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake ..
|
|
cmake --build . --config Release
|
|
|
|
- name: Test
|
|
id: cmake_test
|
|
run: |
|
|
cd build
|
|
ctest --verbose
|
|
|
|
ubuntu-latest-cmake-sanitizer:
|
|
if: github.event.pull_request.draft == false
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
continue-on-error: true
|
|
|
|
strategy:
|
|
matrix:
|
|
sanitizer: [ADDRESS, THREAD, UNDEFINED]
|
|
build_type: [Debug, Release]
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake .. -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
|
|
cmake --build . --config ${{ matrix.build_type }}
|
|
|
|
- name: Test
|
|
id: cmake_test
|
|
run: |
|
|
cd build
|
|
ctest --verbose
|
|
|
|
macOS-latest-make:
|
|
if: github.event.pull_request.draft == false
|
|
|
|
runs-on: macos-latest
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
brew update
|
|
|
|
- name: Build
|
|
id: make_build
|
|
run: |
|
|
make
|
|
|
|
macOS-latest-cmake:
|
|
if: github.event.pull_request.draft == false
|
|
|
|
runs-on: macOS-latest
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Dependencies
|
|
id: depends
|
|
run: |
|
|
brew update
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake -DLLAMA_AVX2=OFF ..
|
|
cmake --build . --config Release
|
|
|
|
- name: Test
|
|
id: cmake_test
|
|
run: |
|
|
cd build
|
|
ctest --verbose
|
|
|
|
windows-latest-cmake:
|
|
if: github.event.pull_request.draft == false
|
|
|
|
runs-on: windows-latest
|
|
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- build: 'avx2'
|
|
defines: ''
|
|
- build: 'avx'
|
|
defines: '-DLLAMA_AVX2=OFF'
|
|
- build: 'avx512'
|
|
defines: '-DLLAMA_AVX512=ON'
|
|
|
|
steps:
|
|
- name: Clone
|
|
id: checkout
|
|
uses: actions/checkout@v1
|
|
|
|
- name: Build
|
|
id: cmake_build
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake .. ${{ matrix.defines }}
|
|
cmake --build . --config Release
|
|
|
|
- name: Check AVX512F support
|
|
id: check_avx512f
|
|
if: ${{ matrix.build == 'avx512' }}
|
|
continue-on-error: true
|
|
run: |
|
|
cd build
|
|
$vcdir = $(vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath)
|
|
$msvc = $(join-path $vcdir $('VC\Tools\MSVC\'+$(gc -raw $(join-path $vcdir 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt')).Trim()))
|
|
$cl = $(join-path $msvc 'bin\Hostx64\x64\cl.exe')
|
|
echo 'int main(void){unsigned int a[4];__cpuid(a,7);return !(a[1]&65536);}' >> avx512f.c
|
|
& $cl /O2 /GS- /kernel avx512f.c /link /nodefaultlib /entry:main
|
|
.\avx512f.exe && echo "AVX512F: YES" && ( echo HAS_AVX512F=1 >> $env:GITHUB_ENV ) || echo "AVX512F: NO"
|
|
|
|
- name: Test
|
|
id: cmake_test
|
|
if: ${{ matrix.build != 'avx512' || env.HAS_AVX512F == '1' }} # Test AVX-512 only when possible
|
|
run: |
|
|
cd build
|
|
ctest -C Release --verbose
|
|
|
|
- name: Get commit hash
|
|
id: commit
|
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
uses: pr-mpt/actions-commit-hash@v2
|
|
|
|
- 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-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-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@v3
|
|
with:
|
|
path: |
|
|
llama-${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}-bin-win-${{ matrix.build }}-x64.zip
|
|
|
|
release:
|
|
if: ${{ ( github.event_name == 'push' && github.ref == 'refs/heads/master' ) || github.event.inputs.create_release == 'true' }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs:
|
|
- ubuntu-latest-make
|
|
- ubuntu-latest-cmake
|
|
- macOS-latest-make
|
|
- macOS-latest-cmake
|
|
- windows-latest-cmake
|
|
|
|
steps:
|
|
- name: Download artifacts
|
|
id: download-artifact
|
|
uses: actions/download-artifact@v3
|
|
|
|
- name: Get commit hash
|
|
id: commit
|
|
uses: pr-mpt/actions-commit-hash@v2
|
|
|
|
- name: Create release
|
|
id: create_release
|
|
uses: anzz1/action-create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ env.BRANCH_NAME }}-${{ steps.commit.outputs.short }}
|
|
|
|
- name: Upload release
|
|
id: upload_release
|
|
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')) {
|
|
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/${file}`)
|
|
});
|
|
}
|
|
}
|
|
|
|
# ubuntu-latest-gcc:
|
|
# runs-on: ubuntu-latest
|
|
#
|
|
# strategy:
|
|
# matrix:
|
|
# build: [Debug, Release]
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v1
|
|
#
|
|
# - name: Dependencies
|
|
# run: |
|
|
# sudo apt-get update
|
|
# sudo apt-get install build-essential
|
|
# sudo apt-get install cmake
|
|
#
|
|
# - name: Configure
|
|
# run: cmake . -DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
#
|
|
# - name: Build
|
|
# run: |
|
|
# make
|
|
#
|
|
# ubuntu-latest-clang:
|
|
# runs-on: ubuntu-latest
|
|
#
|
|
# strategy:
|
|
# matrix:
|
|
# build: [Debug, Release]
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v1
|
|
#
|
|
# - name: Dependencies
|
|
# run: |
|
|
# sudo apt-get update
|
|
# sudo apt-get install build-essential
|
|
# sudo apt-get install cmake
|
|
#
|
|
# - name: Configure
|
|
# run: cmake . -DCMAKE_BUILD_TYPE=${{ matrix.build }} -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang
|
|
#
|
|
# - name: Build
|
|
# run: |
|
|
# make
|
|
#
|
|
# ubuntu-latest-gcc-sanitized:
|
|
# runs-on: ubuntu-latest
|
|
#
|
|
# strategy:
|
|
# matrix:
|
|
# sanitizer: [ADDRESS, THREAD, UNDEFINED]
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v1
|
|
#
|
|
# - name: Dependencies
|
|
# run: |
|
|
# sudo apt-get update
|
|
# sudo apt-get install build-essential
|
|
# sudo apt-get install cmake
|
|
#
|
|
# - name: Configure
|
|
# run: cmake . -DCMAKE_BUILD_TYPE=Debug -DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON
|
|
#
|
|
# - name: Build
|
|
# run: |
|
|
# make
|
|
#
|
|
# windows:
|
|
# runs-on: windows-latest
|
|
#
|
|
# strategy:
|
|
# matrix:
|
|
# build: [Release]
|
|
# arch: [Win32, x64]
|
|
# include:
|
|
# - arch: Win32
|
|
# s2arc: x86
|
|
# - arch: x64
|
|
# s2arc: x64
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v1
|
|
#
|
|
# - name: Add msbuild to PATH
|
|
# uses: microsoft/setup-msbuild@v1
|
|
#
|
|
# - name: Configure
|
|
# run: >
|
|
# cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
# -DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
#
|
|
# - name: Build
|
|
# run: |
|
|
# cd ./build
|
|
# msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
#
|
|
# - name: Upload binaries
|
|
# uses: actions/upload-artifact@v1
|
|
# with:
|
|
# name: llama-bin-${{ matrix.arch }}
|
|
# path: build/bin/${{ matrix.build }}
|
|
#
|
|
# windows-blas:
|
|
# runs-on: windows-latest
|
|
#
|
|
# strategy:
|
|
# matrix:
|
|
# build: [Release]
|
|
# arch: [Win32, x64]
|
|
# blas: [ON]
|
|
# include:
|
|
# - arch: Win32
|
|
# obzip: https://github.com/xianyi/OpenBLAS/releases/download/v0.3.21/OpenBLAS-0.3.21-x86.zip
|
|
# s2arc: x86
|
|
# - arch: x64
|
|
# obzip: https://github.com/xianyi/OpenBLAS/releases/download/v0.3.21/OpenBLAS-0.3.21-x64.zip
|
|
# s2arc: x64
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v1
|
|
#
|
|
# - name: Add msbuild to PATH
|
|
# uses: microsoft/setup-msbuild@v1
|
|
#
|
|
# - name: Fetch OpenBLAS
|
|
# if: matrix.blas == 'ON'
|
|
# run: |
|
|
# C:/msys64/usr/bin/wget.exe -qO blas.zip ${{ matrix.obzip }}
|
|
# 7z x blas.zip -oblas -y
|
|
# copy blas/include/cblas.h .
|
|
# copy blas/include/openblas_config.h .
|
|
# echo "blasdir=$env:GITHUB_WORKSPACE/blas" >> $env:GITHUB_ENV
|
|
#
|
|
# - name: Configure
|
|
# run: >
|
|
# cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
# -DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
# -DLLAMA_SUPPORT_OPENBLAS=${{ matrix.blas }}
|
|
# -DCMAKE_LIBRARY_PATH="$env:blasdir/lib"
|
|
#
|
|
# - name: Build
|
|
# run: |
|
|
# cd ./build
|
|
# msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
#
|
|
# - name: Copy libopenblas.dll
|
|
# if: matrix.blas == 'ON'
|
|
# run: copy "$env:blasdir/bin/libopenblas.dll" build/bin/${{ matrix.build }}
|
|
#
|
|
# - name: Upload binaries
|
|
# if: matrix.blas == 'ON'
|
|
# uses: actions/upload-artifact@v1
|
|
# with:
|
|
# name: llama-blas-bin-${{ matrix.arch }}
|
|
# path: build/bin/${{ matrix.build }}
|
|
#
|
|
# emscripten:
|
|
# runs-on: ubuntu-latest
|
|
#
|
|
# strategy:
|
|
# matrix:
|
|
# build: [Release]
|
|
#
|
|
# steps:
|
|
# - name: Clone
|
|
# uses: actions/checkout@v1
|
|
#
|
|
# - name: Dependencies
|
|
# run: |
|
|
# wget -q https://github.com/emscripten-core/emsdk/archive/master.tar.gz
|
|
# tar -xvf master.tar.gz
|
|
# emsdk-master/emsdk update
|
|
# emsdk-master/emsdk install latest
|
|
# emsdk-master/emsdk activate latest
|
|
#
|
|
# - name: Configure
|
|
# run: echo "tmp"
|
|
#
|
|
# - name: Build
|
|
# run: |
|
|
# pushd emsdk-master
|
|
# source ./emsdk_env.sh
|
|
# popd
|
|
# emcmake cmake . -DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
# make
|