sam-3d-objecting / Dockerfile
hiendang7613vulcanlabs's picture
fix: set LIDRA_SKIP_INIT=1 to bypass missing sam3d_objects/init.py
0af2c5c
FROM nvidia/cuda:12.4.1-devel-ubuntu22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
git curl wget ca-certificates \
build-essential g++ \
libgl1-mesa-glx libglib2.0-0 libopenexr-dev \
&& rm -rf /var/lib/apt/lists/*
# ---- micromamba (py311) ----
ENV MAMBA_ROOT_PREFIX=/opt/micromamba
RUN curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest \
| tar -xvj -C /opt bin/micromamba \
&& ln -s /opt/bin/micromamba /usr/local/bin/micromamba
SHELL ["/bin/bash", "-lc"]
RUN micromamba create -y -n sam3d -c conda-forge python=3.11 pip \
&& micromamba clean -a -y
# IMPORTANT: pin setuptools FIRST
RUN micromamba run -n sam3d python -m pip install --force-reinstall "setuptools==81.0.0"
# Torch CUDA 12.1 (matches MV-SAM3D common setup)
RUN micromamba run -n sam3d python -m pip install \
torch==2.5.1 torchvision torchaudio \
--index-url https://download.pytorch.org/whl/cu121
# UI + fal + core libs
RUN micromamba run -n sam3d python -m pip install \
gradio==5.49.0 fal-client huggingface-hub requests Pillow numpy
# Kaolin (fail-soft)
RUN micromamba run -n sam3d python -m pip install -U kaolin \
-f https://nvidia-kaolin.s3.us-east-2.amazonaws.com/torch-2.5.1_cu121.html \
|| true
# utils3d – REQUIRED (used by MV-SAM3D inference + visualization)
RUN micromamba run -n sam3d python -m pip install \
"git+https://github.com/EasternJournalist/utils3d.git@3913c65d81e05e47b9f367250cf8c0f7462a0900"
# MoGe (optional, fail-soft)
RUN micromamba run -n sam3d python -m pip install \
"git+https://github.com/microsoft/MoGe.git@a8c37341bc0325ca99b9d57981cc3bb2bd3e255b" \
|| true
# MV-SAM3D full requirements – install line-by-line so one bad package
# (e.g. point-cloud-ut9.5) doesn't abort the entire batch.
COPY MV-SAM3D/my_requirements.txt /tmp/my_requirements.txt
RUN micromamba run -n sam3d bash -c '\
while IFS= read -r pkg || [ -n "$pkg" ]; do \
pkg=$(echo "$pkg" | tr -d "\r" | xargs); \
[ -z "$pkg" ] && continue; \
pip install "$pkg" || echo "⚠ SKIPPED: $pkg"; \
done < /tmp/my_requirements.txt'
# PyTorch3D + gsplat from prebuilt wheels
COPY MV-SAM3D/wheels /tmp/wheels
RUN micromamba run -n sam3d pip install --no-deps /tmp/wheels/pytorch3d-0.7.8-cp311-cp311-linux_x86_64.whl
RUN micromamba run -n sam3d pip install /tmp/wheels/gsplat-1.5.3-cp311-cp311-linux_x86_64.whl
RUN rm -rf /tmp/wheels
# ---- copy MV-SAM3D repo into image ----
COPY MV-SAM3D /mv_sam3d
# ---- runtime env ----
ENV LIDRA_SKIP_INIT=1 \
CUDA_HOME=/usr/local/cuda \
CONDA_PREFIX=/opt/micromamba/envs/sam3d \
HF_HOME=/data/hf \
TRANSFORMERS_CACHE=/data/hf \
TORCH_HOME=/data/torch \
XDG_CACHE_HOME=/data/cache \
GRADIO_SERVER_NAME=0.0.0.0 \
GRADIO_SERVER_PORT=7860 \
PYTHONPATH=/mv_sam3d:/mv_sam3d/notebook
# Build-time import smoke-test – STRICT: fails the build if broken
RUN micromamba run -n sam3d bash -c '\
export PYTHONPATH=/mv_sam3d:/mv_sam3d/notebook; \
python -c "\
import sys; \
print(\"[diag] Testing step-by-step imports...\"); \
from sam3d_objects.utils.visualization.image_mesh import mesh_from_pointmap; \
print(\" OK: image_mesh\"); \
from sam3d_objects.utils.visualization.plotly.plot_scene import plot_tdfy_scene; \
print(\" OK: plot_scene\"); \
from sam3d_objects.utils.visualization.plotly.save_scene import make_video; \
print(\" OK: save_scene\"); \
from sam3d_objects.utils.visualization.scene_visualizer import SceneVisualizer; \
print(\" OK: SceneVisualizer\"); \
from sam3d_objects.utils.visualization import SceneVisualizer; \
print(\" OK: visualization __init__\"); \
print(\"ALL IMPORTS OK\"); \
"'
WORKDIR /workspace
COPY src /workspace/src
COPY app.py /workspace/app.py
COPY MV-SAM3D/my_requirements.txt /workspace/my_requirements.txt
COPY README.md /workspace/README.md
# Add micromamba env to PATH so python/pip are available directly
ENV PATH=/opt/micromamba/envs/sam3d/bin:$PATH
EXPOSE 7860
CMD ["python", "/workspace/app.py"]