k-l-lambda's picture
feat: add Python ML services (CPU mode) with model download
2b7aae2
# STARRY Python ML Services Dockerfile
# Multi-stage build for PyTorch + TensorFlow services
# ============================================================
# Stage 1: Base image with CUDA support
# ============================================================
# Use CUDA 12.1 runtime - PyTorch wheel includes cudnn
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 AS base
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
# Install system dependencies
RUN apt-get update && apt-get install -y \
python3.11 \
python3.11-dev \
python3-pip \
libgl1-mesa-glx \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
git \
&& rm -rf /var/lib/apt/lists/*
# Set Python 3.11 as default
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 \
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
# Upgrade pip
RUN python -m pip install --upgrade pip
# ============================================================
# Stage 2: PyTorch services (layout, mask, semantic, gauge, loc)
# ============================================================
FROM base AS pytorch-services
WORKDIR /app
# Install PyTorch with CUDA support
# Using cu121 for compatibility with CUDA driver 12.4
RUN pip install --no-cache-dir \
"numpy>=1.26.0,<2.0.0" \
torch==2.5.1 \
torchvision==0.20.1 \
--index-url https://download.pytorch.org/whl/cu121
# Install common dependencies
RUN pip install --no-cache-dir \
"opencv-python-headless<4.11" \
Pillow>=8.0.0 \
PyYAML>=5.4.0 \
pyzmq>=22.0.0 \
msgpack>=1.0.0 \
dill \
scipy \
imgaug \
scikit-image \
python-dotenv \
fs \
tqdm \
einops \
lmdb
# Source code should be mounted as volume at runtime:
# -v /path/to/deep-starry:/app/deep-starry:ro
ENV PYTHONPATH=/app/deep-starry
# Default command (override with docker-compose)
CMD ["python", "--help"]
# ============================================================
# Stage 3: TensorFlow services (ocr, brackets)
# ============================================================
FROM base AS tensorflow-services
WORKDIR /app
# Install TensorFlow with legacy Keras support
RUN pip install --no-cache-dir \
"numpy==1.26.4" \
tensorflow==2.20.0 \
tf_keras==2.20.1 \
"opencv-python-headless<4.11" \
Pillow>=8.0.0 \
PyYAML>=5.4.0 \
pyzmq>=22.0.0 \
msgpack>=1.0.0 \
zhon \
nltk \
distance \
anyconfig \
munch \
tensorboardX \
scipy \
scikit-image \
python-dotenv
# Set legacy Keras environment
ENV TF_USE_LEGACY_KERAS=1
# Source code should be mounted as volume at runtime:
# -v /path/to/starry-ocr:/app/starry-ocr:ro
ENV PYTHONPATH=/app/starry-ocr
# Default command
CMD ["python", "--help"]
# ============================================================
# Stage 4: All-in-one image (for convenience)
# ============================================================
FROM base AS all-in-one
WORKDIR /app
# Install all dependencies (larger image but simpler deployment)
# Using cu121 for compatibility with CUDA driver 12.4
# Note: numpy<2.0 required for imgaug compatibility
RUN pip install --no-cache-dir \
"numpy>=1.26.0,<2.0.0" \
torch==2.5.1 \
torchvision==0.20.1 \
--index-url https://download.pytorch.org/whl/cu121
RUN pip install --no-cache-dir \
"numpy>=1.26.0,<2.0.0" \
tensorflow==2.20.0 \
tf_keras==2.20.1 \
"opencv-python-headless<4.11" \
Pillow>=8.0.0 \
PyYAML>=5.4.0 \
pyzmq>=22.0.0 \
msgpack>=1.0.0 \
dill \
scipy \
imgaug \
scikit-image \
zhon \
nltk \
distance \
anyconfig \
munch \
tensorboardX \
python-dotenv \
pyclipper \
shapely \
polygon3 \
Polygon3 \
tqdm \
fs \
einops \
lmdb
ENV TF_USE_LEGACY_KERAS=1
# Source code should be mounted as volumes at runtime:
# -v /path/to/deep-starry:/app/deep-starry:ro
# -v /path/to/starry-ocr:/app/starry-ocr:ro
ENV PYTHONPATH=/app/deep-starry:/app/starry-ocr
# Default working directory
WORKDIR /app
CMD ["python", "--help"]