char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
5d8ccdf9d
char/aliceai-t5-moe
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 scratchAS 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 baseAS 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 baseAS 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 baseAS 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" ]