Dockerfile 9.18 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
19
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
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
R0CKSTAR's avatar
R0CKSTAR committed
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
36
37
38
39
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
ENV PATH /opt/rh/devtoolset-10/root/usr/bin:$PATH
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
R0CKSTAR's avatar
R0CKSTAR committed
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
50
    bash gen_linux.sh

FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION_11-devel-rockylinux8 AS cuda-11-build-server-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
R0CKSTAR's avatar
R0CKSTAR committed
59
ENV GOARCH arm64
Daniel Hiltgen's avatar
Daniel Hiltgen committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
RUN OLLAMA_SKIP_STATIC_GENERATE=1 \
    OLLAMA_SKIP_CPU_GENERATE=1 \
    CMAKE_CUDA_ARCHITECTURES="${CUDA_V11_ARCHITECTURES}" \
    CUDA_VARIANT="_v11" \
    bash gen_linux.sh

FROM --platform=linux/arm64 nvidia/cuda:$CUDA_VERSION_12-devel-rockylinux8 AS cuda-12-build-server-arm64
ARG CMAKE_VERSION
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/ollama/ollama/
WORKDIR /go/src/github.com/ollama/ollama/llm/generate
ARG CGO_CFLAGS
ARG CUDA_V12_ARCHITECTURES
R0CKSTAR's avatar
R0CKSTAR committed
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
89
90
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
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
R0CKSTAR's avatar
R0CKSTAR committed
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
106
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
107
COPY --from=llm-code / /go/src/github.com/ollama/ollama/
108
109
ARG OLLAMA_CUSTOM_CPU_DEFS
ARG CGO_CFLAGS
R0CKSTAR's avatar
R0CKSTAR committed
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
Daniel Hiltgen's avatar
Daniel Hiltgen committed
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
147
148
# Intermediate stage used for ./scripts/build_linux.sh
FROM --platform=linux/amd64 cpu-build-amd64 AS build-amd64
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/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/
154
155
156
157
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
COPY --from=cuda-11-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/dist/ dist/
COPY --from=cuda-12-build-amd64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
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/llm/build/linux/ llm/build/linux/
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 .
Michael Yang's avatar
Michael Yang committed
164

165
166
167
168
# 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
169
WORKDIR /go/src/github.com/ollama/ollama
Jeffrey Morgan's avatar
Jeffrey Morgan committed
170
COPY . .
171
COPY --from=static-build-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
172
173
COPY --from=cuda-11-build-server-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
COPY --from=cuda-11-build-server-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
Daniel Hiltgen's avatar
Daniel Hiltgen committed
174
175
COPY --from=cuda-12-build-server-arm64 /go/src/github.com/ollama/ollama/dist/ dist/
COPY --from=cuda-12-build-server-arm64 /go/src/github.com/ollama/ollama/llm/build/linux/ llm/build/linux/
176
177
ARG GOFLAGS
ARG CGO_CFLAGS
178
RUN --mount=type=cache,target=/root/.ccache \
179
180
181
182
183
    go build -trimpath -o dist/linux-arm64/bin/ollama .

# Strip out ROCm dependencies to keep the primary image lean
FROM --platform=linux/amd64 ubuntu:22.04 as amd64-libs-without-rocm
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/lib/ /scratch/
R0CKSTAR's avatar
R0CKSTAR committed
184
RUN cd /scratch/ollama/ && rm -rf rocblas libamd* libdrm* libroc* libhip* libhsa*
Jeffrey Morgan's avatar
Jeffrey Morgan committed
185

186
# Runtime stages
Daniel Hiltgen's avatar
Daniel Hiltgen committed
187
FROM --platform=linux/amd64 ubuntu:22.04 as runtime-amd64
188
COPY --from=amd64-libs-without-rocm /scratch/ /lib/
R0CKSTAR's avatar
R0CKSTAR committed
189
190
RUN apt-get update && apt-get install -y ca-certificates && \
    apt-get clean && rm -rf /var/lib/apt/lists/*
191
192
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/

193
FROM --platform=linux/arm64 ubuntu:22.04 as runtime-arm64
194
COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/lib/ /lib/
R0CKSTAR's avatar
R0CKSTAR committed
195
196
RUN apt-get update && apt-get install -y ca-certificates && \
    apt-get clean && rm -rf /var/lib/apt/lists/*
197
COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/bin/ /bin/
198

199
# Radeon images are much larger so we keep it distinct from the CPU/CUDA image
Daniel Hiltgen's avatar
Daniel Hiltgen committed
200
FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete as runtime-rocm
201
RUN update-pciids
202
203
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/bin/ /bin/
RUN ln -s /opt/rocm/lib /lib/ollama
204
205
206
207
208
209
EXPOSE 11434
ENV OLLAMA_HOST 0.0.0.0

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

210
FROM runtime-$TARGETARCH
211
212
EXPOSE 11434
ENV OLLAMA_HOST 0.0.0.0
213
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
214
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
215
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
216
ENV NVIDIA_VISIBLE_DEVICES=all
217

Jeffrey Morgan's avatar
Jeffrey Morgan committed
218
ENTRYPOINT ["/bin/ollama"]
Jeffrey Morgan's avatar
Jeffrey Morgan committed
219
CMD ["serve"]