From 81465ca37494217f0d6f074eb47306835d26638b Mon Sep 17 00:00:00 2001 From: Vadim Grinco Date: Sun, 9 Mar 2025 20:42:32 +0100 Subject: [PATCH] Installing rocm library Signed-off-by: Vadim Grinco --- Dockerfile | 105 ++++++++++++++++++++++++++++------------------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4e87ba43c..25d8ddd3e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,88 +1,93 @@ -FROM --platform=linux/amd64 library/ubuntu:noble as builder +# Base Image +FROM --platform=linux/amd64 library/ubuntu:noble AS builder +# Set Environment Variables ENV DEBIAN_FRONTEND="noninteractive" - ENV VULKAN_VER_BASE="1.3.296" ENV VULKAN_VER="${VULKAN_VER_BASE}.0" ENV UBUNTU_VERSION="noble" - ENV GOLANG_VERSION="1.22.8" ENV GOARCH="amd64" ENV CGO_ENABLED=1 ENV LDFLAGS=-s -# Default mirror was very slow -RUN \ - sed -i 's/archive.ubuntu.com/gb.archive.ubuntu.com/g' /etc/apt/sources.list.d/ubuntu.sources +# Set up faster package mirrors +RUN sed -i 's/archive.ubuntu.com/gb.archive.ubuntu.com/g' /etc/apt/sources.list.d/ubuntu.sources -RUN \ - apt-get update && \ - apt-get install -y ca-certificates build-essential ccache cmake wget git curl rsync xz-utils libcap-dev +# Install Required Dependencies +RUN apt-get update && apt-get install -y \ + ca-certificates build-essential ccache cmake wget git curl rsync xz-utils libcap-dev \ + && apt-get clean && rm -rf /var/lib/apt/lists/* -RUN \ - mkdir -p /usr/local 2>/dev/null || true && \ +# Install Go +RUN mkdir -p /usr/local && \ curl -s -L https://dl.google.com/go/go${GOLANG_VERSION}.linux-${GOARCH}.tar.gz | tar -xz -C /usr/local && \ ln -s /usr/local/go/bin/go /usr/local/bin/go && \ ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt - -RUN \ - wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/lunarg-signing-key-pub.gpg && \ +# Install Vulkan SDK +RUN wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/lunarg-signing-key-pub.gpg && \ wget -qO /etc/apt/sources.list.d/lunarg-vulkan-${UBUNTU_VERSION}.list https://packages.lunarg.com/vulkan/${VULKAN_VER_BASE}/lunarg-vulkan-${VULKAN_VER_BASE}-${UBUNTU_VERSION}.list && \ - apt update && apt install -y vulkan-sdk + apt update && apt install -y vulkan-sdk && \ + apt-get clean && rm -rf /var/lib/apt/lists/* -# Last testet ollama-vulkan commit: -# 2d443b3dd660a1fd2760d64538512df93648b4bb -COPY patches/ /tmp/patches/ -RUN \ - git clone https://github.com/pufferffish/ollama-vulkan.git "/tmp/ollama-vulkan-git" && \ - cd "/tmp/ollama-vulkan-git" && \ +# Install AMDVLK (Optional: If you want to use AMDVLK instead of RADV) +RUN wget -qO - http://repo.radeon.com/amdvlk/apt/debian/amdvlk.gpg.key | apt-key add && \ + echo "deb [arch=amd64,i386] http://repo.radeon.com/amdvlk/apt/debian/ bionic main" > /etc/apt/sources.list.d/amdvlk.list && \ + apt update && apt install -y amdvlk && \ + apt-get clean && rm -rf /var/lib/apt/lists/* + +# Set AMDVLK as the default Vulkan driver +ENV VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_icd64.json + +# Clone Ollama Vulkan Fork +WORKDIR /opt +RUN git clone https://github.com/pufferffish/ollama-vulkan.git ollama-vulkan + +# Download and Apply Patches Automatically +WORKDIR /opt/ollama-vulkan +RUN mkdir -p patches && \ + wget -O patches/00-fix-vulkan-building.patch https://github.com/user-attachments/files/18783263/0002-fix-fix-vulkan-building.patch && \ git checkout 2d443b3dd660a1fd2760d64538512df93648b4bb && git checkout -b ollama_vulkan_stable && \ git config user.name "Builder" && git config user.email "builder@local" && \ git remote add ollama_vanilla https://github.com/ollama/ollama.git && \ - git fetch ollama_vanilla --tags && git checkout v0.5.11 && git checkout -b ollama_vanilla_stable && \ + git fetch ollama_vanilla --tags && git checkout v0.5.13 && git checkout -b ollama_vanilla_stable && \ git checkout ollama_vulkan_stable && git merge ollama_vanilla_stable --allow-unrelated-histories --no-edit && \ - for p in /tmp/patches/00-fix-vulkan-building.patch; do patch -p1 < $p; done + for p in patches/*.patch; do patch -p1 < $p; done -RUN \ - cd "/tmp/ollama-vulkan-git" && \ - make -f Makefile.sync clean sync +# Build Shared Libraries (CPU & Vulkan) +WORKDIR /opt/ollama-vulkan +RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release +RUN cmake --build build --parallel +RUN cmake --install build --component CPU --strip +RUN cmake --install build --component Vulkan --strip +# Install rocm +RUN apt update +RUN apt install -y wget "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)" +RUN apt install -y python3-setuptools python3-wheel +RUN wget https://repo.radeon.com/amdgpu-install/6.3.3/ubuntu/noble/amdgpu-install_6.3.60303-1_all.deb -O /tmp/amdgpu-install_6.3.60303-1_all.deb +RUN apt install -y /tmp/amdgpu-install_6.3.60303-1_all.deb +RUN apt update && apt install -y rocm -FROM builder AS cpu-build -RUN \ - cd "/tmp/ollama-vulkan-git" && \ - cmake --preset CPU && cmake --build --parallel --preset CPU && \ - cmake --install build --component CPU --strip - -FROM builder AS vulkan-build -RUN \ - cd "/tmp/ollama-vulkan-git" && \ - cmake --preset Vulkan && \ - cmake --build --parallel --preset Vulkan && \ - cmake --install build --component Vulkan --strip - -FROM builder AS binary-build -RUN \ - cd "/tmp/ollama-vulkan-git" && \ +# Build Final Binary +RUN cd /opt/ollama-vulkan && \ . scripts/env.sh && \ mkdir -p dist/bin && \ go build -trimpath -buildmode=pie -o dist/bin/ollama . - +# Final Image FROM --platform=linux/amd64 library/ubuntu:noble -RUN \ - apt-get update && \ - apt-get install -y ca-certificates libcap2 libvulkan1 && \ +RUN apt-get update && apt-get install -y ca-certificates libcap2 libvulkan1 && \ apt-get clean && rm -rf /var/lib/apt/lists/* -COPY --from=cpu-build /tmp/ollama-vulkan-git/dist/lib/ollama/ /lib/ollama/ -COPY --from=vulkan-build /tmp/ollama-vulkan-git/dist/lib/ollama/vulkan/ /lib/ollama/vulkan/ -COPY --from=binary-build /tmp/ollama-vulkan-git/dist/bin/ /bin/ -RUN find /lib/ollama && find /bin/ollama +# Copy Built Components +COPY --from=builder /opt/ollama-vulkan/dist/bin/ollama /bin/ollama +# Expose Ollama Server Port EXPOSE 11434 ENV OLLAMA_HOST 0.0.0.0 +# Run Ollama Server ENTRYPOINT ["/bin/ollama"] CMD ["serve"]