Spaces:
Sleeping
Sleeping
| # ============================================================================= | |
| # Dockerfile for Brain Lesion Segmentation — Hugging Face Spaces (Docker SDK) | |
| # Serves FastAPI backend + VTK.js static frontend on port 7860 | |
| # ============================================================================= | |
| FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime | |
| # Install system dependencies required for nnunetv2 and its transitive deps | |
| # (SimpleITK, blosc2, imagecodecs need C compilation toolchains) | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| curl \ | |
| git \ | |
| pkg-config \ | |
| libjpeg-dev \ | |
| libpng-dev \ | |
| libtiff-dev \ | |
| libopenblas-dev \ | |
| graphviz \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Create non-root user (HF Spaces requirement) | |
| RUN useradd -m -u 1000 user | |
| USER user | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH | |
| WORKDIR /home/user/app | |
| # Copy requirements first for Docker cache | |
| COPY --chown=user:user requirements.txt . | |
| # Step 1: Install all deps EXCEPT nnunetv2 (keep base image's CUDA torch) | |
| RUN pip install --no-cache-dir --upgrade pip && \ | |
| grep -v nnunetv2 requirements.txt | pip install --no-cache-dir -r /dev/stdin | |
| # Step 2: Install nnunetv2's non-torch dependencies, then nnunetv2 itself | |
| # with --no-deps so it does NOT overwrite the CUDA PyTorch | |
| RUN pip install --no-cache-dir \ | |
| acvl-utils batchgenerators batchgeneratorsv2 blosc2 \ | |
| dynamic-network-architectures graphviz imagecodecs \ | |
| pandas requests scikit-image scikit-learn seaborn \ | |
| SimpleITK tifffile tqdm yacs && \ | |
| pip install --no-cache-dir --no-deps nnunetv2>=2.2 | |
| # Verify critical packages installed (fail build early if not) | |
| # Note: CUDA is NOT available during docker build, only at runtime | |
| RUN python -c "import nnunetv2; print('nnunetv2 OK')" && \ | |
| python -c "import torch; print('torch', torch.__version__)" && \ | |
| python -c "import fastapi; print('fastapi OK')" && \ | |
| python -c "import monai; print('monai OK')" | |
| # Copy application code | |
| COPY --chown=user:user . . | |
| # Hugging Face Spaces expects port 7860 | |
| EXPOSE 7860 | |
| # Use entrypoint script that sanitizes OMP_NUM_THREADS before starting. | |
| # HF Spaces Kubernetes injects OMP_NUM_THREADS=3500m which crashes libgomp. | |
| # The entrypoint forcibly overrides it with a valid integer. | |
| CMD ["bash", "entrypoint.sh"] | |