Dockerfile 8.63 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
Daniel Hiltgen's avatar
Daniel Hiltgen 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
41
42
43
44
ENV GOARCH amd64 
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
ARG CUDA_V11_ARCHITECTURES
ENV GOARCH arm64 
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
Daniel Hiltgen's avatar
Daniel Hiltgen 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
Daniel Hiltgen's avatar
Daniel Hiltgen 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
Daniel Hiltgen's avatar
Daniel Hiltgen committed
98
99
RUN mkdir -p ../../dist/linux-amd64/ollama_libs && \
    (cd /opt/rocm/lib && tar cf - rocblas/library) | (cd ../../dist/linux-amd64/ollama_libs && 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
Daniel Hiltgen's avatar
Daniel Hiltgen 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
163
RUN --mount=type=cache,target=/root/.ccache \
    go build -trimpath -o dist/linux-amd64/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
179
RUN --mount=type=cache,target=/root/.ccache \
    go build -trimpath -o dist/linux-arm64/ollama .
Jeffrey Morgan's avatar
Jeffrey Morgan committed
180

181
# Runtime stages
Daniel Hiltgen's avatar
Daniel Hiltgen committed
182
183
FROM --platform=linux/amd64 ubuntu:22.04 as runtime-amd64
RUN apt-get update && apt-get install -y ca-certificates
Daniel Hiltgen's avatar
Daniel Hiltgen committed
184
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/ollama /bin/ollama
185
FROM --platform=linux/arm64 ubuntu:22.04 as runtime-arm64
Michael Yang's avatar
Michael Yang committed
186
RUN apt-get update && apt-get install -y ca-certificates
Daniel Hiltgen's avatar
Daniel Hiltgen committed
187
COPY --from=build-arm64 /go/src/github.com/ollama/ollama/dist/linux-arm64/ollama /bin/ollama
188

189
# Radeon images are much larger so we keep it distinct from the CPU/CUDA image
Daniel Hiltgen's avatar
Daniel Hiltgen committed
190
FROM --platform=linux/amd64 rocm/dev-centos-7:${ROCM_VERSION}-complete as runtime-rocm
191
RUN update-pciids
Daniel Hiltgen's avatar
Daniel Hiltgen committed
192
COPY --from=build-amd64 /go/src/github.com/ollama/ollama/dist/linux-amd64/ollama /bin/ollama
193
194
195
196
197
198
EXPOSE 11434
ENV OLLAMA_HOST 0.0.0.0

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

199
FROM runtime-$TARGETARCH
200
201
EXPOSE 11434
ENV OLLAMA_HOST 0.0.0.0
202
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
203
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
204
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
205
ENV NVIDIA_VISIBLE_DEVICES=all
206

Jeffrey Morgan's avatar
Jeffrey Morgan committed
207
ENTRYPOINT ["/bin/ollama"]
Jeffrey Morgan's avatar
Jeffrey Morgan committed
208
CMD ["serve"]