blanchon's picture
Update Dockerfile
cb2de0f
# --- `colmap` Builder Stage ---
FROM nvidia/cuda:11.7.1-devel-ubuntu20.04 AS colmap_builder
ARG COLMAP_GIT_COMMIT=main
ARG CUDA_ARCHITECTURES=native
ENV QT_XCB_GL_INTEGRATION=xcb_egl
WORKDIR /workdir
# Prepare and empty machine for building.
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
git \
cmake \
ninja-build \
build-essential \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libeigen3-dev \
libflann-dev \
libfreeimage-dev \
libmetis-dev \
libgoogle-glog-dev \
libgtest-dev \
libsqlite3-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libceres-dev \
&& rm -rf /var/lib/apt/lists/*
# Build and install COLMAP.
COPY deps/colmap /colmap
RUN cd /colmap && \
mkdir build && \
cd build && \
cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES=${CUDA_ARCHITECTURES} && \
ninja && \
ninja install && \
cd .. && rm -rf colmap
# # --- `gaussian-splatting-cuda` Builder Stage ---
FROM nvidia/cuda:11.7.1-devel-ubuntu20.04 AS gs_builder
WORKDIR /workdir
# Install dependencies
# we could pin them to specific versions to be extra sure
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
git \
python3-dev \
libtbb-dev \
libeigen3-dev \
unzip \
g++ \
libssl-dev \
build-essential \
checkinstall \
wget \
cmake \
protobuf-compiler \
&& rm -rf /var/lib/apt/lists/*
# Install cmake 3.25
# RUN apt-get update && apt-get -y install
RUN wget https://github.com/Kitware/CMake/releases/download/v3.25.0/cmake-3.25.0.tar.gz \
&& tar -zvxf cmake-3.25.0.tar.gz \
&& cd cmake-3.25.0 \
&& ./bootstrap \
&& make -j8 \
&& checkinstall --pkgname=cmake --pkgversion="3.25-custom" --default
# Copy necessary files
COPY deps/gaussian-splatting-cuda/cuda_rasterizer ./cuda_rasterizer
COPY deps/gaussian-splatting-cuda/external ./external
COPY deps/gaussian-splatting-cuda/includes ./includes
COPY deps/gaussian-splatting-cuda/parameter ./parameter
COPY deps/gaussian-splatting-cuda/src ./src
COPY deps/gaussian-splatting-cuda/CMakeLists.txt ./CMakeLists.txt
# Download and extract libtorch
RUN wget https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip \
&& unzip -o libtorch-cxx11-abi-shared-with-deps-2.0.1+cu118.zip -d external/ \
&& rm libtorch-cxx11-abi-shared-with-deps-2.0.1+cu118.zip
# Build (on CPU, this will add compute_35 as build target, which we do not want)
ENV PATH /usr/local/cuda/bin:$PATH
ENV LD_LIBRARY_PATH /usr/local/cuda/lib64:$LD_LIBRARY_PATH
RUN cmake -B build -D CMAKE_BUILD_TYPE=Release -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ -D CUDA_VERSION=11.7 \
&& cmake --build build -- -j8
# --- Runner Stage ---
FROM nvidia/cuda:11.7.1-devel-ubuntu20.04 AS runner
WORKDIR /app
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libeigen3-dev \
libflann-dev \
libfreeimage-dev \
libmetis-dev \
libgoogle-glog-dev \
libgtest-dev \
libsqlite3-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libceres-dev \
imagemagick \
ffmpeg \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Copy built artifact from colmap_builder stage
COPY --from=colmap_builder /usr/local/bin/colmap /usr/local/bin/colmap
# Copy built artifact from builder stage
COPY --from=gs_builder /workdir/build/gaussian_splatting_cuda /usr/local/bin/gaussian_splatting_cuda
COPY --from=gs_builder /workdir/external/libtorch /usr/local/libtorch
COPY --from=gs_builder /workdir/parameter /usr/local/bin/parameter
# Setup environment
ENV PATH /usr/local/libtorch/bin:/usr/local/cuda/bin:$PATH
ENV LD_LIBRARY_PATH /usr/local/libtorch/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
ENV LC_ALL C
ENV LANG C
# Install python dependencies
COPY requirements.txt /app/requirements.txt
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install -r /app/requirements.txt
COPY services /app/services
COPY server.py /app/server.py
# Fix bug
RUN mkdir /parameter && cp /usr/local/bin/parameter/optimization_params.json /parameter/optimization_params.json
EXPOSE 7860
CMD [ "python3", "-u", "/app/server.py" ]