# ollama-gfx906/Dockerfile # # Custom ollama image with ROCm 6.1 + gfx906 (MI50) support. # 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 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 \ curl git ccache build-essential pkg-config unzip \ && 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 ENV HIP_PATH=/opt/rocm ENV ROCM_PATH=/opt/rocm ENV CMAKE_GENERATOR=Ninja ENV LDFLAGS=-s # Step 1: Build CPU backends with GCC (no ROCm preset) # Remove /opt/rocm from PATH to prevent check_language(HIP) from # finding a HIP compiler, which would trigger the HIP block that # requires find_package(hip) with proper CMAKE_PREFIX_PATH. RUN mkdir -p build-cpu && cd build-cpu && \ PATH=/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ cmake .. -DCMAKE_BUILD_TYPE=Release && \ cmake --build . --target ggml-cpu -- -l $(nproc) && \ cmake --install . --component CPU --strip --prefix /build/dist # Step 2: Build HIP backend with ROCm preset + gfx906 target only # The ROCm 6 preset enables HIP language detection (enable_language(HIP)) # which ensures GPU kernels are properly compiled for gfx906. # OLLAMA_RUNNER_DIR=rocm from the preset, so HIP goes to lib/ollama/rocm/ # Need CMAKE_PREFIX_PATH so find_package(hip) finds hip-config.cmake # at /opt/rocm/lib/cmake/hip/hip-config.cmake. RUN mkdir -p build-hip && cd build-hip && \ cmake .. \ --preset 'ROCm 6' \ -DAMDGPU_TARGETS="gfx906:xnack-" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH="/opt/rocm" && \ cmake --build . --target ggml-hip -- -l $(nproc) && \ cmake --install . --component HIP --strip --prefix /build/dist && \ echo "=== HIP install ===" && \ find /build/dist/lib/ollama -type f -o -type l | head -20 # Step 3: Build Go binary (GCC for CGo linking) ENV CGO_ENABLED=1 RUN go build -trimpath -o /build/dist/ollama . # ---------- Runtime image ---------- FROM ubuntu:24.04 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ ca-certificates curl libstdc++6 libgomp1 libvulkan1 libopenblas0 \ && rm -rf /var/lib/apt/lists/* # Copy ROCm 6.1 runtime libraries # These are needed at runtime by ggml-hip via LD_LIBRARY_PATH COPY --from=builder /opt/rocm/lib/ /opt/rocm/lib/ COPY --from=builder /opt/rocm/share/ /opt/rocm/share/ # Copy ollama binary + all backends (CPU + HIP) COPY --from=builder /build/dist/ollama /usr/bin/ollama COPY --from=builder /build/dist/lib/ /usr/lib/ollama/ RUN ldconfig ENV LD_LIBRARY_PATH=/opt/rocm/lib:/usr/lib/ollama/rocm:/usr/lib/ollama ENV HSA_OVERRIDE_GFX_VERSION=9.0.6 ENV HCC_AMDGPU_TARGET=gfx906 ENV HSA_ENABLE_SDMA=0 EXPOSE 11434 ENTRYPOINT ["/bin/ollama"] CMD ["serve"]