infinigen-agents / Dockerfile
dev-bjoern's picture
fix: Install torch before torch-scatter (build dependency)
86b6cf6
# Infinigen Agents - Modern Python-based Terrain Engine
# No legacy C++/CUDA compilation needed - uses HuggingFace Kernels + PyTorch Geometric
FROM python:3.11-slim AS builder
# Python environment setup for UV
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
ENV UV_CACHE_DIR=/tmp/.uv-cache
# System dependencies (minimal - no CUDA toolkit needed)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
curl \
ca-certificates \
git \
build-essential \
libopenblas-dev \
&& rm -rf /var/lib/apt/lists/*
# Install uv
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
# Clone infinigen from GitHub
RUN git clone https://github.com/bjoernbethge/infinigen.git /app
# Set up working directory
WORKDIR /app
# Create virtual environment
RUN uv venv /app/.venv
ENV VIRTUAL_ENV=/app/.venv
ENV PATH="/app/.venv/bin:$PATH"
# Install torch first (needed for torch-scatter build)
RUN sh -c "ulimit -n 4096 && uv pip install torch --index-url https://download.pytorch.org/whl/cpu"
# Install Python dependencies (modern terrain engine uses kernels, torch_geometric, gpytorch)
RUN sh -c "ulimit -n 4096 && uv sync --no-build-isolation"
# Install Gradio and HuggingFace dependencies for Space
RUN sh -c "ulimit -n 4096 && uv pip install gradio>=5.0.0 pydantic-ai[huggingface]>=1.0.8"
# Create user
RUN useradd -ms /bin/bash user && \
chown -R user:user /app
# ============================================
# Runtime stage - minimal image
# ============================================
FROM python:3.11-slim AS runtime
# Runtime environment
ENV UV_COMPILE_BYTECODE=1
ENV UV_CACHE_DIR=/tmp/.uv-cache
# Minimal runtime dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libopenblas0 \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# Create user (HuggingFace Spaces standard)
RUN useradd -ms /bin/bash user
# Copy built artifacts from builder stage
COPY --from=builder /app /app
COPY --from=builder /root/.local /root/.local
# Set up environment
ENV PATH="/app/.venv/bin:/root/.local/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
ENV VIRTUAL_ENV=/app/.venv
ENV HOME=/home/user
WORKDIR /app
# Copy Gradio app
COPY app.py /app/app.py
# Set ownership
RUN chown -R user:user /app
# Switch to user
USER user
# Expose Gradio port
EXPOSE 7860
# Start Gradio app
CMD ["python", "app.py"]