#FROM nvidia/cuda:12.2.0-devel-ubuntu20.04 # let's try to downgrade the version of CUDA FROM nvidia/cuda:11.8.0-devel-ubuntu20.04 LABEL maintainer="Hugging Face" ARG DEBIAN_FRONTEND=noninteractive # Use login shell to read variables from `~/.profile` (to pass dynamic created variables between RUN commands) SHELL ["sh", "-lc"] # WORKDIR /workdir RUN apt update # base stuff RUN apt --yes install build-essential wget curl rpl RUN echo "Build started at: $(date "+%Y-%m-%d %H:%M")" # NodeJS - LEGACY/DEPRECATED WAY #RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - #RUN apt --yes install nodejs # NodeJS - NEW, MORE ANNOYING WAY RUN apt --yes install -y ca-certificates gnupg RUN mkdir -p /etc/apt/keyrings RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg ENV NODE_MAJOR=18 RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list RUN apt update RUN apt --yes install nodejs # git and file management RUN apt --yes install git git-lfs unzip RUN git lfs install # Python RUN apt --yes install python3 python3-pip RUN python3 -m pip install --no-cache-dir --upgrade pip # required for CMake it seems RUN apt --yes install libtbb-dev libeigen3-dev g++ libssl-dev checkinstall # The app require CMake 3.24+ but this version of Ubuntu only has the 3.16 # So we need to install a more recent version #RUN apt-get update \ # && rm -rf /var/lib/apt/lists/* \ RUN wget https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.24.1-Linux-x86_64.sh \ -q -O /tmp/cmake-install.sh \ && chmod u+x /tmp/cmake-install.sh \ && mkdir /opt/cmake-3.24.1 \ && /tmp/cmake-install.sh --skip-license --prefix=/opt/cmake-3.24.1 \ && rm /tmp/cmake-install.sh \ && ln -s /opt/cmake-3.24.1/bin/* /usr/local/bin # Install cmake 3.24 #RUN wget https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.22.1.tar.gz \ # && tar -zvxf cmake-3.24.1.tar.gz \ # && cd cmake-3.24.1 \ # && ./bootstrap \ # && make -j8 \ # && checkinstall --pkgname=cmake --pkgversion="3.20-custom" --default # Copy contents from 2 levels up #COPY . ./ # Download and extract libtorch #RUN wget https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip \ # && unzip libtorch-cxx11-abi-shared-with-deps-2.0.1+cu118.zip -d external/ # Set up a new user named "user" with user ID 1000 RUN useradd -o -u 1000 user # Switch to the "user" user USER user ENV PYTHON_BIN /usr/bin/python3 #ENV PATH /usr/local/cuda-12.2/bin:$PATH #ENV LD_LIBRARY_PATH /usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH # Let's try to downgrade ENV PATH /usr/local/cuda-11.8/bin:$PATH ENV LD_LIBRARY_PATH /usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH # Set home to the user's home directory ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH # Set the working directory to the user's home directory WORKDIR $HOME/app # Install app dependencies # A wildcard is used to ensure both package.json AND package-lock.json are copied # where available (npm@5+) COPY --chown=user package*.json $HOME/app RUN npm install # Copy the current directory contents into the container at $HOME/app setting the owner to the user COPY --chown=user . $HOME/app RUN git clone --recursive https://github.com/MrNeRF/gaussian-splatting-cuda WORKDIR $HOME/app/gaussian-splatting-cuda RUN wget https://download.pytorch.org/libtorch/cu118/libtorch-cxx11-abi-shared-with-deps-2.0.1%2Bcu118.zip RUN unzip libtorch-cxx11-abi-shared-with-deps-2.0.1+cu118.zip -d external/ RUN 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) # There seems to be a work around, see this thread: # https://github.com/MrNeRF/gaussian-splatting-cuda/issues/14 # here is the hack: # # Replace "native" by "all" # inspired by https://github.com/ztxz16/fastllm/pull/309/files # # CUDA architectures are defined as codes # by default CMake detected: # 3.5;5.0;8.0;8.6;8.9;9.0 # To see the mapping: https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/ # A10G and A100 -> Ampere -> sm_80, sm_86, sm_87 -> 8.0;8.6;8.7 # Nvidia T4 -> Turing -> sm_75 -> 7.5 # ? -> Lovelace -> sm_89 -> 8.6 # ? -> Hopper -> sm_90 -> 9.0 RUN find . -name CMakeLists.txt -exec sed -i 's/CUDA_ARCHITECTURES native/CUDA_ARCHITECTURES all/' {} + #RUN cmake -B build -D CMAKE_BUILD_TYPE=Release -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.2/ -D CUDA_VERSION=12.2 # Let's try to downgrade the version RUN cmake -B build -D CMAKE_BUILD_TYPE=Release -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.8/ -D CUDA_VERSION=11.8 RUN cmake --build build -- -j8 COPY --chown=user . $HOME/app/gaussian-splatting-cuda # Set the working directory to the user's home directory WORKDIR $HOME/app RUN echo "Build ended at: $(date "+%Y-%m-%d %H:%M")" EXPOSE 7860 # we can't use this (it time out) # CMD [ "xvfb-run", "-s", "-ac -screen 0 1920x1080x24", "npm", "run", "start" ] CMD [ "npm", "run", "start" ]