Felipe97/llama-cpp-compiled
01.1k
1ARG GCC_VERSION=15.2.02ARG UBUNTU_VERSION=24.043ARG BUILD_DATE=N/A4ARG APP_VERSION=N/A5ARG APP_REVISION=N/A6 7### Build Llama.cpp stage8FROM docker.io/gcc:${GCC_VERSION} AS build9 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 /app21COPY . .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.cpp37 38COPY *.py /opt/llama.cpp/bin39COPY .devops/tools.sh /opt/llama.cpp/bin40COPY conversion /opt/llama.cpp/conversion41 42COPY gguf-py /opt/llama.cpp/gguf-py43COPY requirements.txt /opt/llama.cpp/gguf-py44COPY requirements /opt/llama.cpp/gguf-py/requirements45 46 47### Collect all llama.cpp binaries, libraries and distro libraries48FROM scratch AS collector49 50# Copy llama.cpp binaries and libraries51COPY --from=build /opt/llama.cpp/bin /llama.cpp/bin52COPY --from=build /opt/llama.cpp/lib /llama.cpp/lib53COPY --from=build /opt/llama.cpp/gguf-py /llama.cpp/gguf-py54COPY --from=build /opt/llama.cpp/conversion /llama.cpp/conversion55 56 57### Base image58FROM docker.io/ubuntu:${UBUNTU_VERSION} AS base59 60ARG BUILD_DATE=N/A61ARG APP_VERSION=N/A62ARG APP_REVISION=N/A63ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp64ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp65LABEL 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_SOURCE72 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-331716650679 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 -delete85 86# Copy llama.cpp libraries87COPY --from=collector /llama.cpp/lib /usr/lib/s390x-linux-gnu88 89 90### Full91FROM base AS full92 93ENV PATH="/root/.cargo/bin:${PATH}"94WORKDIR /app95 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 -delete107 108RUN curl https://sh.rustup.rs -sSf | bash -s -- -y109 110COPY --from=collector /llama.cpp/bin /app111COPY --from=collector /llama.cpp/gguf-py /app/gguf-py112COPY --from=collector /llama.cpp/conversion /app/conversion113 114RUN pip install --no-cache-dir --break-system-packages \115 -r /app/gguf-py/requirements.txt116 117ENTRYPOINT [ "/app/tools.sh" ]118 119 120### CLI Only121FROM base AS light122 123WORKDIR /llama.cpp/bin124 125# Copy llama.cpp binaries and libraries126COPY --from=collector /llama.cpp/bin/*.so /llama.cpp/bin127COPY --from=collector /llama.cpp/bin/llama /llama.cpp/bin/llama-cli /llama.cpp/bin/llama-completion /llama.cpp/bin128 129ENTRYPOINT [ "/llama.cpp/bin/llama-cli" ]130 131 132### Server133FROM base AS server134 135ENV LLAMA_ARG_HOST=0.0.0.0136 137WORKDIR /llama.cpp/bin138 139# Copy llama.cpp binaries and libraries140COPY --from=collector /llama.cpp/bin/*.so /llama.cpp/bin141COPY --from=collector /llama.cpp/bin/llama /llama.cpp/bin/llama-server /llama.cpp/bin142 143EXPOSE 8080144 145ENTRYPOINT [ "/llama.cpp/bin/llama-server" ]146 