| FROM debian:bookworm-slim AS builder |
|
|
| ENV DEBIAN_FRONTEND=noninteractive |
|
|
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| git \ |
| build-essential \ |
| cmake \ |
| pkg-config \ |
| ccache \ |
| libopenblas-dev \ |
| ca-certificates \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| ARG LLAMA_CPP_REPO=https://github.com/ggml-org/llama.cpp.git |
| ARG LLAMA_CPP_BRANCH=master |
|
|
| WORKDIR /opt |
| RUN git clone --depth 1 --branch "$LLAMA_CPP_BRANCH" "$LLAMA_CPP_REPO" |
|
|
| WORKDIR /opt/llama.cpp |
| RUN cmake -B build -S . \ |
| -DGGML_BLAS=ON \ |
| -DGGML_BLAS_VENDOR=OpenBLAS \ |
| -DGGML_NATIVE=ON \ |
| -DGGML_CCACHE=ON \ |
| -DCMAKE_BUILD_TYPE=Release \ |
| -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \ |
| -DCMAKE_C_FLAGS_RELEASE="-Ofast -march=native -flto -fno-finite-math-only" \ |
| -DCMAKE_CXX_FLAGS_RELEASE="-Ofast -march=native -flto -fno-finite-math-only" \ |
| && cmake --build build -j"$(nproc)" --target llama-server |
|
|
| FROM debian:bookworm-slim |
|
|
| ENV DEBIAN_FRONTEND=noninteractive \ |
| PYTHONUNBUFFERED=1 \ |
| HF_HUB_DISABLE_TELEMETRY=1 \ |
| HF_HOME=/data/hf-cache \ |
| MODEL_DIR=/data/models \ |
| MODEL_PATH=/data/models/model.gguf \ |
| LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/llama.cpp |
| ENV PATH=/opt/venv/bin:$PATH |
|
|
| RUN apt-get update && apt-get install -y --no-install-recommends \ |
| python3 \ |
| python3-pip \ |
| python3-venv \ |
| ca-certificates \ |
| libopenblas0-pthread \ |
| libgomp1 \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| RUN groupadd -g 65532 appuser || true \ |
| && useradd -u 65532 -g 65532 -M -s /usr/sbin/nologin appuser || true |
|
|
| COPY --from=builder /opt/llama.cpp/build/bin/llama-server /usr/local/bin/llama-server |
| COPY --from=builder /opt/llama.cpp/build/bin/lib*.so* /usr/local/lib/ |
| RUN ldconfig |
|
|
| WORKDIR /app |
| COPY requirements.txt /app/requirements.txt |
| RUN python3 -m venv /opt/venv \ |
| && /opt/venv/bin/python -m pip install --no-cache-dir --upgrade pip \ |
| && /opt/venv/bin/pip install --no-cache-dir -r /app/requirements.txt \ |
| && rm -rf /root/.cache/pip |
|
|
| COPY download_model.py /app/download_model.py |
| COPY search_tool.py /app/search_tool.py |
| COPY start.sh /app/start.sh |
| RUN chmod +x /app/start.sh /app/search_tool.py \ |
| && mkdir -p /data/models /data/hf-cache \ |
| && chown -R 65532:65532 /app || true |
|
|
| EXPOSE 7860 |
|
|
|
|
| ENTRYPOINT ["/app/start.sh"] |
|
|