Dockerfile 10.6 KB
Newer Older
1
ARG GOLANG_VERSION=1.22.8
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 cpu-build-amd64
114
115
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
116
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx-build-amd64
117
118
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx" bash gen_linux.sh
119
FROM --platform=linux/amd64 cpu-builder-amd64 AS cpu_avx2-build-amd64
120
121
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu_avx2" bash gen_linux.sh
122

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

FROM --platform=linux/arm64 cpu-builder-arm64 AS cpu-build-arm64
136
137
RUN --mount=type=cache,target=/root/.ccache \
    OLLAMA_SKIP_STATIC_GENERATE=1 OLLAMA_CPU_TARGET="cpu" bash gen_linux.sh
138

139

140
# Intermediate stages used for ./scripts/build_linux.sh
141
FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
142
ENV CGO_ENABLED=1
143
WORKDIR /go/src/github.com/ollama/ollama
144
COPY . .
145
146
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/
147
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
148
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
149
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
150
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
Daniel Hiltgen's avatar
Daniel Hiltgen committed
151
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
152
COPY --from=rocm-build-amd64 /go/src/github.com/ollama/ollama/build/ build/
153
154
ARG GOFLAGS
ARG CGO_CFLAGS
155
RUN --mount=type=cache,target=/root/.ccache \
156
    go build -trimpath -o dist/linux-amd64/bin/ollama .
157
158
159
160
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
161

162
FROM --platform=linux/arm64 cpu-build-arm64 AS build-arm64
163
ENV CGO_ENABLED=1
164
ARG GOLANG_VERSION
165
WORKDIR /go/src/github.com/ollama/ollama
Jeffrey Morgan's avatar
Jeffrey Morgan committed
166
COPY . .
167
168
169
170
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/
171
172
ARG GOFLAGS
ARG CGO_CFLAGS
173
RUN --mount=type=cache,target=/root/.ccache \
174
    go build -trimpath -o dist/linux-arm64/bin/ollama .
175
176
RUN cd dist/linux-$GOARCH && \
    tar --exclude runners -cf - . | pigz --best > ../ollama-linux-$GOARCH.tgz
177

178
179
180
181
182
183
184
185
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
186
FROM --platform=linux/amd64 cpu-builder-amd64 AS container-build-amd64
187
188
189
190
191
192
193
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 .

194
FROM --platform=linux/arm64 cpu-builder-arm64 AS container-build-arm64
195
196
197
198
199
200
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
201

202
FROM --platform=linux/amd64 ubuntu:22.04 AS runtime-amd64
203
204
RUN apt-get update && \
    apt-get install -y ca-certificates && \
R0CKSTAR's avatar
R0CKSTAR committed
205
    apt-get clean && rm -rf /var/lib/apt/lists/*
206
207
208
209
210
211
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/
212

213
FROM --platform=linux/arm64 ubuntu:22.04 AS runtime-arm64
214
215
RUN apt-get update && \
    apt-get install -y ca-certificates && \
R0CKSTAR's avatar
R0CKSTAR committed
216
    apt-get clean && rm -rf /var/lib/apt/lists/*
217
218
219
220
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/
221

222
223
224
225
226
227
228
229
230
231
232
233
234
# 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/
235
EXPOSE 11434
236
ENV OLLAMA_HOST=0.0.0.0
237
238
239
240

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

241
FROM runtime-$TARGETARCH
242
EXPOSE 11434
243
ENV OLLAMA_HOST=0.0.0.0
244
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
245
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
246
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
247
ENV NVIDIA_VISIBLE_DEVICES=all
248

Jeffrey Morgan's avatar
Jeffrey Morgan committed
249
ENTRYPOINT ["/bin/ollama"]
Jeffrey Morgan's avatar
Jeffrey Morgan committed
250
CMD ["serve"]