char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Adrien Gallouëtdevops : add llama in all docker images (#25035)5d8ccdf9d

char/aliceai-t5-moe
4.6 KiB145 linesraw
1ARG GCC_VERSION=15.2.0
2ARG UBUNTU_VERSION=24.04
3ARG BUILD_DATE=N/A
4ARG APP_VERSION=N/A
5ARG APP_REVISION=N/A
6
7### Build Llama.cpp stage
8FROM docker.io/gcc:${GCC_VERSION} AS build
9
10RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
11    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
12    apt update -y && \
13    apt upgrade -y && \
14    apt install -y --no-install-recommends \
15        git cmake ccache ninja-build \
16        # WARNING: Do not use libopenblas-openmp-dev. libopenblas-dev is faster.
17        libopenblas-dev libssl-dev && \
18    rm -rf /var/lib/apt/lists/*
19
20WORKDIR /app
21COPY . .
22
23RUN --mount=type=cache,target=/root/.ccache \
24    --mount=type=cache,target=/app/build \
25    cmake -S . -B build -G Ninja \
26        -DCMAKE_BUILD_TYPE=Release \
27        -DCMAKE_C_COMPILER_LAUNCHER=ccache \
28        -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
29        -DLLAMA_BUILD_TESTS=OFF \
30        -DGGML_NATIVE=OFF \
31        -DGGML_BACKEND_DL=ON \
32        -DGGML_CPU_ALL_VARIANTS=ON \
33        -DGGML_BLAS=ON \
34        -DGGML_BLAS_VENDOR=OpenBLAS && \
35    cmake --build build --config Release -j $(nproc) && \
36    cmake --install build --prefix /opt/llama.cpp
37
38COPY *.py             /opt/llama.cpp/bin
39COPY .devops/tools.sh /opt/llama.cpp/bin
40COPY conversion       /opt/llama.cpp/conversion
41
42COPY gguf-py          /opt/llama.cpp/gguf-py
43COPY requirements.txt /opt/llama.cpp/gguf-py
44COPY requirements     /opt/llama.cpp/gguf-py/requirements
45
46
47### Collect all llama.cpp binaries, libraries and distro libraries
48FROM scratch AS collector
49
50# Copy llama.cpp binaries and libraries
51COPY --from=build /opt/llama.cpp/bin        /llama.cpp/bin
52COPY --from=build /opt/llama.cpp/lib        /llama.cpp/lib
53COPY --from=build /opt/llama.cpp/gguf-py    /llama.cpp/gguf-py
54COPY --from=build /opt/llama.cpp/conversion /llama.cpp/conversion
55
56
57### Base image
58FROM docker.io/ubuntu:${UBUNTU_VERSION} AS base
59
60ARG BUILD_DATE=N/A
61ARG APP_VERSION=N/A
62ARG APP_REVISION=N/A
63ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
64ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
65LABEL org.opencontainers.image.created=$BUILD_DATE \
66      org.opencontainers.image.version=$APP_VERSION \
67      org.opencontainers.image.revision=$APP_REVISION \
68      org.opencontainers.image.title="llama.cpp" \
69      org.opencontainers.image.description="LLM inference in C/C++" \
70      org.opencontainers.image.url=$IMAGE_URL \
71      org.opencontainers.image.source=$IMAGE_SOURCE
72
73RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
74    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
75    apt update -y && \
76    apt install -y --no-install-recommends \
77        # WARNING: Do not use libopenblas-openmp-dev. libopenblas-dev is faster.
78        # See: https://github.com/ggml-org/llama.cpp/pull/15915#issuecomment-3317166506
79        curl libgomp1 libopenblas-dev && \
80    apt autoremove -y && \
81    apt clean -y && \
82    rm -rf /tmp/* /var/tmp/* && \
83    find /var/cache/apt/archives /var/lib/apt/lists -not -name lock -type f -delete && \
84    find /var/cache -type f -delete
85
86# Copy llama.cpp libraries
87COPY --from=collector /llama.cpp/lib /usr/lib/s390x-linux-gnu
88
89
90### Full
91FROM base AS full
92
93ENV PATH="/root/.cargo/bin:${PATH}"
94WORKDIR /app
95
96RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
97    --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
98    apt update -y && \
99    apt install -y \
100        git cmake libjpeg-dev \
101        python3 python3-pip python3-dev && \
102    apt autoremove -y && \
103    apt clean -y && \
104    rm -rf /tmp/* /var/tmp/* && \
105    find /var/cache/apt/archives /var/lib/apt/lists -not -name lock -type f -delete && \
106    find /var/cache -type f -delete
107
108RUN curl https://sh.rustup.rs -sSf | bash -s -- -y
109
110COPY --from=collector /llama.cpp/bin /app
111COPY --from=collector /llama.cpp/gguf-py /app/gguf-py
112COPY --from=collector /llama.cpp/conversion /app/conversion
113
114RUN pip install --no-cache-dir --break-system-packages \
115        -r /app/gguf-py/requirements.txt
116
117ENTRYPOINT [ "/app/tools.sh" ]
118
119
120### CLI Only
121FROM base AS light
122
123WORKDIR /llama.cpp/bin
124
125# Copy llama.cpp binaries and libraries
126COPY --from=collector /llama.cpp/bin/*.so /llama.cpp/bin
127COPY --from=collector /llama.cpp/bin/llama /llama.cpp/bin/llama-cli /llama.cpp/bin/llama-completion /llama.cpp/bin
128
129ENTRYPOINT [ "/llama.cpp/bin/llama-cli" ]
130
131
132### Server
133FROM base AS server
134
135ENV LLAMA_ARG_HOST=0.0.0.0
136
137WORKDIR /llama.cpp/bin
138
139# Copy llama.cpp binaries and libraries
140COPY --from=collector /llama.cpp/bin/*.so /llama.cpp/bin
141COPY --from=collector /llama.cpp/bin/llama /llama.cpp/bin/llama-server /llama.cpp/bin
142
143EXPOSE 8080
144
145ENTRYPOINT [ "/llama.cpp/bin/llama-server" ]