diff --git a/ai/ollama/Dockerfile b/ai/ollama/Dockerfile index 88cc8b3..4b92e82 100644 --- a/ai/ollama/Dockerfile +++ b/ai/ollama/Dockerfile @@ -1,50 +1,74 @@ # ollama-gfx906/Dockerfile # # Custom ollama image with ROCm 6.1 + gfx906 (MI50) support. -# The default ollama/rocm image ships ROCm 7.2 which dropped gfx906 support. -# This builds ollama and its llama.cpp runner from source, targeting gfx906. +# The official ollama/rocm image ships ROCm 7.2 which dropped gfx906. +# This uses v0.23.2's native CMake build system with AMDGPU_TARGETS including gfx906. # -# Build: docker build -t ollama/ollama:rocm-gfx906 ./ai/ollama +# Build: docker build -t ollama/ollama:rocm-gfx906 ai/ollama FROM rocm/dev-ubuntu-22.04:6.1.2-complete AS builder +# Build dependencies (CMake, Ninja, Go) +ARG CMAKEVERSION=3.31.2 +ARG NINJAVERSION=1.12.1 +ARG GOLANG_VERSION=1.22.0 + RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ - git golang-go cmake build-essential pkg-config \ + curl git ccache build-essential pkg-config \ && rm -rf /var/lib/apt/lists/* +# Install CMake from official binaries +RUN curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-x86_64.tar.gz \ + | tar xz -C /usr/local --strip-components 1 + +# Install Ninja +RUN curl -fsSL -o /tmp/ninja.zip \ + https://github.com/ninja-build/ninja/releases/download/v${NINJAVERSION}/ninja-linux.zip \ + && unzip /tmp/ninja.zip -d /usr/local/bin && rm /tmp/ninja.zip + +# Install Go +RUN curl -fsSL https://go.dev/dl/go${GOLANG_VERSION}.linux-amd64.tar.gz \ + | tar xz -C /usr/local +ENV PATH=/usr/local/go/bin:$PATH + ARG OLLAMA_VERSION=v0.23.2 RUN git clone --depth 1 --branch ${OLLAMA_VERSION} https://github.com/ollama/ollama.git /build WORKDIR /build +# ROCm paths from the base image ENV HIP_PATH=/opt/rocm ENV ROCM_PATH=/opt/rocm -ENV PATH=/opt/rocm/bin:/opt/rocm/hip/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -RUN cd llama.cpp && \ - mkdir -p build && cd build && \ +ENV PATH=/opt/rocm/bin:/opt/rocm/hip/bin:/opt/rocm/hcc/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV CMAKE_GENERATOR=Ninja +ENV LDFLAGS=-s + +# Build with ROCm 6 preset + gfx906 target +RUN mkdir -p build && cd build && \ cmake .. \ - -DLLAMA_HIPBLAS=ON \ - -DCMAKE_C_COMPILER=clang \ - -DCMAKE_CXX_COMPILER=clang++ \ - -DAMDGPU_TARGETS=gfx906 \ - -DCMAKE_BUILD_TYPE=Release \ - -DLLAMA_NATIVE=OFF \ - -DLLAMA_BUILD_TESTS=OFF \ - -DLLAMA_BUILD_EXAMPLES=OFF \ - -DLLAMA_BUILD_SERVER=OFF && \ - cmake --build . --config Release -j$(nproc) && \ - cmake --install . --prefix /build/dist + --preset 'ROCm 6' \ + -DAMDGPU_TARGETS="gfx906:xnack-;gfx940;gfx1010;gfx1030;gfx1100;gfx1200" \ + -DCMAKE_BUILD_TYPE=Release && \ + cmake --build . -- -l $(nproc) && \ + cmake --install . --component HIP --strip --prefix /build/dist -ENV CGO_ENABLED=0 -RUN go build -trimpath -o dist/ollama . +# Build the Go binary +ENV CGO_ENABLED=1 +ENV CC=clang +ENV CXX=clang++ +RUN go build -trimpath -o /build/dist/ollama . -FROM ubuntu:22.04 +# ---------- Runtime image ---------- +FROM ubuntu:24.04 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ - ca-certificates curl libstdc++6 libgomp1 \ + ca-certificates curl libstdc++6 libgomp1 libvulkan1 libopenblas0 \ && rm -rf /var/lib/apt/lists/* +# Copy ROCm 6.1 runtime libraries COPY --from=builder /opt/rocm/lib/ /opt/rocm/lib/ COPY --from=builder /opt/rocm/share/ /opt/rocm/share/ + +# Copy ollama binary and backend COPY --from=builder /build/dist/ollama /usr/bin/ollama COPY --from=builder /build/dist/lib/ /usr/lib/ollama/