diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..288ec24 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,100 @@ +# get the development image from nvidia cuda 12.4 (using devel for full CUDA toolkit) +FROM nvidia/cuda:12.4.1-devel-ubuntu22.04 + +LABEL name="hunyuan3d21" maintainer="hunyuan3d21" + +# create workspace folder and set it as working directory +RUN mkdir -p /workspace +WORKDIR /workspace + +# update package lists and install git, wget, vim, libegl1-mesa-dev, and libglib2.0-0 +RUN apt-get update && apt-get install -y build-essential git wget vim libegl1-mesa-dev libglib2.0-0 unzip git-lfs + +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libglvnd0 libgl1 libglx0 libegl1 libgles2 libglvnd-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev cmake curl mesa-utils-extra libxrender1 + +# Install additional dependencies for compilation +RUN apt-get install -y libeigen3-dev python3-dev python3-setuptools libcgal-dev + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH +ENV PYOPENGL_PLATFORM=egl + +# Set CUDA environment variables +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="6.0;6.1;7.0;7.5;8.0;8.6;8.9;9.0" + +# install conda +RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \ + chmod +x Miniconda3-latest-Linux-x86_64.sh && \ + ./Miniconda3-latest-Linux-x86_64.sh -b -p /workspace/miniconda3 && \ + rm Miniconda3-latest-Linux-x86_64.sh + +# update PATH environment variable +ENV PATH="/workspace/miniconda3/bin:${PATH}" + +# initialize conda +RUN conda init bash + +# create and activate conda environment +RUN conda create -n hunyuan3d21 python=3.10 && echo "source activate hunyuan3d21" > ~/.bashrc +ENV PATH /workspace/miniconda3/envs/hunyuan3d21/bin:$PATH + +# Set conda to always auto-approve +RUN conda config --set always_yes true + +RUN conda install Ninja +RUN conda install cuda -c nvidia/label/cuda-12.4.1 -y + +# Update libstdcxx-ng to fix compatibility issues (auto-confirm) +RUN conda install -c conda-forge libstdcxx-ng -y + +RUN pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124 + +# Clone Hunyuan3D-2.1 repository +RUN git clone https://github.com/Tencent-Hunyuan/Hunyuan3D-2.1.git + +# Remove Chinese mirror sources and torchdiffeq from requirements.txt +RUN cd /workspace/Hunyuan3D-2.1 && \ + sed -i '/--extra-index-url https:\/\/mirrors\.cloud\.tencent\.com\/pypi\/simple\//d' requirements.txt && \ + sed -i '/--extra-index-url https:\/\/mirrors\.aliyun\.com\/pypi\/simple/d' requirements.txt + +# Install Python dependencies from modified requirements.txt +RUN pip install -r Hunyuan3D-2.1/requirements.txt + +# Install custom_rasterizer +RUN cd /workspace/Hunyuan3D-2.1/hy3dpaint/custom_rasterizer && \ + # Set compilation environment variables + export TORCH_CUDA_ARCH_LIST="6.0;6.1;7.0;7.5;8.0;8.6;8.9;9.0" && \ + export CUDA_NVCC_FLAGS="-allow-unsupported-compiler" && \ + # Install with editable mode + pip install -e . + +# Install DifferentiableRenderer +RUN cd /workspace/Hunyuan3D-2.1/hy3dpaint/DifferentiableRenderer && \ + bash compile_mesh_painter.sh + +RUN cd /workspace/Hunyuan3D-2.1 && \ + wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P ckpt + +# Set working directory to the cloned repository +WORKDIR /workspace/Hunyuan3D-2.1 + +# Set global library paths to ensure proper linking at runtime +ENV LD_LIBRARY_PATH="/workspace/miniconda3/envs/hunyuan3d21/lib:${LD_LIBRARY_PATH}" + +RUN apt-get install -y libxi6 libgconf-2-4 libxkbcommon-x11-0 libsm6 libxext6 libxrender-dev + +# Activate conda environment by default +RUN echo "conda activate hunyuan3d21" >> ~/.bashrc +SHELL ["/bin/bash", "--login", "-c"] + +# Cleanup +RUN rm -f /workspace/*.zip && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Set default command +CMD ["/bin/bash"] \ No newline at end of file