File size: 5,142 Bytes
67b7e1c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c0bb512
 
67b7e1c
5ff1b90
 
 
 
 
 
 
 
 
 
67b7e1c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5ff1b90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67b7e1c
 
 
5ff1b90
ff5be78
 
c0bb512
67b7e1c
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#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" ]