"scripts/build.sh" did not exist on "b0135f4b9b176eab9155b660d04c9ca2a1ec2341"
Dockerfile 6.19 KB
Newer Older
Michael Yang's avatar
Michael Yang committed
1
2
3
4
# vim: filetype=dockerfile

ARG FLAVOR=${TARGETARCH}

5
ARG ROCMVERSION=6.3.3
Michael Yang's avatar
Michael Yang committed
6
ARG JETPACK5VERSION=r35.4.1
7
ARG JETPACK6VERSION=r36.4.0
Michael Yang's avatar
Michael Yang committed
8
9
ARG CMAKEVERSION=3.31.2

Daniel Hiltgen's avatar
Daniel Hiltgen committed
10
# We require gcc v10 minimum.  v10.3 has regressions, so the rockylinux 8.5 AppStream has the latest compatible version
11
FROM --platform=linux/amd64 rocm/dev-almalinux-8:${ROCMVERSION}-complete AS base-amd64
12
RUN yum install -y yum-utils \
13
14
15
    && yum-config-manager --add-repo https://dl.rockylinux.org/vault/rocky/8.5/AppStream/\$basearch/os/ \
    && rpm --import https://dl.rockylinux.org/pub/rocky/RPM-GPG-KEY-Rocky-8 \
    && dnf install -y yum-utils ccache gcc-toolset-10-gcc-10.2.1-8.2.el8 gcc-toolset-10-gcc-c++-10.2.1-8.2.el8 gcc-toolset-10-binutils-2.35-11.el8 \
Daniel Hiltgen's avatar
Daniel Hiltgen committed
16
    && dnf install -y ccache \
17
    && yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
18
ENV PATH=/opt/rh/gcc-toolset-10/root/usr/bin:$PATH
19
20

FROM --platform=linux/arm64 almalinux:8 AS base-arm64
Michael Yang's avatar
Michael Yang committed
21
22
# install epel-release for ccache
RUN yum install -y yum-utils epel-release \
23
    && dnf install -y clang ccache \
Michael Yang's avatar
Michael Yang committed
24
25
26
27
28
29
30
31
32
33
34
    && yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/sbsa/cuda-rhel8.repo
ENV CC=clang CXX=clang++

FROM base-${TARGETARCH} AS base
ARG CMAKEVERSION
RUN curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
COPY CMakeLists.txt CMakePresets.json .
COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
ENV LDFLAGS=-s

FROM base AS cpu
35
36
RUN dnf install -y gcc-toolset-11-gcc gcc-toolset-11-gcc-c++
ENV PATH=/opt/rh/gcc-toolset-11/root/usr/bin:$PATH
37
RUN --mount=type=cache,target=/root/.ccache \
Michael Yang's avatar
Michael Yang committed
38
39
40
41
    cmake --preset 'CPU' \
        && cmake --build --parallel --preset 'CPU' \
        && cmake --install build --component CPU --strip --parallel 8

42
43
44
45
46
47
48
49
50
FROM base AS cuda-11
ARG CUDA11VERSION=11.8
RUN dnf install -y cuda-toolkit-${CUDA11VERSION//./-}
ENV PATH=/usr/local/cuda-11/bin:$PATH
RUN --mount=type=cache,target=/root/.ccache \
    cmake --preset 'CUDA 11' -DOLLAMA_RUNNER_DIR="cuda_v11" \
        && cmake --build --parallel --preset 'CUDA 11' \
        && cmake --install build --component CUDA --strip --parallel 8

Michael Yang's avatar
Michael Yang committed
51
FROM base AS cuda-12
52
53
ARG CUDA12VERSION=12.8
RUN dnf install -y cuda-toolkit-${CUDA12VERSION//./-}
Michael Yang's avatar
Michael Yang committed
54
ENV PATH=/usr/local/cuda-12/bin:$PATH
55
RUN --mount=type=cache,target=/root/.ccache \
56
    cmake --preset 'CUDA 12' -DOLLAMA_RUNNER_DIR="cuda_v12"\
Michael Yang's avatar
Michael Yang committed
57
58
        && cmake --build --parallel --preset 'CUDA 12' \
        && cmake --install build --component CUDA --strip --parallel 8
59

60
61
62
63
64
65
66
67
68
69
70

FROM base AS cuda-13
ARG CUDA13VERSION=13.0
RUN dnf install -y cuda-toolkit-${CUDA13VERSION//./-}
ENV PATH=/usr/local/cuda-13/bin:$PATH
RUN --mount=type=cache,target=/root/.ccache \
    cmake --preset 'CUDA 13' -DOLLAMA_RUNNER_DIR="cuda_v13" \
        && cmake --build --parallel --preset 'CUDA 13' \
        && cmake --install build --component CUDA --strip --parallel 8


Michael Yang's avatar
Michael Yang committed
71
FROM base AS rocm-6
72
ENV PATH=/opt/rocm/hcc/bin:/opt/rocm/hip/bin:/opt/rocm/bin:/opt/rocm/hcc/bin:$PATH
73
RUN --mount=type=cache,target=/root/.ccache \
Michael Yang's avatar
Michael Yang committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
    cmake --preset 'ROCm 6' \
        && cmake --build --parallel --preset 'ROCm 6' \
        && cmake --install build --component HIP --strip --parallel 8

FROM --platform=linux/arm64 nvcr.io/nvidia/l4t-jetpack:${JETPACK5VERSION} AS jetpack-5
ARG CMAKEVERSION
RUN apt-get update && apt-get install -y curl ccache \
    && curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
COPY CMakeLists.txt CMakePresets.json .
COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
RUN --mount=type=cache,target=/root/.ccache \
    cmake --preset 'JetPack 5' \
        && cmake --build --parallel --preset 'JetPack 5' \
        && cmake --install build --component CUDA --strip --parallel 8

FROM --platform=linux/arm64 nvcr.io/nvidia/l4t-jetpack:${JETPACK6VERSION} AS jetpack-6
ARG CMAKEVERSION
RUN apt-get update && apt-get install -y curl ccache \
    && curl -fsSL https://github.com/Kitware/CMake/releases/download/v${CMAKEVERSION}/cmake-${CMAKEVERSION}-linux-$(uname -m).tar.gz | tar xz -C /usr/local --strip-components 1
COPY CMakeLists.txt CMakePresets.json .
COPY ml/backend/ggml/ggml ml/backend/ggml/ggml
RUN --mount=type=cache,target=/root/.ccache \
    cmake --preset 'JetPack 6' \
        && cmake --build --parallel --preset 'JetPack 6' \
        && cmake --install build --component CUDA --strip --parallel 8

FROM base AS build
WORKDIR /go/src/github.com/ollama/ollama
102
103
104
105
COPY go.mod go.sum .
RUN curl -fsSL https://golang.org/dl/go$(awk '/^go/ { print $2 }' go.mod).linux-$(case $(uname -m) in x86_64) echo amd64 ;; aarch64) echo arm64 ;; esac).tar.gz | tar xz -C /usr/local
ENV PATH=/usr/local/go/bin:$PATH
RUN go mod download
Michael Yang's avatar
Michael Yang committed
106
107
108
COPY . .
ARG GOFLAGS="'-ldflags=-w -s'"
ENV CGO_ENABLED=1
109
110
ARG CGO_CFLAGS
ARG CGO_CXXFLAGS
Michael Yang's avatar
Michael Yang committed
111
112
113
114
RUN --mount=type=cache,target=/root/.cache/go-build \
    go build -trimpath -buildmode=pie -o /bin/ollama .

FROM --platform=linux/amd64 scratch AS amd64
115
116
117
# COPY --from=cuda-11 dist/lib/ollama/ /lib/ollama/
COPY --from=cuda-12 dist/lib/ollama /lib/ollama/
COPY --from=cuda-13 dist/lib/ollama/ /lib/ollama/
Michael Yang's avatar
Michael Yang committed
118
119

FROM --platform=linux/arm64 scratch AS arm64
120
121
122
# COPY --from=cuda-11 dist/lib/ollama/ /lib/ollama/
COPY --from=cuda-12 dist/lib/ollama /lib/ollama/
COPY --from=cuda-13 dist/lib/ollama/ /lib/ollama/
Daniel Hiltgen's avatar
Daniel Hiltgen committed
123
124
COPY --from=jetpack-5 dist/lib/ollama /lib/ollama/cuda_jetpack5
COPY --from=jetpack-6 dist/lib/ollama /lib/ollama/cuda_jetpack6
Michael Yang's avatar
Michael Yang committed
125

126
FROM scratch AS rocm
Daniel Hiltgen's avatar
Daniel Hiltgen committed
127
COPY --from=rocm-6 dist/lib/ollama /lib/ollama
Michael Yang's avatar
Michael Yang committed
128
129
130
131
132

FROM ${FLAVOR} AS archive
COPY --from=cpu dist/lib/ollama /lib/ollama
COPY --from=build /bin/ollama /bin/ollama

133
FROM ubuntu:24.04
Michael Yang's avatar
Michael Yang committed
134
135
136
137
138
RUN apt-get update \
    && apt-get install -y ca-certificates \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
COPY --from=archive /bin /usr/bin
139
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Michael Yang's avatar
Michael Yang committed
140
COPY --from=archive /lib/ollama /usr/lib/ollama
141
ENV LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64
142
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
143
ENV NVIDIA_VISIBLE_DEVICES=all
Michael Yang's avatar
Michael Yang committed
144
145
ENV OLLAMA_HOST=0.0.0.0:11434
EXPOSE 11434
Jeffrey Morgan's avatar
Jeffrey Morgan committed
146
ENTRYPOINT ["/bin/ollama"]
Jeffrey Morgan's avatar
Jeffrey Morgan committed
147
CMD ["serve"]