FROM nvidia/cuda:12.8.0-devel-ubuntu22.04 # Set environment variables ENV DEBIAN_FRONTEND=noninteractive ENV HOME=/root ENV CUDA_HOME=/usr/local/cuda ENV PATH=${CUDA_HOME}/bin:${PATH} ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH} ENV TORCH_CUDA_ARCH_LIST="12.0" # Install system dependencies and build tools RUN apt-get update && \ apt-get install -y \ curl wget gpg apt-transport-https git software-properties-common \ build-essential cmake ninja-build \ libopenblas-dev libomp-dev \ && rm -rf /var/lib/apt/lists/* # Install Python 3.12 (as recommended) RUN add-apt-repository ppa:deadsnakes/ppa && \ apt-get update && \ apt-get install -y python3.11 python3.11-venv python3.11-dev && \ update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 && \ update-alternatives --set python3 /usr/bin/python3.11 && \ curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 # Install uv for faster dependency management RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # Create workspace RUN mkdir -p /workspace WORKDIR /workspace # CRITICAL: Install in the EXACT order specified in the README # Step 1: Create venv RUN python3 -m venv /opt/unsloth-env ENV PATH="/opt/unsloth-env/bin:$PATH" # Step 2: Install vllm with cu128 (MUST be first) RUN /opt/unsloth-env/bin/pip install --upgrade pip setuptools wheel && \ /opt/unsloth-env/bin/pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly # Step 3: Install unsloth dependencies RUN /opt/unsloth-env/bin/pip install unsloth unsloth_zoo bitsandbytes # Step 4: Build xformers from source (no Blackwell wheels exist yet) RUN git clone --depth=1 https://github.com/facebookresearch/xformers --recursive /tmp/xformers && \ cd /tmp/xformers && \ /opt/unsloth-env/bin/pip uninstall -y xformers && \ /opt/unsloth-env/bin/python setup.py install && \ rm -rf /tmp/xformers # Step 5: Update triton to >=3.3.1 for Blackwell RUN /opt/unsloth-env/bin/pip install -U "triton>=3.3.1" # Step 6: Pin transformers to avoid gradient checkpointing bug RUN /opt/unsloth-env/bin/pip install -U "transformers==4.52.4" # Step 7: Might need to downgrade numpy RUN /opt/unsloth-env/bin/pip install "numpy<=2.2" # Now install your dev tools (code-server, Node.js, etc) RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ apt-get install -y nodejs && \ curl -fsSL https://code-server.dev/install.sh | sh && \ npm install -g @anthropic-ai/claude-code @anthropic-ai/dxt && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Install Ollama RUN curl -fsSL https://ollama.com/install.sh | sh || true # Configure code-server RUN mkdir -p /root/.config/code-server /root/.ollama && \ echo "bind-addr: 0.0.0.0:8443\nauth: none\ncert: false" > /root/.config/code-server/config.yaml # Install VS Code extensions RUN code-server --install-extension ms-python.python && \ code-server --install-extension ritwickdey.LiveServer && \ code-server --install-extension ms-toolsai.jupyter # Create startup script with proper env activation RUN echo '#!/bin/bash\n\ # Activate the unsloth environment\n\ source /opt/unsloth-env/bin/activate\n\ \n\ # Start Ollama in the background\n\ /usr/local/bin/ollama serve &\n\ \n\ # Give Ollama a moment to start\n\ sleep 2\n\ \n\ # Start code-server with the activated environment\n\ exec code-server --disable-telemetry --bind-addr 0.0.0.0:8443 /workspace\n\ ' > /start.sh && \ chmod +x /start.sh # Expose ports EXPOSE 8443 11434 # Copy requirements.txt to workspace (will fail build if not present) COPY requirements.txt /workspace/requirements.txt # Create a script to install from requirements.txt with proper environment RUN echo '#!/bin/bash\n\ echo "Installing from requirements.txt..."\n\ source /opt/unsloth-env/bin/activate\n\ pip install -r /workspace/requirements.txt\n\ echo "Installation complete!"\n\ ' > /workspace/install-requirements.sh && \ chmod +x /workspace/install-requirements.sh # Optional: Install requirements.txt if you want it done at build time # Uncomment the next line if you want automatic installation RUN /opt/unsloth-env/bin/pip install -r /workspace/requirements.txt CMD ["/start.sh"]