Dockerfile 11 KB
Newer Older
1
ARG GOLANG_VERSION=1.22.5
2
ARG CMAKE_VERSION=3.22.1
3
ARG CUDA_VERSION_11=11.3.1
Daniel Hiltgen's avatar
Daniel Hiltgen committed
4
ARG CUDA_V11_ARCHITECTURES="50;52;53;60;61;62;70;72;75;80;86"
5
ARG CUDA_VERSION_12=12.4.0
Daniel Hiltgen's avatar
Daniel Hiltgen committed
6
ARG CUDA_V12_ARCHITECTURES="60;61;62;70;72;75;80;86;87;89;90;90a"
Daniel Hiltgen's avatar
Daniel Hiltgen committed
7
ARG ROCM_VERSION=6.1.2
Michael Yang's avatar
Michael Yang committed
8

9
10
11
12
13
# 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
14

15
FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION_11-devel-centos7 AS cuda-11-build-amd64
16
17
18
ARG CMAKE_VERSION
COPY ./scripts/rh_linux_deps.sh /
RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
19
ENV PATH=/opt/rh/devtoolset-10/root/usr/bin:$PATH
20
21
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
22
ARG CGO_CFLAGS
Daniel Hiltgen's avatar
Daniel Hiltgen committed
23
ARG CUDA_V11_ARCHITECTURES
24
ENV GOARCH=amd64
25
RUN --mount=type=cache,target=/root/.ccache \
26
27
    OLLAMA_SKIP_STATIC_GENERATE=1 \
    OLLAMA_SKIP_CPU_GENERATE=1 \
Daniel Hiltgen's avatar
Daniel Hiltgen committed
28
    CMAKE_CUDA_ARCHITECTURES="${CUDA_V11_ARCHITECTURES}" \
29
30
    CUDA_VARIANT="_v11" \
    bash gen_linux.sh
31

32
33
34
35
FROM --platform=linux/amd64 nvidia/cuda:$CUDA_VERSION_12-devel-centos7 AS cuda-12-build-amd64
ARG CMAKE_VERSION
COPY ./scripts/rh_linux_deps.sh /
RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
36
ENV PATH=/opt/rh/devtoolset-10/root/usr/bin:$PATH
37
38
39
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
ARG CGO_CFLAGS
Daniel Hiltgen's avatar
Daniel Hiltgen committed
40
ARG CUDA_V12_ARCHITECTURES
41
ENV GOARCH=amd64
42
43
44
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 \
    OLLAMA_SKIP_CPU_GENERATE=1 \
Daniel Hiltgen's avatar
Daniel Hiltgen committed
45
    CMAKE_CUDA_ARCHITECTURES="${CUDA_V12_ARCHITECTURES}" \
46
    CUDA_VARIANT="_v12" \
Daniel Hiltgen's avatar
Daniel Hiltgen committed
47
    OLLAMA_CUSTOM_CUDA_DEFS="-DGGML_CUDA_USE_GRAPHS=on" \
48
49
    bash gen_linux.sh

50
FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION_11-devel-rockylinux8 AS cuda-11-build-runner-arm64
51
52
53
ARG CMAKE_VERSION
COPY ./scripts/rh_linux_deps.sh /
RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
54
ENV PATH=/opt/rh/gcc-toolset-10/root/usr/bin:$PATH
55
56
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
57
ARG CGO_CFLAGS
Daniel Hiltgen's avatar
Daniel Hiltgen committed
58
ARG CUDA_V11_ARCHITECTURES
59
ENV GOARCH=arm64
Daniel Hiltgen's avatar
Daniel Hiltgen committed
60
61
62
63
64
65
RUN OLLAMA_SKIP_STATIC_GENERATE=1 \
    OLLAMA_SKIP_CPU_GENERATE=1 \
    CMAKE_CUDA_ARCHITECTURES="${CUDA_V11_ARCHITECTURES}" \
    CUDA_VARIANT="_v11" \
    bash gen_linux.sh

66
FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION_12-devel-rockylinux8 AS cuda-12-build-runner-arm64
Daniel Hiltgen's avatar
Daniel Hiltgen committed
67
68
69
ARG CMAKE_VERSION
COPY ./scripts/rh_linux_deps.sh /
RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
70
ENV PATH=/opt/rh/gcc-toolset-10/root/usr/bin:$PATH
Daniel Hiltgen's avatar
Daniel Hiltgen committed
71
72
73
74
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
ARG CGO_CFLAGS
ARG CUDA_V12_ARCHITECTURES
75
ENV GOARCH=arm64
76
RUN --mount=type=cache,target=/root/.ccache \
Daniel Hiltgen's avatar
Daniel Hiltgen committed
77
78
79
80
81
82
    OLLAMA_SKIP_STATIC_GENERATE=1 \
    OLLAMA_SKIP_CPU_GENERATE=1 \
    CMAKE_CUDA_ARCHITECTURES="${CUDA_V12_ARCHITECTURES}" \
    CUDA_VARIANT="_v12" \
    OLLAMA_CUSTOM_CUDA_DEFS="-DGGML_CUDA_USE_GRAPHS=on" \
    bash gen_linux.sh
83

84

Daniel Hiltgen's avatar
Daniel Hiltgen committed
85
FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete AS rocm-build-amd64
86
87
88
ARG CMAKE_VERSION
COPY ./scripts/rh_linux_deps.sh /
RUN CMAKE_VERSION=${CMAKE_VERSION} sh /rh_linux_deps.sh
89
90
ENV PATH=/opt/rh/devtoolset-10/root/usr/bin:$PATH
ENV LIBRARY_PATH=/opt/amdgpu/lib64
91
92
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
93
94
ARG CGO_CFLAGS
ARG AMDGPU_TARGETS
95
ENV GOARCH=amd64
96
97
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_SKIP_CPU_GENERATE=1 bash gen_linux.sh
98
99
RUN mkdir -p ../../dist/linux-amd64-rocm/lib/ollama && \
    (cd /opt/rocm/lib && tar cf - rocblas/library) | (cd ../../dist/linux-amd64-rocm/lib/ollama && tar xf - )
100

101
FROM --platform=linux/amd64 centos:7 AS cpu-builder-amd64
102
103
104
105
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
106
ENV PATH=/opt/rh/devtoolset-10/root/usr/bin:$PATH
107
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
108
109
ARG OLLAMA_CUSTOM_CPU_DEFS
ARG CGO_CFLAGS
110
ENV GOARCH=amd64
111
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
112

113
FROM --platform=linux/amd64 cpu-builder-amd64 AS static-build-amd64
114
115
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_CPU_TARGET="static" bash gen_linux.sh
116
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu-build-amd64
117
118
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
119
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx-build-amd64
120
121
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx" bash gen_linux.sh
122
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx2-build-amd64
123
124
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx2" bash gen_linux.sh
125

126
FROM --platform=linux/arm64 rockylinux:8 AS cpu-builder-arm64
127
128
129
130
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
131
ENV PATH=/opt/rh/gcc-toolset-10/root/usr/bin:$PATH
132
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
133
134
ARG OLLAMA_CUSTOM_CPU_DEFS
ARG CGO_CFLAGS
135
ENV GOARCH=arm64
136
137
138
WORKDIR /go/src/github.com/ollama/ollama/llm/generate

FROM --platform=linux/arm64 cpu-builder-arm64 AS static-build-arm64
139
140
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_CPU_TARGET="static" bash gen_linux.sh
141
FROM --platform=linux/arm64 cpu-builder-arm64 AS cpu-build-arm64
142
143
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
144

145

146
# Intermediate stages used for ./scripts/build_linux.sh
147
FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
148
ENV CGO_ENABLED=1
149
WORKDIR /go/src/github.com/ollama/ollama
150
COPY . .
151
152
153
COPY --from=static-build-amd64 /go/src/github.com/ollama/ollama/llm/build/ llm/build/
COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
154
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
155
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
156
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
157
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
Daniel Hiltgen's avatar
Daniel Hiltgen committed
158
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
159
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
160
161
ARG GOFLAGS
ARG CGO_CFLAGS
162
RUN --mount=type=cache,target=/root/.ccache \
163
    go build -trimpath -o dist/linux-amd64/bin/ollama .
164
165
166
167
RUN cd dist/linux-$GOARCH && \
    tar --exclude runners -cf - . | pigz --best > ../ollama-linux-$GOARCH.tgz
RUN cd dist/linux-$GOARCH-rocm && \
    tar -cf - . | pigz --best > ../ollama-linux-$GOARCH-rocm.tgz
Michael Yang's avatar
Michael Yang committed
168

169
FROM --platform=linux/arm64 cpu-build-arm64 AS build-arm64
170
ENV CGO_ENABLED=1
171
ARG GOLANG_VERSION
172
WORKDIR /go/src/github.com/ollama/ollama
Jeffrey Morgan's avatar
Jeffrey Morgan committed
173
COPY . .
174
175
176
177
178
COPY --from=static-build-arm64 /go/src/github.com/ollama/ollama/llm/build/ llm/build/
COPY --from=cuda-11-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
COPY --from=cuda-11-build-runner-arm64 /go/src/github.com/ollama/ollama/build/ build/
COPY --from=cuda-12-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
COPY --from=cuda-12-build-runner-arm64 /go/src/github.com/ollama/ollama/build/ build/
179
180
ARG GOFLAGS
ARG CGO_CFLAGS
181
RUN --mount=type=cache,target=/root/.ccache \
182
    go build -trimpath -o dist/linux-arm64/bin/ollama .
183
184
RUN cd dist/linux-$GOARCH && \
    tar --exclude runners -cf - . | pigz --best > ../ollama-linux-$GOARCH.tgz
185

186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
FROM --platform=linux/amd64 scratch AS dist-amd64
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/ollama-linux-*.tgz /
FROM --platform=linux/arm64 scratch AS dist-arm64
COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/ollama-linux-*.tgz /
FROM dist-$TARGETARCH as dist


# Optimized container images do not cary nested payloads
FROM --platform=linux/amd64 static-build-amd64 AS container-build-amd64
WORKDIR /go/src/github.com/ollama/ollama
COPY . .
ARG GOFLAGS
ARG CGO_CFLAGS
RUN --mount=type=cache,target=/root/.ccache \
    go build -trimpath -o dist/linux-amd64/bin/ollama .

FROM --platform=linux/arm64 static-build-arm64 AS container-build-arm64
WORKDIR /go/src/github.com/ollama/ollama
COPY . .
ARG GOFLAGS
ARG CGO_CFLAGS
RUN --mount=type=cache,target=/root/.ccache \
    go build -trimpath -o dist/linux-arm64/bin/ollama .
Jeffrey Morgan's avatar
Jeffrey Morgan committed
209

210
FROM --platform=linux/amd64 ubuntu:22.04 AS runtime-amd64
211
212
RUN apt-get update && \
    apt-get install -y ca-certificates && \
R0CKSTAR's avatar
R0CKSTAR committed
213
    apt-get clean && rm -rf /var/lib/apt/lists/*
214
215
216
217
218
219
COPY --from=container-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
COPY --from=cpu-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
220

221
FROM --platform=linux/arm64 ubuntu:22.04 AS runtime-arm64
222
223
RUN apt-get update && \
    apt-get install -y ca-certificates && \
R0CKSTAR's avatar
R0CKSTAR committed
224
    apt-get clean && rm -rf /var/lib/apt/lists/*
225
226
227
228
COPY --from=container-build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/bin/ /bin/
COPY --from=cpu-build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
COPY --from=cuda-11-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
COPY --from=cuda-12-build-runner-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
229

230
231
232
233
234
235
236
237
238
239
240
241
242
# ROCm libraries larger so we keep it distinct from the CPU/CUDA image
FROM --platform=linux/amd64 ubuntu:22.04 AS runtime-rocm
# Frontload the rocm libraries which are large, and rarely change to increase chance of a common layer
# across releases
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64-rocm/lib/ /lib/
RUN apt-get update && \
    apt-get install -y ca-certificates && \
    apt-get clean && rm -rf /var/lib/apt/lists/*
COPY --from=container-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
COPY --from=cpu-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=cpu_avx-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=cpu_avx2-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /lib/
243
EXPOSE 11434
244
ENV OLLAMA_HOST=0.0.0.0
245
246
247
248

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

249
FROM runtime-$TARGETARCH
250
EXPOSE 11434
251
ENV OLLAMA_HOST=0.0.0.0
252
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
253
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
254
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
255
ENV NVIDIA_VISIBLE_DEVICES=all
256

Jeffrey Morgan's avatar
Jeffrey Morgan committed
257
ENTRYPOINT ["/bin/ollama"]
Jeffrey Morgan's avatar
Jeffrey Morgan committed
258
CMD ["serve"]