-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
96de93e
commit bdf689b
Showing
1 changed file
with
174 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
ARG CUDA_VERSION=11.8.0 | ||
ARG OS_VERSION=22.04 | ||
ARG USER_ID=1000 | ||
# Define base image. | ||
FROM nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${OS_VERSION} | ||
ARG CUDA_VERSION | ||
ARG OS_VERSION | ||
ARG USER_ID | ||
|
||
# metainformation | ||
LABEL org.opencontainers.image.version = "0.1.18" | ||
LABEL org.opencontainers.image.source = "https://github.com/nerfstudio-project/nerfstudio" | ||
LABEL org.opencontainers.image.licenses = "Apache License 2.0" | ||
LABEL org.opencontainers.image.base.name="docker.io/library/nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${OS_VERSION}" | ||
|
||
# Variables used at build time. | ||
## CUDA architectures, required by Colmap and tiny-cuda-nn. | ||
## NOTE: All commonly used GPU architectures are included and supported here. To speedup the image build process remove all architectures but the one of your explicit GPU. Find details here: https://developer.nvidia.com/cuda-gpus (8.6 translates to 86 in the line below) or in the docs. | ||
ARG CUDA_ARCHITECTURES=90;89;86;80;75;70;61;52;37 | ||
|
||
# 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 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 \ | ||
curl \ | ||
ffmpeg \ | ||
git \ | ||
libatlas-base-dev \ | ||
libboost-filesystem-dev \ | ||
libboost-graph-dev \ | ||
libboost-program-options-dev \ | ||
libboost-system-dev \ | ||
libboost-test-dev \ | ||
libhdf5-dev \ | ||
libcgal-dev \ | ||
libeigen3-dev \ | ||
libflann-dev \ | ||
libfreeimage-dev \ | ||
libgflags-dev \ | ||
libglew-dev \ | ||
libgoogle-glog-dev \ | ||
libmetis-dev \ | ||
libprotobuf-dev \ | ||
libqt5opengl5-dev \ | ||
libsqlite3-dev \ | ||
libsuitesparse-dev \ | ||
nano \ | ||
protobuf-compiler \ | ||
python-is-python3 \ | ||
python3.10-dev \ | ||
python3-pip \ | ||
qtbase5-dev \ | ||
libopenexr-dev \ | ||
openexr \ | ||
sudo \ | ||
vim-tiny \ | ||
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 `nproc` && \ | ||
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 `nproc` && \ | ||
make install && \ | ||
cd ../.. && \ | ||
rm -rf ceres-solver | ||
|
||
# Install colmap. | ||
RUN git clone --branch 3.8 https://github.com/colmap/colmap.git --single-branch && \ | ||
cd colmap && \ | ||
mkdir build && \ | ||
cd build && \ | ||
cmake .. -DCUDA_ENABLED=ON \ | ||
-DCMAKE_CUDA_ARCHITECTURES=${CUDA_ARCHITECTURES} && \ | ||
make -j `nproc` && \ | ||
make install && \ | ||
cd ../.. && \ | ||
rm -rf colmap | ||
|
||
# Create non root user and setup environment. | ||
RUN useradd -m -d /home/user -g root -G sudo -u ${USER_ID} user | ||
RUN usermod -aG sudo user | ||
# Set user password | ||
RUN echo "user:user" | chpasswd | ||
# Ensure sudo group users are not asked for a password when using sudo command by ammending sudoers file | ||
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers | ||
|
||
# Switch to new uer and workdir. | ||
USER ${USER_ID} | ||
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 pybind11 | ||
# Install pytorch and submodules | ||
RUN CUDA_VER=${CUDA_VERSION%.*} && CUDA_VER=${CUDA_VER//./} && python3.10 -m pip install \ | ||
torch==2.0.1+cu${CUDA_VER} \ | ||
torchvision==0.15.2+cu${CUDA_VER} \ | ||
--extra-index-url https://download.pytorch.org/whl/cu${CUDA_VER} | ||
# Install tynyCUDNN (we need to set the target architectures as environment variable first). | ||
ENV TCNN_CUDA_ARCHITECTURES=${CUDA_ARCHITECTURES} | ||
RUN python3.10 -m pip install git+https://github.com/NVlabs/[email protected]#subdirectory=bindings/torch | ||
|
||
# Install pycolmap, required by hloc. | ||
RUN git clone --branch v0.4.0 --recursive https://github.com/colmap/pycolmap.git && \ | ||
cd pycolmap && \ | ||
python3.10 -m pip install . && \ | ||
cd .. | ||
|
||
# Install hloc 1.4 as alternative feature detector and matcher option for nerfstudio. | ||
RUN git clone --branch master --recursive https://github.com/cvg/Hierarchical-Localization.git && \ | ||
cd Hierarchical-Localization && \ | ||
git checkout v1.4 && \ | ||
python3.10 -m pip install -e . && \ | ||
cd .. | ||
|
||
# Install pyceres from source | ||
RUN git clone --branch v1.0 --recursive https://github.com/cvg/pyceres.git && \ | ||
cd pyceres && \ | ||
python3.10 -m pip install -e . && \ | ||
cd .. | ||
|
||
# Install pixel perfect sfm. | ||
RUN git clone --recursive https://github.com/cvg/pixel-perfect-sfm.git && \ | ||
cd pixel-perfect-sfm && \ | ||
git reset --hard 40f7c1339328b2a0c7cf71f76623fb848e0c0357 && \ | ||
git clean -df && \ | ||
python3.10 -m pip install -e . && \ | ||
cd .. | ||
|
||
RUN python3.10 -m pip install omegaconf torchtyping | ||
|
||
RUN git clone https://github.com/JADGardner/nerfstudio.git && \ | ||
cd nerfstudio && \ | ||
python3.10 -m pip install -e . | ||
|
||
RUN git clone https://github.com/JADGardner/ns_reni.git && \ | ||
cd ns_reni && \ | ||
python3.10 -m pip install -e . && \ | ||
cd .. | ||
|
||
RUN ns-install-cli | ||
|
||
# Bash as default entrypoint. | ||
CMD /bin/bash -l |