Dockerfile 6.01 KB
Newer Older
1
ARG GOLANG_VERSION=1.22.1
2
ARG CMAKE_VERSION=3.22.1
3
# this CUDA_VERSION corresponds with the one specified in docs/gpu.md
4
ARG CUDA_VERSION=11.3.1
5
ARG ROCM_VERSION=6.0.2
Michael Yang's avatar
Michael Yang committed
6

7
8
9
10
11
# 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
Michael Yang's avatar
Michael Yang committed
12

13
14
15
16
17
FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION-devel-centos7 AS cuda-build-amd64
ARG CMAKE_VERSION
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
18
19
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
20
ARG CGO_CFLAGS
21
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh
22

23
FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION-devel-rockylinux8 AS cuda-build-arm64
24
25
26
ARG CMAKE_VERSION
COPY ./scripts/rh_linux_deps.sh /
RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
27
ENV PATH /opt/rh/gcc-toolset-10/root/usr/bin:$PATH
28
29
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
30
ARG CGO_CFLAGS
31
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh
32

Daniel Hiltgen's avatar
Daniel Hiltgen committed
33
FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete AS rocm-build-amd64
34
35
36
37
38
ARG CMAKE_VERSION
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
39
40
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
41
42
ARG CGO_CFLAGS
ARG AMDGPU_TARGETS
43
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_SKIP_CPU_GENERATE=1 sh gen_linux.sh
Daniel Hiltgen's avatar
Daniel Hiltgen committed
44
RUN mkdir /tmp/scratch && \
45
    for dep in $(zcat /go/src/github.com/ollama/ollama/llm/build/linux/x86_64/rocm*/bin/deps.txt.gz) ; do \
Daniel Hiltgen's avatar
Daniel Hiltgen committed
46
47
48
        cp ${dep} /tmp/scratch/ || exit 1 ; \
    done && \
    (cd /opt/rocm/lib && tar cf - rocblas/library) | (cd /tmp/scratch/ && tar xf - ) && \
49
50
    mkdir -p /go/src/github.com/ollama/ollama/dist/deps/ && \
    (cd /tmp/scratch/ && tar czvf /go/src/github.com/ollama/ollama/dist/deps/ollama-linux-amd64-rocm.tgz . )
51
52


53
FROM --platform=linux/amd64 centos:7 AS cpu-builder-amd64
54
55
56
57
58
ARG CMAKE_VERSION
ARG GOLANG_VERSION
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
59
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
60
61
ARG OLLAMA_CUSTOM_CPU_DEFS
ARG CGO_CFLAGS
62
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
63

64
65
FROM --platform=linux/amd64 cpu-builder-amd64 AS static-build-amd64
RUN OLLAMA_CPU_TARGET="static" sh gen_linux.sh
66
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu-build-amd64
67
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" sh gen_linux.sh
68
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx-build-amd64
69
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx" sh gen_linux.sh
70
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx2-build-amd64
71
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx2" sh gen_linux.sh
72

73
FROM --platform=linux/arm64 centos:7 AS cpu-builder-arm64
74
75
76
77
78
ARG CMAKE_VERSION
ARG GOLANG_VERSION
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
79
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
80
81
ARG OLLAMA_CUSTOM_CPU_DEFS
ARG CGO_CFLAGS
82
83
84
85
86
WORKDIR /go/src/github.com/ollama/ollama/llm/generate

FROM --platform=linux/arm64 cpu-builder-arm64 AS static-build-arm64
RUN OLLAMA_CPU_TARGET="static" sh gen_linux.sh
FROM --platform=linux/arm64 cpu-builder-arm64 AS cpu-build-arm64
87
RUN OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" sh gen_linux.sh
88

89

90
91
92
# Intermediate stage used for ./scripts/build_linux.sh
FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
ENV CGO_ENABLED 1
93
WORKDIR /go/src/github.com/ollama/ollama
94
COPY . .
95
96
97
98
99
COPY --from=static-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
COPY --from=cuda-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
100
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/deps/ ./dist/deps/
101
102
ARG GOFLAGS
ARG CGO_CFLAGS
103
RUN go build -trimpath .
Michael Yang's avatar
Michael Yang committed
104

105
106
107
108
# Intermediate stage used for ./scripts/build_linux.sh
FROM --platform=linux/arm64 cpu-build-arm64 AS build-arm64
ENV CGO_ENABLED 1
ARG GOLANG_VERSION
109
WORKDIR /go/src/github.com/ollama/ollama
Jeffrey Morgan's avatar
Jeffrey Morgan committed
110
COPY . .
111
112
COPY --from=static-build-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
COPY --from=cuda-build-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
113
114
ARG GOFLAGS
ARG CGO_CFLAGS
115
RUN go build -trimpath .
Jeffrey Morgan's avatar
Jeffrey Morgan committed
116

117
# Runtime stages
Daniel Hiltgen's avatar
Daniel Hiltgen committed
118
119
FROM --platform=linux/amd64 ubuntu:22.04 as runtime-amd64
RUN apt-get update && apt-get install -y ca-certificates
120
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/ollama /bin/ollama
121
FROM --platform=linux/arm64 ubuntu:22.04 as runtime-arm64
Michael Yang's avatar
Michael Yang committed
122
RUN apt-get update && apt-get install -y ca-certificates
123
COPY --from=build-arm64 /go/src/github.com/ollama/ollama/ollama /bin/ollama
124

125
# Radeon images are much larger so we keep it distinct from the CPU/CUDA image
Daniel Hiltgen's avatar
Daniel Hiltgen committed
126
FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete as runtime-rocm
127
RUN update-pciids
128
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/ollama /bin/ollama
129
130
131
132
133
134
EXPOSE 11434
ENV OLLAMA_HOST 0.0.0.0

ENTRYPOINT ["/bin/ollama"]
CMD ["serve"]

135
FROM runtime-$TARGETARCH
136
137
EXPOSE 11434
ENV OLLAMA_HOST 0.0.0.0
138
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
139
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
140
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
141
ENV NVIDIA_VISIBLE_DEVICES=all
142

Jeffrey Morgan's avatar
Jeffrey Morgan committed
143
ENTRYPOINT ["/bin/ollama"]
Jeffrey Morgan's avatar
Jeffrey Morgan committed
144
CMD ["serve"]