mtmd : (WIP) add vision support for llama 4 #22652
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
workflow_dispatch: # allows manual triggering | |
push: | |
branches: | |
- master | |
paths: ['.github/workflows/build.yml', '.github/workflows/build-linux-cross.yml', '**/CMakeLists.txt', '**/.cmake', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu', '**/*.cuh', '**/*.swift', '**/*.m', '**/*.metal', '**/*.comp'] | |
pull_request: | |
types: [opened, synchronize, reopened] | |
paths: ['.github/workflows/build.yml', '.github/workflows/build-linux-cross.yml', '**/CMakeLists.txt', '**/.cmake', '**/*.h', '**/*.hpp', '**/*.c', '**/*.cpp', '**/*.cu', '**/*.cuh', '**/*.swift', '**/*.m', '**/*.metal', '**/*.comp'] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
GGML_NLOOP: 3 | |
GGML_N_THREADS: 1 | |
LLAMA_LOG_COLORS: 1 | |
LLAMA_LOG_PREFIX: 1 | |
LLAMA_LOG_TIMESTAMPS: 1 | |
jobs: | |
macOS-latest-cmake-arm64: | |
runs-on: macos-14 | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: macOS-latest-cmake-arm64 | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
continue-on-error: true | |
run: | | |
brew update | |
brew install curl | |
- name: Build | |
id: cmake_build | |
run: | | |
sysctl -a | |
cmake -B build \ | |
-DCMAKE_BUILD_RPATH="@loader_path" \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DGGML_METAL_USE_BF16=ON \ | |
-DGGML_METAL_EMBED_LIBRARY=ON \ | |
-DGGML_RPC=ON | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
ctest -L 'main|curl' --verbose --timeout 900 | |
macOS-latest-cmake-x64: | |
runs-on: macos-13 | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: macOS-latest-cmake-x64 | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
continue-on-error: true | |
run: | | |
brew update | |
brew install curl | |
- name: Build | |
id: cmake_build | |
run: | | |
sysctl -a | |
# Metal is disabled due to intermittent failures with Github runners not having a GPU: | |
# https://github.com/ggml-org/llama.cpp/actions/runs/8635935781/job/23674807267#step:5:2313 | |
cmake -B build \ | |
-DCMAKE_BUILD_RPATH="@loader_path" \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DGGML_METAL=OFF \ | |
-DGGML_RPC=ON | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
ctest -L main --verbose --timeout 900 | |
ubuntu-cpu-cmake: | |
strategy: | |
matrix: | |
include: | |
- build: 'x64' | |
os: ubuntu-22.04 | |
- build: 'arm64' | |
os: ubuntu-22.04-arm | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-cpu-cmake | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
run: | | |
sudo apt-get update | |
sudo apt-get install build-essential libcurl4-openssl-dev | |
- name: Build | |
id: cmake_build | |
run: | | |
cmake -B build \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DGGML_RPC=ON | |
cmake --build build --config Release -j $(nproc) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
ctest -L 'main|curl' --verbose --timeout 900 | |
- name: Test llama2c conversion | |
id: llama2c_test | |
run: | | |
cd build | |
echo "Fetch tokenizer" | |
wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/tok512.bin | |
echo "Fetch llama2c model" | |
wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/stories260K.bin | |
./bin/llama-convert-llama2c-to-ggml --copy-vocab-from-model ./tok512.bin --llama2c-model stories260K.bin --llama2c-output-model stories260K.gguf | |
./bin/llama-cli -m stories260K.gguf -p "One day, Lily met a Shoggoth" -n 500 -c 256 | |
ubuntu-latest-cmake-sanitizer: | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
strategy: | |
matrix: | |
sanitizer: [ADDRESS, THREAD, UNDEFINED] | |
build_type: [Debug] | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-latest-cmake-sanitizer-${{ matrix.sanitizer }} | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
run: | | |
sudo apt-get update | |
sudo apt-get install build-essential libcurl4-openssl-dev | |
- name: Build | |
id: cmake_build | |
if: ${{ matrix.sanitizer != 'THREAD' }} | |
run: | | |
cmake -B build \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON \ | |
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build build --config ${{ matrix.build_type }} -j $(nproc) | |
- name: Build (no OpenMP) | |
id: cmake_build_no_openmp | |
if: ${{ matrix.sanitizer == 'THREAD' }} | |
run: | | |
cmake -B build \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DLLAMA_SANITIZE_${{ matrix.sanitizer }}=ON \ | |
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ | |
-DGGML_OPENMP=OFF | |
cmake --build build --config ${{ matrix.build_type }} -j $(nproc) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
ctest -L main --verbose --timeout 900 | |
ubuntu-latest-llguidance: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Dependencies | |
id: depends | |
run: | | |
sudo apt-get update | |
sudo apt-get install build-essential libcurl4-openssl-dev | |
- name: Build | |
id: cmake_build | |
run: | | |
mkdir build | |
cd build | |
cmake .. \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DLLAMA_LLGUIDANCE=ON | |
cmake --build . --config Release -j $(nproc) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
ctest -L main --verbose --timeout 900 | |
ubuntu-latest-cmake-rpc: | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-latest-cmake-rpc | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
run: | | |
sudo apt-get update | |
sudo apt-get install build-essential libcurl4-openssl-dev | |
- name: Build | |
id: cmake_build | |
run: | | |
cmake -B build \ | |
-DGGML_RPC=ON | |
cmake --build build --config Release -j $(nproc) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
ctest -L main --verbose | |
ubuntu-22-cmake-vulkan: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-22-cmake-vulkan | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
run: | | |
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add - | |
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list | |
sudo apt-get update -y | |
sudo apt-get install -y build-essential mesa-vulkan-drivers vulkan-sdk libcurl4-openssl-dev | |
- name: Build | |
id: cmake_build | |
run: | | |
cmake -B build \ | |
-DGGML_VULKAN=ON | |
cmake --build build --config Release -j $(nproc) | |
- name: Test | |
id: cmake_test | |
run: | | |
cd build | |
# This is using llvmpipe and runs slower than other backends | |
ctest -L main --verbose --timeout 3600 | |
ubuntu-22-cmake-hip: | |
runs-on: ubuntu-22.04 | |
container: rocm/dev-ubuntu-22.04:6.0.2 | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Dependencies | |
id: depends | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential git cmake rocblas-dev hipblas-dev libcurl4-openssl-dev | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-22-cmake-hip | |
evict-old-files: 1d | |
- name: Build with native CMake HIP support | |
id: cmake_build | |
run: | | |
cmake -B build -S . \ | |
-DCMAKE_HIP_COMPILER="$(hipconfig -l)/clang" \ | |
-DGGML_HIP_ROCWMMA_FATTN=ON \ | |
-DGGML_HIP=ON | |
cmake --build build --config Release -j $(nproc) | |
- name: Build with legacy HIP support | |
id: cmake_build_legacy_hip | |
run: | | |
cmake -B build2 -S . \ | |
-DCMAKE_C_COMPILER=hipcc \ | |
-DCMAKE_CXX_COMPILER=hipcc \ | |
-DGGML_HIP_ROCWMMA_FATTN=ON \ | |
-DGGML_HIP=ON | |
cmake --build build2 --config Release -j $(nproc) | |
ubuntu-22-cmake-musa: | |
runs-on: ubuntu-22.04 | |
container: mthreads/musa:rc3.1.1-devel-ubuntu22.04 | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Dependencies | |
id: depends | |
run: | | |
apt-get update | |
apt-get install -y build-essential git cmake libcurl4-openssl-dev | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-22-cmake-musa | |
evict-old-files: 1d | |
- name: Build with native CMake MUSA support | |
id: cmake_build | |
run: | | |
cmake -B build -S . \ | |
-DGGML_MUSA=ON | |
cmake --build build --config Release -j $(nproc) | |
ubuntu-22-cmake-sycl: | |
runs-on: ubuntu-22.04 | |
continue-on-error: true | |
steps: | |
- uses: actions/checkout@v4 | |
- name: add oneAPI to apt | |
shell: bash | |
run: | | |
cd /tmp | |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" | |
- name: install oneAPI dpcpp compiler | |
shell: bash | |
run: | | |
sudo apt update | |
sudo apt install intel-oneapi-compiler-dpcpp-cpp libcurl4-openssl-dev | |
- name: install oneAPI MKL library | |
shell: bash | |
run: | | |
sudo apt install intel-oneapi-mkl-devel | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-22-cmake-sycl | |
evict-old-files: 1d | |
- name: Build | |
id: cmake_build | |
run: | | |
source /opt/intel/oneapi/setvars.sh | |
cmake -B build \ | |
-DGGML_SYCL=ON \ | |
-DCMAKE_C_COMPILER=icx \ | |
-DCMAKE_CXX_COMPILER=icpx | |
cmake --build build --config Release -j $(nproc) | |
ubuntu-22-cmake-sycl-fp16: | |
runs-on: ubuntu-22.04 | |
continue-on-error: true | |
steps: | |
- uses: actions/checkout@v4 | |
- name: add oneAPI to apt | |
shell: bash | |
run: | | |
cd /tmp | |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | |
sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" | |
- name: install oneAPI dpcpp compiler | |
shell: bash | |
run: | | |
sudo apt update | |
sudo apt install intel-oneapi-compiler-dpcpp-cpp libcurl4-openssl-dev | |
- name: install oneAPI MKL library | |
shell: bash | |
run: | | |
sudo apt install intel-oneapi-mkl-devel | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-22-cmake-sycl-fp16 | |
evict-old-files: 1d | |
- name: Build | |
id: cmake_build | |
run: | | |
source /opt/intel/oneapi/setvars.sh | |
cmake -B build \ | |
-DGGML_SYCL=ON \ | |
-DCMAKE_C_COMPILER=icx \ | |
-DCMAKE_CXX_COMPILER=icpx \ | |
-DGGML_SYCL_F16=ON | |
cmake --build build --config Release -j $(nproc) | |
build-linux-cross: | |
uses: ./.github/workflows/build-linux-cross.yml | |
macOS-latest-cmake-ios: | |
runs-on: macos-latest | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: macOS-latest-cmake-ios | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
continue-on-error: true | |
run: | | |
brew update | |
- name: Build | |
id: cmake_build | |
run: | | |
sysctl -a | |
cmake -B build -G Xcode \ | |
-DGGML_METAL_USE_BF16=ON \ | |
-DGGML_METAL_EMBED_LIBRARY=ON \ | |
-DLLAMA_BUILD_COMMON=OFF \ | |
-DLLAMA_BUILD_EXAMPLES=OFF \ | |
-DLLAMA_BUILD_TOOLS=OFF \ | |
-DLLAMA_BUILD_TESTS=OFF \ | |
-DLLAMA_BUILD_SERVER=OFF \ | |
-DCMAKE_SYSTEM_NAME=iOS \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 \ | |
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO | |
macOS-latest-cmake-tvos: | |
runs-on: macos-latest | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: macOS-latest-cmake-tvos | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
continue-on-error: true | |
run: | | |
brew update | |
- name: Build | |
id: cmake_build | |
run: | | |
sysctl -a | |
cmake -B build -G Xcode \ | |
-DGGML_METAL_USE_BF16=ON \ | |
-DGGML_METAL_EMBED_LIBRARY=ON \ | |
-DLLAMA_BUILD_COMMON=OFF \ | |
-DLLAMA_BUILD_EXAMPLES=OFF \ | |
-DLLAMA_BUILD_TOOLS=OFF \ | |
-DLLAMA_BUILD_TESTS=OFF \ | |
-DLLAMA_BUILD_SERVER=OFF \ | |
-DCMAKE_SYSTEM_NAME=tvOS \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 \ | |
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO | |
macOS-latest-cmake-visionos: | |
runs-on: macos-latest | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Dependencies | |
id: depends | |
continue-on-error: true | |
run: | | |
brew update | |
- name: Build | |
id: cmake_build | |
run: | | |
sysctl -a | |
cmake -B build -G Xcode \ | |
-DGGML_METAL_USE_BF16=ON \ | |
-DGGML_METAL_EMBED_LIBRARY=ON \ | |
-DLLAMA_BUILD_COMMON=OFF \ | |
-DLLAMA_BUILD_EXAMPLES=OFF \ | |
-DLLAMA_BUILD_TOOLS=OFF \ | |
-DLLAMA_BUILD_TESTS=OFF \ | |
-DLLAMA_BUILD_SERVER=OFF \ | |
-DCMAKE_SYSTEM_NAME=visionOS \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=1.0 \ | |
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO | |
macOS-latest-swift: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
destination: ['generic/platform=macOS', 'generic/platform=iOS', 'generic/platform=tvOS'] | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: macOS-latest-swift | |
evict-old-files: 1d | |
- name: Dependencies | |
id: depends | |
continue-on-error: true | |
run: | | |
brew update | |
- name: Build llama.cpp with CMake | |
id: cmake_build | |
run: | | |
sysctl -a | |
cmake -B build -G Xcode \ | |
-DGGML_METAL_USE_BF16=ON \ | |
-DGGML_METAL_EMBED_LIBRARY=ON \ | |
-DLLAMA_CURL=OFF \ | |
-DLLAMA_BUILD_EXAMPLES=OFF \ | |
-DLLAMA_BUILD_TOOLS=OFF \ | |
-DLLAMA_BUILD_TESTS=OFF \ | |
-DLLAMA_BUILD_SERVER=OFF \ | |
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) | |
- name: xcodebuild for swift package | |
id: xcodebuild | |
run: | | |
./build-xcframework.sh | |
windows-msys2: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- { sys: UCRT64, env: ucrt-x86_64, build: Release } | |
- { sys: CLANG64, env: clang-x86_64, build: Release } | |
steps: | |
- name: Clone | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: windows-msys2 | |
variant: ccache | |
evict-old-files: 1d | |
- name: Setup ${{ matrix.sys }} | |
uses: msys2/setup-msys2@v2 | |
with: | |
update: true | |
msystem: ${{matrix.sys}} | |
install: >- | |
base-devel | |
git | |
mingw-w64-${{matrix.env}}-toolchain | |
mingw-w64-${{matrix.env}}-cmake | |
mingw-w64-${{matrix.env}}-openblas | |
- name: Build using CMake | |
shell: msys2 {0} | |
run: | | |
cmake -B build | |
cmake --build build --config ${{ matrix.build }} -j $(nproc) | |
- name: Clean after building using CMake | |
shell: msys2 {0} | |
run: | | |
rm -rf build | |
- name: Build using CMake w/ OpenBLAS | |
shell: msys2 {0} | |
run: | | |
cmake -B build -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS | |
cmake --build build --config ${{ matrix.build }} -j $(nproc) | |
windows-latest-cmake: | |
runs-on: windows-latest | |
env: | |
OPENBLAS_VERSION: 0.3.23 | |
SDE_VERSION: 9.33.0-2024-01-07 | |
VULKAN_VERSION: 1.4.309.0 | |
strategy: | |
matrix: | |
include: | |
- build: 'cpu-x64' | |
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/x64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_OPENMP=OFF' | |
- build: 'openblas-x64' | |
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/x64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_OPENMP=OFF -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' | |
- build: 'vulkan-x64' | |
defines: '-DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_VULKAN=ON' | |
- build: 'llvm-arm64' | |
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON' | |
- build: 'llvm-arm64-opencl-adreno' | |
defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/arm64-windows-llvm.cmake -DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" -DGGML_OPENCL=ON -DGGML_OPENCL_USE_ADRENO_KERNELS=ON' | |
# - build: 'kompute-x64' | |
# defines: '-G "Ninja Multi-Config" -D CMAKE_TOOLCHAIN_FILE=cmake/x64-windows-llvm.cmake -DGGML_NATIVE=OFF -DLLAMA_BUILD_SERVER=ON -DGGML_RPC=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DGGML_OPENMP=OFF -DGGML_KOMPUTE=ON -DKOMPUTE_OPT_DISABLE_VULKAN_VERSION_CHECK=ON' | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: windows-latest-cmake-${{ matrix.build }} | |
variant: ccache | |
evict-old-files: 1d | |
- name: Clone Kompute submodule | |
id: clone_kompute | |
if: ${{ matrix.build == 'kompute-x64' }} | |
run: | | |
git submodule update --init ggml/src/ggml-kompute/kompute | |
- name: Download OpenBLAS | |
id: get_openblas | |
if: ${{ matrix.build == 'openblas-x64' }} | |
run: | | |
curl.exe -o $env:RUNNER_TEMP/openblas.zip -L "https://github.com/xianyi/OpenBLAS/releases/download/v${env:OPENBLAS_VERSION}/OpenBLAS-${env:OPENBLAS_VERSION}-x64.zip" | |
curl.exe -o $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt -L "https://github.com/xianyi/OpenBLAS/raw/v${env:OPENBLAS_VERSION}/LICENSE" | |
mkdir $env:RUNNER_TEMP/openblas | |
tar.exe -xvf $env:RUNNER_TEMP/openblas.zip -C $env:RUNNER_TEMP/openblas | |
$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())) | |
$lib = $(join-path $msvc 'bin\Hostx64\x64\lib.exe') | |
& $lib /machine:x64 "/def:${env:RUNNER_TEMP}/openblas/lib/libopenblas.def" "/out:${env:RUNNER_TEMP}/openblas/lib/openblas.lib" /name:openblas.dll | |
- name: Install Vulkan SDK | |
id: get_vulkan | |
if: ${{ matrix.build == 'kompute-x64' || matrix.build == 'vulkan-x64' }} | |
run: | | |
curl.exe -o $env:RUNNER_TEMP/VulkanSDK-Installer.exe -L "https://sdk.lunarg.com/sdk/download/${env:VULKAN_VERSION}/windows/VulkanSDK-${env:VULKAN_VERSION}-Installer.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 | |
id: install_ninja | |
run: | | |
choco install ninja | |
- name: Install OpenCL Headers and Libs | |
id: install_opencl | |
if: ${{ matrix.build == 'llvm-arm64-opencl-adreno' }} | |
run: | | |
git clone https://github.com/KhronosGroup/OpenCL-Headers | |
cd OpenCL-Headers | |
cmake -B build ` | |
-DBUILD_TESTING=OFF ` | |
-DOPENCL_HEADERS_BUILD_TESTING=OFF ` | |
-DOPENCL_HEADERS_BUILD_CXX_TESTS=OFF ` | |
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release" | |
cmake --build build --target install | |
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader | |
cd OpenCL-ICD-Loader | |
cmake -B build-arm64-release ` | |
-A arm64 ` | |
-DCMAKE_PREFIX_PATH="$env:RUNNER_TEMP/opencl-arm64-release" ` | |
-DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/opencl-arm64-release" | |
cmake --build build-arm64-release --target install --config release | |
- name: libCURL | |
id: get_libcurl | |
uses: ./.github/actions/windows-setup-curl | |
- name: Build | |
id: cmake_build | |
env: | |
CURL_PATH: ${{ steps.get_libcurl.outputs.curl_path }} | |
run: | | |
cmake -S . -B build ${{ matrix.defines }} ` | |
-DCURL_LIBRARY="$env:CURL_PATH/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:CURL_PATH/include" | |
cmake --build build --config Release -j ${env:NUMBER_OF_PROCESSORS} | |
- name: Add libopenblas.dll | |
id: add_libopenblas_dll | |
if: ${{ matrix.build == 'openblas-x64' }} | |
run: | | |
cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build/bin/Release/openblas.dll | |
cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build/bin/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt | |
- name: Test | |
id: cmake_test | |
if: ${{ matrix.build != 'llvm-arm64' && matrix.build != 'llvm-arm64-opencl-adreno' }} | |
run: | | |
cd build | |
ctest -L main -C Release --verbose --timeout 900 | |
# TODO: disabled for now, consider adding tests for all CPU variants instead | |
# - name: Test (Intel SDE) | |
# id: cmake_test_sde | |
# if: ${{ matrix.build == 'avx512-x64' && env.HAS_AVX512F == '0' }} # use Intel SDE for AVX-512 emulation | |
# run: | | |
# curl.exe -o $env:RUNNER_TEMP/sde.tar.xz -L "https://downloadmirror.intel.com/813591/sde-external-${env:SDE_VERSION}-win.tar.xz" | |
# # for some weird reason windows tar doesn't like sde tar.xz | |
# 7z x "-o${env:RUNNER_TEMP}" $env:RUNNER_TEMP/sde.tar.xz | |
# 7z x "-o${env:RUNNER_TEMP}" $env:RUNNER_TEMP/sde.tar | |
# $sde = $(join-path $env:RUNNER_TEMP sde-external-${env:SDE_VERSION}-win/sde.exe) | |
# cd build | |
# $env:LLAMA_SKIP_TESTS_SLOW_ON_EMULATOR = 1 | |
# & $sde -future -- ctest -L main -C Release --verbose --timeout 900 | |
ubuntu-latest-cmake-cuda: | |
runs-on: ubuntu-latest | |
container: nvidia/cuda:12.6.2-devel-ubuntu24.04 | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
apt update | |
apt install -y cmake build-essential ninja-build libgomp1 git libcurl4-openssl-dev | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ubuntu-latest-cmake-cuda | |
evict-old-files: 1d | |
- name: Build with CMake | |
run: | | |
cmake -S . -B build -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCMAKE_CUDA_ARCHITECTURES=89-real \ | |
-DCMAKE_EXE_LINKER_FLAGS=-Wl,--allow-shlib-undefined \ | |
-DLLAMA_FATAL_WARNINGS=ON \ | |
-DGGML_NATIVE=OFF \ | |
-DGGML_CUDA=ON | |
cmake --build build | |
windows-2019-cmake-cuda: | |
runs-on: windows-2019 | |
strategy: | |
matrix: | |
cuda: ['12.4', '11.7'] | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: windows-cuda-${{ matrix.cuda }} | |
variant: ccache | |
evict-old-files: 1d | |
- name: Install Cuda Toolkit | |
uses: ./.github/actions/windows-setup-cuda | |
with: | |
cuda_version: ${{ matrix.cuda }} | |
- name: Install Ninja | |
id: install_ninja | |
run: | | |
choco install ninja | |
- name: libCURL | |
id: get_libcurl | |
uses: ./.github/actions/windows-setup-curl | |
- name: Build | |
id: cmake_build | |
shell: cmd | |
env: | |
CURL_PATH: ${{ steps.get_libcurl.outputs.curl_path }} | |
run: | | |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" | |
cmake -S . -B build -G "Ninja Multi-Config" ^ | |
-DLLAMA_BUILD_SERVER=ON ^ | |
-DGGML_NATIVE=OFF ^ | |
-DGGML_BACKEND_DL=ON ^ | |
-DGGML_CPU_ALL_VARIANTS=ON ^ | |
-DGGML_CUDA=ON ^ | |
-DGGML_RPC=ON ^ | |
-DCURL_LIBRARY="%CURL_PATH%/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="%CURL_PATH%/include" | |
set /A NINJA_JOBS=%NUMBER_OF_PROCESSORS%-1 | |
cmake --build build --config Release -j %NINJA_JOBS% -t ggml | |
cmake --build build --config Release | |
windows-latest-cmake-sycl: | |
runs-on: windows-latest | |
defaults: | |
run: | |
shell: bash | |
env: | |
WINDOWS_BASEKIT_URL: https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b380d914-366b-4b77-a74a-05e3c38b3514/intel-oneapi-base-toolkit-2025.0.0.882_offline.exe | |
WINDOWS_DPCPP_MKL: intel.oneapi.win.cpp-dpcpp-common:intel.oneapi.win.mkl.devel:intel.oneapi.win.dnnl:intel.oneapi.win.tbb.devel | |
ONEAPI_ROOT: "C:/Program Files (x86)/Intel/oneAPI" | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: windows-latest-cmake-sycl | |
variant: ccache | |
evict-old-files: 1d | |
- name: Install | |
run: | | |
scripts/install-oneapi.bat $WINDOWS_BASEKIT_URL $WINDOWS_DPCPP_MKL | |
# TODO: add libcurl support ; we will also need to modify win-build-sycl.bat to accept user-specified args | |
- name: Build | |
id: cmake_build | |
run: examples/sycl/win-build-sycl.bat | |
windows-latest-cmake-hip: | |
if: ${{ github.event.inputs.create_release != 'true' }} | |
runs-on: windows-latest | |
steps: | |
- name: Clone | |
id: checkout | |
uses: actions/checkout@v4 | |
- name: Clone rocWMMA repository | |
id: clone_rocwmma | |
run: | | |
git clone https://github.com/rocm/rocwmma --branch rocm-6.2.4 --depth 1 | |
- name: Install | |
id: depends | |
run: | | |
$ErrorActionPreference = "Stop" | |
write-host "Downloading AMD HIP SDK Installer" | |
Invoke-WebRequest -Uri "https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-24.Q3-WinSvr2022-For-HIP.exe" -OutFile "${env:RUNNER_TEMP}\rocm-install.exe" | |
write-host "Installing AMD HIP SDK" | |
Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -Wait | |
write-host "Completed AMD HIP SDK installation" | |
- name: Verify ROCm | |
id: verify | |
run: | | |
& 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' --version | |
- name: Install ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: ${{ github.job }} | |
evict-old-files: 1d | |
- name: libCURL | |
id: get_libcurl | |
uses: ./.github/actions/windows-setup-curl | |
- name: Build | |
id: cmake_build | |
env: | |
CURL_PATH: ${{ steps.get_libcurl.outputs.curl_path }} | |
run: | | |
$env:HIP_PATH=$(Resolve-Path 'C:\Program Files\AMD\ROCm\*\bin\clang.exe' | split-path | split-path) | |
$env:CMAKE_PREFIX_PATH="${env:HIP_PATH}" | |
cmake -G "Unix Makefiles" -B build -S . ` | |
-DCMAKE_C_COMPILER="${env:HIP_PATH}\bin\clang.exe" ` | |
-DCMAKE_CXX_COMPILER="${env:HIP_PATH}\bin\clang++.exe" ` | |
-DCMAKE_CXX_FLAGS="-I$($PWD.Path.Replace('\', '/'))/rocwmma/library/include/" ` | |
-DCMAKE_BUILD_TYPE=Release ` | |
-DGGML_HIP=ON ` | |
-DGGML_HIP_ROCWMMA_FATTN=ON ` | |
-DGGML_RPC=ON ` | |
-DCURL_LIBRARY="$env:CURL_PATH/lib/libcurl.dll.a" -DCURL_INCLUDE_DIR="$env:CURL_PATH/include" | |
cmake --build build -j ${env:NUMBER_OF_PROCESSORS} | |
ios-xcode-build: | |
runs-on: macos-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build | |
id: cmake_build | |
run: | | |
sysctl -a | |
cmake -B build -G Xcode \ | |
-DGGML_METAL_USE_BF16=ON \ | |
-DGGML_METAL_EMBED_LIBRARY=ON \ | |
-DLLAMA_CURL=OFF \ | |
-DLLAMA_BUILD_EXAMPLES=OFF \ | |
-DLLAMA_BUILD_TOOLS=OFF \ | |
-DLLAMA_BUILD_TESTS=OFF \ | |
-DLLAMA_BUILD_SERVER=OFF \ | |
-DCMAKE_SYSTEM_NAME=iOS \ | |
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 \ | |
-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=ggml | |
cmake --build build --config Release -j $(sysctl -n hw.logicalcpu) -- CODE_SIGNING_ALLOWED=NO | |
- name: xcodebuild for swift package | |
id: xcodebuild | |
run: | | |
./build-xcframework.sh | |
- name: Build Xcode project | |
run: xcodebuild -project examples/llama.swiftui/llama.swiftui.xcodeproj -scheme llama.swiftui -sdk iphoneos CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= -destination 'generic/platform=iOS' FRAMEWORK_FOLDER_PATH=./build-ios build | |
android-build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Clone | |
uses: actions/checkout@v4 | |
- name: ccache | |
uses: hendrikmuhs/ccache-action@v1.2.16 | |
with: | |
key: android-build | |
evict-old-files: 1d | |
- name: Set up JDK | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 17 | |
distribution: zulu | |
- name: Setup Android SDK | |
uses: android-actions/setup-android@v3 | |
with: | |
log-accepted-android-sdk-licenses: false | |
- name: Build | |
run: | | |
cd examples/llama.android | |
./gradlew build --no-daemon | |
openEuler-latest-cmake-cann: | |
if: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'Ascend NPU') }} | |
defaults: | |
run: | |
shell: bash -el {0} | |
strategy: | |
matrix: | |
arch: [x86, aarch64] | |
cann: | |
- '8.1.RC1.alpha001-910b-openeuler22.03-py3.10' | |
device: | |
- 'ascend910b3' | |
build: | |
- 'Release' | |
runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} | |
container: ascendai/cann:${{ matrix.cann }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Dependencies | |
run: | | |
yum update -y | |
yum install -y git gcc gcc-c++ make cmake libcurl-devel | |
- name: Build | |
run: | | |
export LD_LIBRARY_PATH=${ASCEND_TOOLKIT_HOME}/lib64:${ASCEND_TOOLKIT_HOME}/$(uname -m)-linux/devlib/:${LD_LIBRARY_PATH} | |
cmake -S . -B build \ | |
-DCMAKE_BUILD_TYPE=${{ matrix.build }} \ | |
-DGGML_CANN=on \ | |
-DSOC_TYPE=${{ matrix.device }} | |
cmake --build build -j $(nproc) |