b-ware / Dockerfile
eyesee's picture
containerized the NLP service and pushed the dockerfile to haggingface free space, cuz it's free
664d592
Raw
History Blame Contribute Delete
2.44 kB
# =============================================================================
# B-ware NLP Service β€” Dockerfile
# =============================================================================
# Build: docker build -t bware-nlp .
# Run: docker run -p 5001:5001 --env-file .env bware-nlp
#
# Image size: ~5-6 GB (PyTorch + BART model cached inside the image)
# Use --extra-index-url for CPU-only torch to reduce to ~3 GB (see note below).
# =============================================================================
FROM python:3.10-slim
# --- System dependencies -------------------------------------------------
# gcc needed to compile some Python packages (e.g. tokenizers wheels)
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
build-essential \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# --- Python dependencies ------------------------------------------------
# Copy requirements first so Docker caches the layer unless requirements change
COPY requirements.txt .
# Install CPU-only torch first (saves ~1.5 GB vs the default CUDA build),
# then install the rest of requirements normally.
RUN pip install --no-cache-dir torch --extra-index-url https://download.pytorch.org/whl/cpu \
&& pip install --no-cache-dir -r requirements.txt
# --- Application code ---------------------------------------------------
COPY . .
# --- Pre-download the BART model ----------------------------------------
# Running this at build time means the first HTTP request is instant.
# Without this, the first /verify/deep call downloads ~1.6 GB at runtime.
RUN python -c "\
from transformers import pipeline; \
print('Downloading facebook/bart-large-mnli...'); \
pipeline('zero-shot-classification', model='facebook/bart-large-mnli'); \
print('Model cached successfully.')"
# --- Runtime configuration ----------------------------------------------
# HuggingFace Spaces routes all traffic to port 7860.
# Locally you can override: docker run -e PORT=5001 ...
ENV PORT=7860
EXPOSE 7860
# Health check β€” Docker marks container unhealthy if /health stops responding
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD python -c "import httpx; httpx.get('http://localhost:${PORT}/health').raise_for_status()" \
|| exit 1
# Start the service β€” reads PORT env var so it works on HF Spaces and locally
CMD uvicorn main:app --host 0.0.0.0 --port ${PORT} --workers 1