From da72235ebf552edc95ad229d1cc12e3c287c43c6 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Sun, 21 Jan 2024 11:37:11 -0800 Subject: [PATCH] Combine the 2 Dockerfiles and add ROCm This renames Dockerfile.build to Dockerfile, and adds some new stages to support 2 modes of building - the build_linux.sh script uses intermediate stages to extract the artifacts for ./dist, and the default build generates a container image usable by both cuda and rocm cards. This required transitioniing the x86 base to the rocm image to avoid layer bloat. --- Dockerfile | 120 +++++++++++++++++++++++++++++++++++------ Dockerfile.build | 99 ---------------------------------- scripts/build_linux.sh | 10 +++- 3 files changed, 112 insertions(+), 117 deletions(-) delete mode 100644 Dockerfile.build diff --git a/Dockerfile b/Dockerfile index c50665b6..8e8b6d2a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,114 @@ -FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 +ARG GOLANG_VERSION=1.21.3 +ARG CMAKE_VERSION=3.22.1 +ARG CUDA_VERSION=11.3.1 -ARG TARGETARCH -ARG GOFLAGS="'-ldflags=-w -s'" +# Copy the minimal context we need to run the generate scripts +FROM scratch AS llm-code +COPY .git .git +COPY .gitmodules .gitmodules +COPY llm llm +FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION-devel-centos7 AS cuda-build-amd64 +ARG CMAKE_VERSION +ARG CGO_CFLAGS +COPY ./scripts/rh_linux_deps.sh / +RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh +ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH +COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/ +WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate +RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh + +FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION-devel-rockylinux8 AS cuda-build-arm64 +ARG CMAKE_VERSION +ARG CGO_CFLAGS +COPY ./scripts/rh_linux_deps.sh / +RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh +ENV PATH /opt/rh/gcc-toolset-10/root/usr/bin:$PATH +COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/ +WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate +RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh + +FROM --platform=linux/amd64 rocm/dev-centos-7:5.7.1-complete AS rocm-5-build-amd64 +ARG CMAKE_VERSION +ARG CGO_CFLAGS +COPY ./scripts/rh_linux_deps.sh / +RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh +ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH +ENV LIBRARY_PATH /opt/amdgpu/lib64 +COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/ +WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate +RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh + +FROM --platform=linux/amd64 rocm/dev-centos-7:6.0-complete AS rocm-6-build-amd64 +ARG CMAKE_VERSION +ARG CGO_CFLAGS +COPY ./scripts/rh_linux_deps.sh / +RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh +ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH +ENV LIBRARY_PATH /opt/amdgpu/lib64 +COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/ +WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate +RUN OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh + +FROM --platform=linux/amd64 centos:7 AS cpu-build-amd64 +ARG CMAKE_VERSION +ARG GOLANG_VERSION +ARG OLLAMA_CUSTOM_CPU_DEFS +ARG CGO_CFLAGS +COPY ./scripts/rh_linux_deps.sh / +RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh +ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH +COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/ +WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate +RUN sh gen_linux.sh + +FROM --platform=linux/arm64 centos:7 AS cpu-build-arm64 +ARG CMAKE_VERSION +ARG GOLANG_VERSION +ARG OLLAMA_CUSTOM_CPU_DEFS +ARG CGO_CFLAGS +COPY ./scripts/rh_linux_deps.sh / +RUN CMAKE_VERSION=${CMAKE_VERSION} GOLANG_VERSION=${GOLANG_VERSION} sh /rh_linux_deps.sh +ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH +COPY --from=llm-code / /go/src/github.com/jmorganca/ollama/ +WORKDIR /go/src/github.com/jmorganca/ollama/llm/generate +RUN sh gen_linux.sh + +# Intermediate stage used for ./scripts/build_linux.sh +FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64 +ENV CGO_ENABLED 1 +ARG GOFLAGS +ARG CGO_CFLAGS WORKDIR /go/src/github.com/jmorganca/ollama -RUN apt-get update && apt-get install -y git build-essential cmake -ADD https://dl.google.com/go/go1.21.3.linux-$TARGETARCH.tar.gz /tmp/go1.21.3.tar.gz -RUN mkdir -p /usr/local && tar xz -C /usr/local