91 lines
3.0 KiB
Docker
91 lines
3.0 KiB
Docker
# llama-cpp-turboquant → llama-server (CUDA 13).
|
||
# Build context: root of https://github.com/TheTom/llama-cpp-turboquant
|
||
# docker build -f docker/server-cuda13.Dockerfile -t llama-turboquant:server-cuda13 ../llama-cpp-turboquant
|
||
#
|
||
# Для Blackwell (RTX 50xx, sm_120). Toolkit 13.1.x — под драйвер с nvidia-smi CUDA 13.1.
|
||
# Только 120a-real: быстрее сборка, FP4 tensor cores; не для карт старше Blackwell.
|
||
|
||
ARG UBUNTU_VERSION=24.04
|
||
ARG CUDA_VERSION=13.1.2
|
||
ARG GCC_VERSION=14
|
||
ARG BASE_CUDA_DEV_CONTAINER=docker.io/nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VERSION}
|
||
ARG BASE_CUDA_RUN_CONTAINER=docker.io/nvidia/cuda:${CUDA_VERSION}-runtime-ubuntu${UBUNTU_VERSION}
|
||
|
||
ARG BUILD_DATE=N/A
|
||
ARG APP_VERSION=N/A
|
||
ARG APP_REVISION=N/A
|
||
|
||
ARG NODE_VERSION=24
|
||
|
||
FROM docker.io/node:$NODE_VERSION AS web
|
||
|
||
ARG APP_VERSION
|
||
|
||
WORKDIR /app/tools/ui
|
||
|
||
COPY tools/ui/package.json tools/ui/package-lock.json ./
|
||
RUN npm ci
|
||
|
||
COPY tools/ui/ ./
|
||
RUN LLAMA_BUILD_NUMBER="$APP_VERSION" npm run build
|
||
|
||
FROM ${BASE_CUDA_DEV_CONTAINER} AS build
|
||
|
||
ARG GCC_VERSION
|
||
# 120 → CMake подменит на 120a; явно 120a-real под Blackwell (не forwards-compatible).
|
||
ARG CUDA_DOCKER_ARCH=120a-real
|
||
|
||
RUN apt-get update && \
|
||
apt-get install -y gcc-${GCC_VERSION} g++-${GCC_VERSION} build-essential cmake python3 python3-pip git libssl-dev libgomp1
|
||
|
||
ENV CC=gcc-${GCC_VERSION} CXX=g++-${GCC_VERSION} CUDAHOSTCXX=g++-${GCC_VERSION}
|
||
|
||
WORKDIR /app
|
||
|
||
COPY . .
|
||
|
||
COPY --from=web /app/tools/ui/dist tools/ui/dist
|
||
|
||
RUN if [ "${CUDA_DOCKER_ARCH}" != "default" ]; then \
|
||
export CMAKE_ARGS="-DCMAKE_CUDA_ARCHITECTURES=${CUDA_DOCKER_ARCH}"; \
|
||
fi && \
|
||
cmake -B build -DGGML_NATIVE=OFF -DGGML_CUDA=ON -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON -DLLAMA_BUILD_TESTS=OFF ${CMAKE_ARGS} -DCMAKE_EXE_LINKER_FLAGS=-Wl,--allow-shlib-undefined . && \
|
||
cmake --build build --config Release -j"$(nproc)" --target llama-server
|
||
|
||
RUN mkdir -p /app/lib && \
|
||
find build -name "*.so*" -exec cp -P {} /app/lib \;
|
||
|
||
RUN mkdir -p /app/full \
|
||
&& cp build/bin/llama-server /app/full/
|
||
|
||
FROM ${BASE_CUDA_RUN_CONTAINER} AS server
|
||
|
||
ARG BUILD_DATE=N/A
|
||
ARG APP_VERSION=N/A
|
||
ARG APP_REVISION=N/A
|
||
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||
org.opencontainers.image.version=$APP_VERSION \
|
||
org.opencontainers.image.revision=$APP_REVISION \
|
||
org.opencontainers.image.title="llama-cpp-turboquant" \
|
||
org.opencontainers.image.description="llama-server with TurboQuant KV (CUDA 13 / sm_120)" \
|
||
org.opencontainers.image.source="https://github.com/TheTom/llama-cpp-turboquant"
|
||
|
||
RUN apt-get update \
|
||
&& apt-get install -y libgomp1 curl \
|
||
&& apt autoremove -y \
|
||
&& apt clean -y \
|
||
&& rm -rf /tmp/* /var/tmp/* \
|
||
&& find /var/cache/apt/archives /var/lib/apt/lists -not -name lock -type f -delete \
|
||
&& find /var/cache -type f -delete
|
||
|
||
ENV LLAMA_ARG_HOST=0.0.0.0
|
||
|
||
COPY --from=build /app/lib/ /app
|
||
COPY --from=build /app/full/llama-server /app/
|
||
|
||
WORKDIR /app
|
||
|
||
HEALTHCHECK CMD [ "curl", "-f", "http://localhost:8080/health" ]
|
||
|
||
ENTRYPOINT [ "/app/llama-server" ]
|