From 8b6e5baee71c6a1588cf062b150f229b2436e1d8 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Wed, 15 Oct 2025 14:18:01 -0700 Subject: [PATCH] CI: Set up temporary opt-out Vulkan support (#12614) Initially Vulkan support in Ollama will require building from source. Once it is more thoroughly tested and we have fixed any critical bugs, then we can bundle Vulkan into the official binary releases. --- .github/workflows/release.yaml | 15 +++++++++++++-- Dockerfile | 27 ++++++++++++++++++++++++++- scripts/build_linux.sh | 3 ++- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0aa7d53db..33ce2007a 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -237,13 +237,13 @@ jobs: include: - os: linux arch: amd64 - target: archive + target: archive_novulkan - os: linux arch: amd64 target: rocm - os: linux arch: arm64 - target: archive + target: archive_novulkan runs-on: ${{ matrix.arch == 'arm64' && format('{0}-{1}', matrix.os, matrix.arch) || matrix.os }} environment: release needs: setup-environment @@ -299,12 +299,14 @@ jobs: include: - os: linux arch: arm64 + target: novulkan build-args: | CGO_CFLAGS CGO_CXXFLAGS GOFLAGS - os: linux arch: amd64 + target: novulkan build-args: | CGO_CFLAGS CGO_CXXFLAGS @@ -317,6 +319,14 @@ jobs: CGO_CXXFLAGS GOFLAGS FLAVOR=rocm + - os: linux + arch: amd64 + suffix: '-vulkan' + target: default + build-args: | + CGO_CFLAGS + CGO_CXXFLAGS + GOFLAGS runs-on: ${{ matrix.arch == 'arm64' && format('{0}-{1}', matrix.os, matrix.arch) || matrix.os }} environment: release needs: setup-environment @@ -334,6 +344,7 @@ jobs: with: context: . platforms: ${{ matrix.os }}/${{ matrix.arch }} + target: ${{ matrix.target }} build-args: ${{ matrix.build-args }} outputs: type=image,name=${{ vars.DOCKER_REPO }},push-by-digest=true,name-canonical=true,push=true cache-from: type=registry,ref=${{ vars.DOCKER_REPO }}:latest diff --git a/Dockerfile b/Dockerfile index 63b671fea..dbc9207e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -159,7 +159,32 @@ ARG VULKANVERSION COPY --from=cpu dist/lib/ollama /lib/ollama COPY --from=build /bin/ollama /bin/ollama -FROM ubuntu:24.04 +# Temporary opt-out stages for Vulkan +FROM --platform=linux/amd64 scratch AS amd64_novulkan +# COPY --from=cuda-11 dist/lib/ollama/ /lib/ollama/ +COPY --from=cuda-12 dist/lib/ollama /lib/ollama/ +COPY --from=cuda-13 dist/lib/ollama /lib/ollama/ +FROM arm64 AS arm64_novulkan +FROM ${FLAVOR}_novulkan AS archive_novulkan +COPY --from=cpu dist/lib/ollama /lib/ollama +COPY --from=build /bin/ollama /bin/ollama +FROM ubuntu:24.04 AS novulkan +RUN apt-get update \ + && apt-get install -y ca-certificates \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +COPY --from=archive_novulkan /bin /usr/bin +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +COPY --from=archive_novulkan /lib/ollama /usr/lib/ollama +ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64 +ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility +ENV NVIDIA_VISIBLE_DEVICES=all +ENV OLLAMA_HOST=0.0.0.0:11434 +EXPOSE 11434 +ENTRYPOINT ["/bin/ollama"] +CMD ["serve"] + +FROM ubuntu:24.04 AS default RUN apt-get update \ && apt-get install -y ca-certificates libvulkan1 \ && apt-get clean \ diff --git a/scripts/build_linux.sh b/scripts/build_linux.sh index 618722d11..8287c11c2 100755 --- a/scripts/build_linux.sh +++ b/scripts/build_linux.sh @@ -13,12 +13,13 @@ set -eu . $(dirname $0)/env.sh mkdir -p dist +NOVULKAN=${NOVULKAN:-""} docker buildx build \ --output type=local,dest=./dist/ \ --platform=${PLATFORM} \ ${OLLAMA_COMMON_BUILD_ARGS} \ - --target archive \ + --target archive${NOVULKAN} \ -f Dockerfile \ .