GGUF-Splitter / Dockerfile
Felladrin's picture
Initial commit
2de2584
# Multi-stage Dockerfile for GGUF Splitter
# Supports production, local development, and testing configurations
# Base stage with common dependencies
FROM python:3.11-slim as base
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
wget \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# Build llama.cpp binaries (only needed for test stage)
FROM base as llama-builder
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
build-essential \
cmake \
&& rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/ggerganov/llama.cpp.git /tmp/llama.cpp
WORKDIR /tmp/llama.cpp
RUN cmake -B build -DCMAKE_BUILD_TYPE=Release
RUN cmake --build build --config Release -j --target llama-gguf-split
# Production stage
FROM base as production
# Download pre-built llama.cpp binaries
WORKDIR /tmp
RUN LLAMA_VERSION=$(wget -qO- https://api.github.com/repos/ggml-org/llama.cpp/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")') && \
wget -q "https://github.com/ggml-org/llama.cpp/releases/download/${LLAMA_VERSION}/llama-${LLAMA_VERSION}-bin-ubuntu-x64.tar.gz" && \
tar -xzf "llama-${LLAMA_VERSION}-bin-ubuntu-x64.tar.gz" && \
mkdir -p /usr/local/llama.cpp && \
mv llama-${LLAMA_VERSION}/* /usr/local/llama.cpp/ && \
rm -rf /tmp/*
ENV PATH="/usr/local/llama.cpp:${PATH}"
ENV LLAMA_GGUF_SPLIT_PATH=/usr/local/llama.cpp/llama-gguf-split
WORKDIR /home/user/app
COPY requirements.txt /home/user/app/requirements.txt
# Create virtual environment
RUN python3 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN /opt/venv/bin/pip install --upgrade pip
RUN /opt/venv/bin/pip install -r /home/user/app/requirements.txt
ENV HF_HUB_HOME=/home/user/app
ENV GRADIO_HF_OFFLINE_SPACE_OK=1
COPY . /home/user/app
ENTRYPOINT ["python", "app.py"]
# Local development stage
FROM production as local
ENV GRADIO_SERVER_NAME="0.0.0.0"
ENV RUN_LOCALLY=1
EXPOSE 7860
CMD ["python", "app.py"]
# Test stage
FROM base as test
# Copy llama-gguf-split from builder stage
COPY --from=llama-builder /tmp/llama.cpp/build/bin/llama-gguf-split /usr/local/bin/
COPY --from=llama-builder /tmp/llama.cpp/build/bin/*.so* /usr/local/bin/
WORKDIR /home/user/app
COPY requirements.txt /home/user/app/requirements.txt
RUN pip install --no-cache-dir -r /home/user/app/requirements.txt
# Install test dependencies
COPY requirements-dev.txt /home/user/app/requirements-dev.txt
RUN pip install --no-cache-dir -r /home/user/app/requirements-dev.txt
ENV PYTHONPATH=/home/user/app
ENV RUN_LOCALLY=1
ENV LLAMA_GGUF_SPLIT_PATH=/usr/local/bin/llama-gguf-split
ENV LD_LIBRARY_PATH=/usr/local/bin
COPY . /home/user/app
CMD ["pytest", "tests/", "-v", "--tb=short"]