# Stage 1: Builder with full compilation environment FROM python:3.8-bullseye as builder # Install comprehensive build tools RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ curl \ wget \ libopenblas-dev \ libssl-dev \ zlib1g-dev \ libbz2-dev \ libncurses5-dev \ libffi-dev \ liblzma-dev \ && rm -rf /var/lib/apt/lists/* # Create and use virtual environment RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Install packages with precise order and fallbacks COPY requirements.txt . RUN pip install --upgrade pip setuptools wheel && \ pip install torch==2.2.1 --index-url https://download.pytorch.org/whl/cpu && \ pip install ninja==1.11.1 && \ pip install transformers==4.38.2 && \ pip install accelerate==0.27.2 && \ pip install datasets==2.18.0 && \ pip install huggingface_hub==0.20.3 && \ { pip install deepspeed==0.13.1 || pip install deepspeed==0.13.1 --no-deps; } && \ pip install unsloth==0.2.0 && \ { pip install vllm==0.3.0 || pip install vllm==0.3.0 --no-deps; } && \ pip install fastapi==0.109.1 uvicorn==0.27.0 # Stage 2: Slim runtime image FROM python:3.8-slim # Copy virtual env from builder COPY --from=builder /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Install runtime dependencies only RUN apt-get update && apt-get install -y --no-install-recommends \ libopenblas-base \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY . /app # Verify installation RUN python -c "import torch; print(f'PyTorch {torch.__version__} installed')" && \ python -c "from transformers import __version__; print(f'Transformers {__version__} installed')" CMD ["python", "train.py"]