mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-10 18:17:31 +08:00
* Added Dockerfile to build docker image including all dependencies and nerfstudio, added description on how to user docker. * Move docker description to Installation.md. * Fix mask_filename indices after splitting train set. * Rebase DOckerfile to newer image for updated libraries. * Update docker container documentation. Co-authored-by: Nicolas Zunhammer <n.zunhammer@tum.de>
117 lines
3.3 KiB
Docker
117 lines
3.3 KiB
Docker
# Define base image.
|
|
FROM nvidia/cuda:11.7.1-devel-ubuntu22.04
|
|
|
|
# Set environment variables.
|
|
## Set non-interactive to prevent asking for user inputs blocking image creation.
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
## Set timezone as it is required by some packages.
|
|
ENV TZ=Europe/Berlin
|
|
## CUDA architectures, required by tiny-cuda-nn.
|
|
ENV TCNN_CUDA_ARCHITECTURES=86
|
|
## CUDA Home, required to find CUDA in some packages.
|
|
ENV CUDA_HOME="/usr/local/cuda"
|
|
|
|
# Install required apt packages and clear cache afterwards.
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
cmake \
|
|
ffmpeg \
|
|
git \
|
|
libatlas-base-dev \
|
|
libboost-filesystem-dev \
|
|
libboost-graph-dev \
|
|
libboost-program-options-dev \
|
|
libboost-system-dev \
|
|
libboost-test-dev \
|
|
libcgal-dev \
|
|
libeigen3-dev \
|
|
libfreeimage-dev \
|
|
libgflags-dev \
|
|
libglew-dev \
|
|
libgoogle-glog-dev \
|
|
libmetis-dev \
|
|
libprotobuf-dev \
|
|
libqt5opengl5-dev \
|
|
libsuitesparse-dev \
|
|
nano \
|
|
protobuf-compiler \
|
|
python3.10-dev \
|
|
python3-pip \
|
|
qtbase5-dev \
|
|
wget && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install GLOG (required by ceres).
|
|
RUN git clone --branch v0.6.0 https://github.com/google/glog.git --single-branch && \
|
|
cd glog && \
|
|
mkdir build && \
|
|
cd build && \
|
|
cmake .. && \
|
|
make -j && \
|
|
make install && \
|
|
cd ../.. && \
|
|
rm -rf glog
|
|
# Add glog path to LD_LIBRARY_PATH.
|
|
ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
|
|
|
|
# Install Ceres-solver (required by colmap).
|
|
RUN git clone --branch 2.1.0 https://ceres-solver.googlesource.com/ceres-solver.git --single-branch && \
|
|
cd ceres-solver && \
|
|
git checkout $(git describe --tags) && \
|
|
mkdir build && \
|
|
cd build && \
|
|
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF && \
|
|
make -j && \
|
|
make install && \
|
|
cd ../.. && \
|
|
rm -rf ceres-solver
|
|
|
|
# Install colmap.
|
|
RUN git clone --branch 3.7 https://github.com/colmap/colmap.git --single-branch && \
|
|
cd colmap && \
|
|
mkdir build && \
|
|
cd build && \
|
|
cmake .. -DCUDA_ENABLED=ON \
|
|
-DCUDA_NVCC_FLAGS="--std c++14" && \
|
|
make -j && \
|
|
make install && \
|
|
cd ../.. && \
|
|
rm -rf colmap
|
|
|
|
# Create non root user and setup environment.
|
|
RUN useradd -m -d /home/user -u 1000 user
|
|
|
|
# Switch to new uer and workdir.
|
|
USER 1000:1000
|
|
WORKDIR /home/user
|
|
|
|
# Add local user binary folder to PATH variable.
|
|
ENV PATH="${PATH}:/home/user/.local/bin"
|
|
SHELL ["/bin/bash", "-c"]
|
|
|
|
# Upgrade pip and install packages.
|
|
RUN python3.10 -m pip install --upgrade pip setuptools pathtools promise
|
|
# Install pytorch and submodules.
|
|
RUN python3.10 -m pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
|
|
# Install tynyCUDNN.
|
|
RUN python3.10 -m pip install git+https://github.com/NVlabs/tiny-cuda-nn.git#subdirectory=bindings/torch
|
|
|
|
# Copy nerfstudio folder and give ownership to user.
|
|
ADD . /home/user/nerfstudio
|
|
USER root
|
|
RUN chown -R user:user /home/user/nerfstudio
|
|
USER 1000:1000
|
|
|
|
# Install nerfstudio dependencies.
|
|
RUN cd nerfstudio && \
|
|
python3.10 -m pip install -e . && \
|
|
cd ..
|
|
|
|
# Change working directory
|
|
WORKDIR /workspace
|
|
|
|
# Install nerfstudio cli auto completion and enter shell if no command was provided.
|
|
CMD ns-install-cli --mode install && /bin/bash
|
|
|