1
+ FROM nvidia/cuda:10.0-devel-ubuntu18.04
2
+
3
+ # TensorFlow version is tightly coupled to CUDA and cuDNN so it should be selected carefully
4
+ ENV TENSORFLOW_VERSION=2.1.0
5
+ ENV PYTORCH_VERSION=1.4.0
6
+ ENV TORCHVISION_VERSION=0.5.0
7
+ ENV TORCHAUDIO_VERSION=0.4.0
8
+ ENV TORCHTEXT_VERSION=0.5.0
9
+ ENV TENSORBOARDX_VERSION=1.9
10
+ ENV MXNET_VERSION=1.5.1
11
+ ARG CUDA=10.0
12
+ ARG LIBNVINFER=6.0.1-1
13
+ ARG LIBNVINFER_MAJOR_VERSION=6
14
+ ENV CUDNN_VERSION=7.6.0.64-1+cuda10.0
15
+ ENV NCCL_VERSION=2.4.8-1+cuda10.0
16
+ ENV DEBIAN_FRONTEND=noninteractive
17
+ ENV mecab_dicdir /usr/local/lib/mecab/dic/mecab-ko-dic
18
+
19
+ # Python 2.7 or 3.7 is supported by Ubuntu Bionic out of the box
20
+ ARG python=3.7
21
+ ENV PYTHON_VERSION=${python}
22
+
23
+ ENV PYTHONUNBUFFERED=1 \
24
+ LD_LIBRARY_PATH="/usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/lib64:/usr/local/nvidia/lib64:/usr/local/cuda/lib64/stubs:/usr/include/x64_64-linux-gnu" \
25
+ PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin/mecab" \
26
+ LANG=C.UTF-8
27
+
28
+ # Set default shell to /bin/bash
29
+ SHELL ["/bin/bash" , "-cu" ]
30
+
31
+ RUN apt-get update -y && \
32
+ apt-get install -y --no-install-recommends software-properties-common && \
33
+ add-apt-repository -y "deb http://security.ubuntu.com/ubuntu xenial-security main" && \
34
+ apt-get update -y && \
35
+ apt-get install -y --allow-downgrades --allow-change-held-packages --no-install-recommends \
36
+ build-essential \
37
+ ca-certificates \
38
+ gcc g++ make \
39
+ gfortran \
40
+ dkms \
41
+ git \
42
+ curl \
43
+ vim \
44
+ yasm \
45
+ wget zip unzip \
46
+ ca-certificates \
47
+ software-properties-common \
48
+ openssh-client openssh-server \
49
+ libssl-dev \
50
+ libmpdec2 \
51
+ pdsh curl sudo net-tools \
52
+ iputils-ping \
53
+ libcudnn7=${CUDNN_VERSION} \
54
+ libnccl2=${NCCL_VERSION} \
55
+ libnccl-dev=${NCCL_VERSION} \
56
+ libjpeg-dev \
57
+ libpng-dev \
58
+ libsm6 \
59
+ libxext6 \
60
+ libxrender-dev \
61
+ libcairo2-dev libgirepository1.0-dev pkg-config gir1.2-gtk-3.0 \
62
+ libgeos-dev libgeos++-dev \
63
+ mime-support \
64
+ proj-bin libproj-dev libgeos-dev libgeos++-dev graphviz \
65
+ python${PYTHON_VERSION} \
66
+ python${PYTHON_VERSION}-dev \
67
+ libnuma-dev \
68
+ libjasper-dev \
69
+ libtiff-dev \
70
+ libavcodec-dev \
71
+ libavformat-dev \
72
+ libswscale-dev \
73
+ libxine2-dev \
74
+ libv4l-dev \
75
+ libboost-dev \
76
+ libboost-system-dev \
77
+ libboost-filesystem-dev \
78
+ libfreetype6-dev \
79
+ fonts-nanum \
80
+ fonts-nanum-coding \
81
+ fonts-nanum-extra
82
+
83
+ RUN rm /usr/bin/python3 /usr/bin/python3m && \
84
+ ln -s /usr/bin/python3.7 /usr/bin/python3 && \
85
+ ln -s /usr/bin/python3.7m /usr/bin/python3m
86
+
87
+ RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
88
+ apt-get update -y && \
89
+ apt-get install -y nodejs
90
+
91
+ RUN apt-get update && \
92
+ apt-get install -y --no-install-recommends libnvinfer${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda${CUDA} \
93
+ libnvinfer-dev=${LIBNVINFER}+cuda${CUDA} \
94
+ libnvinfer-plugin-dev=${LIBNVINFER}+cuda${CUDA} \
95
+ libnvinfer-plugin${LIBNVINFER_MAJOR_VERSION}=${LIBNVINFER}+cuda${CUDA} \
96
+ && apt-get clean \
97
+ && rm -rf /var/lib/apt/lists/*
98
+
99
+ # OFED
100
+ ENV STAGE_DIR=/tmp
101
+ RUN mkdir -p ${STAGE_DIR}
102
+ ENV MLNX_OFED_VERSION=4.6-1.0.1.1
103
+ RUN cd ${STAGE_DIR} && \
104
+ wget -q -O - http://www.mellanox.com/downloads/ofed/MLNX_OFED-${MLNX_OFED_VERSION}/MLNX_OFED_LINUX-${MLNX_OFED_VERSION}-ubuntu18.04-x86_64.tgz | tar xzf -
105
+ RUN cd ${STAGE_DIR}/MLNX_OFED_LINUX-${MLNX_OFED_VERSION}-ubuntu18.04-x86_64 && \
106
+ ./mlnxofedinstall --user-space-only --without-fw-update --all -q && \
107
+ cd ${STAGE_DIR} && \
108
+ rm -rf ${STAGE_DIR}/MLNX_OFED_LINUX-${MLNX_OFED_VERSION}-ubuntu18.04-x86_64*
109
+
110
+ # nvidia-peer
111
+ RUN mkdir -p ${STAGE_DIR} && \
112
+ git clone https://github.com/Mellanox/nv_peer_memory.git ${STAGE_DIR}/nv_peer_memory && \
113
+ cd ${STAGE_DIR}/nv_peer_memory && \
114
+ ./build_module.sh && \
115
+ cd ${STAGE_DIR} && \
116
+ tar xzf ${STAGE_DIR}/nvidia-peer-memory_1.0.orig.tar.gz && \
117
+ cd ${STAGE_DIR}/nvidia-peer-memory-1.0 && \
118
+ dpkg-buildpackage -us -uc && \
119
+ dpkg -i ${STAGE_DIR}/nvidia-peer-memory_1.0-8_all.deb
120
+
121
+ # Install CUDA-10.0 + cuDNN 7.6.0
122
+ RUN ln -s /usr/local/cuda-10.0 /usr/local/cuda && \
123
+ ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.0 /usr/local/cuda/lib64/libcudnn.so && \
124
+ ldconfig
125
+
126
+ RUN if [[ "${PYTHON_VERSION}" == "3.7" ]]; then \
127
+ apt-get install -y python${PYTHON_VERSION}-distutils python-apt ; \
128
+ fi
129
+
130
+ RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 2
131
+
132
+ WORKDIR /tmp
133
+ RUN curl https://bootstrap.pypa.io/get-pip.py | python3 && \
134
+ python3 -m pip install --no-cache-dir -U setuptools pip
135
+
136
+ # Install TensorFlow, Keras, PyTorch and MXNet
137
+ RUN python3 -m pip install pip --no-cache-dir -Iv \
138
+ Cython==0.29.13 \
139
+ numpy==1.16.3 \
140
+ scipy==1.4.1 \
141
+ scikit-image==0.16.2 \
142
+ scikit-learn==0.22.2 \
143
+ tornado==6.0.4 \
144
+ pystan==2.19.1.1 \
145
+ pycairo==1.19.0 \
146
+ matplotlib==3.1.3
147
+ RUN python3 -m pip install pip --no-cache-dir \
148
+ Cartopy==0.17.0 \
149
+ notebook==6.0.3
150
+
151
+ WORKDIR /tmp
152
+ COPY ./requirements.20.03.txt /tmp
153
+ RUN python3 -m pip install --no-cache-dir -Ir requirements.20.03.txt
154
+
155
+ RUN python3 -m pip install pip --no-cache-dir -Iv \
156
+ pandas==1.0.1 \
157
+ tensorflow-gpu==${TENSORFLOW_VERSION} \
158
+ tensorflow-datasets==${TENSORFLOW_VERSION} \
159
+ tensorflow_probability \
160
+ tensorflow-addons \
161
+ neural-structured-learning \
162
+ tensorflow-model-optimization \
163
+ tensorflow-transform \
164
+ tensorflow-hub \
165
+ tensorflow_text \
166
+ tensorflow-graphics-gpu \
167
+ tensorflow_text \
168
+ tensorflow-data-validation \
169
+ tfx-bsl \
170
+ tf-agents \
171
+ tensorflow-lattice \
172
+ tensorflow_ranking \
173
+ # tensorflow-compression \
174
+ jupyter-tensorboard==0.2.0 \
175
+ tensorwatch==0.8.10 \
176
+ jupyterlab-nvdashboard==0.2.0 \
177
+ ngraph-tensorflow-bridge
178
+
179
+ RUN python3 -m pip install --no-cache-dir \
180
+ https://download.pytorch.org/whl/cu100/torch-${PYTORCH_VERSION}%2Bcu100-cp37-cp37m-linux_x86_64.whl \
181
+ https://download.pytorch.org/whl/cu100/torchvision-${TORCHVISION_VERSION}%2Bcu100-cp37-cp37m-linux_x86_64.whl \
182
+ https://download.pytorch.org/whl/torchaudio-${TORCHAUDIO_VERSION}-cp37-cp37m-linux_x86_64.whl \
183
+ torchtext==${TORCHTEXT_VERSION} && \
184
+ python3 -m pip install --no-cache-dir tensorboardX==${TENSORBOARDX_VERSION}
185
+ RUN python3 -m pip install --no-cache-dir mxnet-cu100==${MXNET_VERSION}
186
+
187
+ RUN python3 -m pip install --no-cache-dir --extra-index-url \
188
+ https://developer.download.nvidia.com/compute/redist/cuda/10.0 \
189
+ nvidia-dali \
190
+ nvidia-dali-tf-plugin
191
+
192
+ RUN python3 -m pip install --no-cache-dir -Iv \
193
+ konlpy h5py && \
194
+ rm -f /tmp/*.whl /tmp/requirements.20.03.txt
195
+
196
+ RUN apt-get update && \
197
+ apt-get install -y \
198
+ openjdk-8-jdk \
199
+ automake \
200
+ && \
201
+ cd /tmp && \
202
+ curl -LO https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz && \
203
+ tar zxfv mecab-0.996-ko-0.9.2.tar.gz && \
204
+ cd mecab-0.996-ko-0.9.2 && \
205
+ ./configure && \
206
+ make -j$(nproc) && \
207
+ make check && \
208
+ make install
209
+
210
+ RUN echo "Install mecab-ko-dic" && \
211
+ cd /tmp && \
212
+ ldconfig && \
213
+ curl -LO https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz && \
214
+ tar -zxvf mecab-ko-dic-2.1.1-20180720.tar.gz && \
215
+ cd mecab-ko-dic-2.1.1-20180720 && \
216
+ ./autogen.sh && \
217
+ ./configure && \
218
+ make -j$(nproc) && \
219
+ sh -c 'echo "dicdir=/usr/local/lib/mecab/dic/mecab-ko-dic" > /usr/local/etc/mecabrc' && \
220
+ make install && \
221
+ cd /tmp && \
222
+ git clone https://bitbucket.org/eunjeon/mecab-python-0.996.git && \
223
+ python3 -m pip install /tmp/mecab-python-0.996
224
+
225
+ RUN ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h && \
226
+ apt-get install -y \
227
+ libgstreamer1.0-dev \
228
+ libgstreamer-plugins-base1.0-dev \
229
+ libgtk-3-dev \
230
+ libtbb-dev \
231
+ libatlas-base-dev \
232
+ libdc1394-22-dev \
233
+ libxvidcore-dev \
234
+ libfaac-dev \
235
+ libmp3lame-dev \
236
+ libtheora-dev \
237
+ libvorbis-dev \
238
+ libxvidcore-dev \
239
+ libopencore-amrnb-dev libopencore-amrwb-dev \
240
+ libavresample-dev \
241
+ x264 \
242
+ libx264-dev \
243
+ v4l-utils \
244
+ libprotobuf-dev protobuf-compiler \
245
+ libgoogle-glog-dev libgflags-dev \
246
+ libgphoto2-dev \
247
+ libeigen3-dev \
248
+ libhdf5-dev \
249
+ && \
250
+ apt-get clean && \
251
+ rm -rf /var/lib/apt/lists/
252
+
253
+ RUN wget https://github.com/Kitware/CMake/releases/download/v3.15.3/cmake-3.15.3-Linux-x86_64.sh \
254
+ -q -O /tmp/cmake-install.sh && \
255
+ chmod u+x /tmp/cmake-install.sh && \
256
+ mkdir /usr/bin/cmake && \
257
+ /tmp/cmake-install.sh --skip-license --prefix=/usr/bin/cmake && \
258
+ rm /tmp/cmake-install.sh
259
+
260
+ ENV PATH="/usr/bin/cmake/bin:${PATH}"
261
+
262
+ WORKDIR /tmp
263
+ ENV OPENCV_VERSION="4.1.0"
264
+ RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
265
+ wget -O opencv-contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
266
+ unzip ${OPENCV_VERSION}.zip && \
267
+ unzip opencv-contrib.zip && \
268
+ mkdir opencv-${OPENCV_VERSION}/cmake_binary && \
269
+ cd opencv-${OPENCV_VERSION}/cmake_binary && \
270
+ cmake \
271
+ -DCMAKE_BUILD_TYPE=RELEASE \
272
+ -D BUILD_TIFF=ON \
273
+ -D BUILD_opencv_java=OFF \
274
+ -D WITH_CUDA=ON \
275
+ -D CUDA_NVCC_FLAGS=--expt-relaxed-constexpr \
276
+ -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0 \
277
+ -D ENABLE_FAST_MATH=1 \
278
+ -D CUDA_FAST_MATH=1 \
279
+ -D WITH_CUBLAS=1 \
280
+ -D WITH_OPENGL=ON \
281
+ -D WITH_OPENCL=ON \
282
+ -D WITH_IPP=ON \
283
+ -D WITH_TBB=ON \
284
+ -D WITH_EIGEN=ON \
285
+ -D WITH_V4L=ON \
286
+ -D BUILD_TESTS=OFF \
287
+ -D BUILD_PERF_TESTS=OFF \
288
+ -D OPENCV_EXTRA_MODULES_PATH="../../opencv_contrib-4.1.0/modules" \
289
+ -D CMAKE_BUILD_TYPE=RELEASE \
290
+ -D CMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)" ) \
291
+ -D PYTHON_EXECUTABLE=$(which python3) \
292
+ -D PYTHON_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())" ) \
293
+ -D PYTHON_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" ) \
294
+ .. 2>&1 | tee cmake_messages.txt && \
295
+ make -j$(nproc) && \
296
+ make install && \
297
+ cd /tmp && \
298
+ rm -fr opencv*
299
+
300
+ RUN python3 -m pip install --no-cache-dir opencv-python && \
301
+ rm -rf /root/.cache
302
+
303
+ # add 19.09.06
304
+ RUN git clone --recursive https://github.com/dmlc/xgboost && \
305
+ cd xgboost && \
306
+ mkdir build && \
307
+ cd build && \
308
+ cmake .. -DUSE_CUDA=ON -DUSE_NCCL=ON && \
309
+ make -j$(nproc) && \
310
+ cd ../python-package && \
311
+ python3 setup.py install
312
+
313
+ RUN git clone --recursive https://github.com/Microsoft/LightGBM && \
314
+ cd LightGBM && \
315
+ mkdir build ; cd build && \
316
+ cmake -DUSE_GPU=1 -DOpenCL_LIBRARY=/usr/local/cuda-10.0/lib64/libOpenCL.so -DOpenCL_INCLUDE_DIR=/usr/local/cuda-10.0/include/ .. && \
317
+ make -j$(nproc) && \
318
+ cd ../python-package && \
319
+ python3 setup.py install --precompile
320
+
321
+ # add 19.09.06
322
+ RUN git clone https://github.com/scikit-optimize/scikit-optimize.git && \
323
+ cd scikit-optimize && \
324
+ python3 -m pip install -r requirements.txt && \
325
+ python3 setup.py develop
326
+
327
+ # Install Open MPI
328
+ RUN mkdir /tmp/openmpi && \
329
+ cd /tmp/openmpi && \
330
+ wget https://www.open-mpi.org/software/ompi/v4.0/downloads/openmpi-4.0.1.tar.gz && \
331
+ tar zxf openmpi-4.0.1.tar.gz && \
332
+ cd openmpi-4.0.1 && \
333
+ ./configure --enable-orterun-prefix-by-default && \
334
+ make -j $(nproc) all && \
335
+ make install && \
336
+ ldconfig && \
337
+ rm -rf /tmp/openmp*i
338
+
339
+ # Install Horovod, temporarily using CUDA stubs
340
+ RUN ldconfig /usr/local/cuda/targets/x86_64-linux/lib/stubs && \
341
+ HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_GPU_BROADCAST=NCCL \
342
+ HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITHOUT_PYTORCH=1 HOROVOD_WITHOUT_MXNET=1 \
343
+ pip install --no-cache-dir horovod==0.19.0 && \
344
+ ldconfig
345
+
346
+
347
+ RUN python3 -m pip install --no-cache-dir \
348
+ mpi4py==3.0.3 \
349
+ nni && \
350
+ rm -rf /root/.cache && \
351
+ rm -rf /tmp/*
352
+
353
+ # Install OpenSSH for MPI to communicate between containers
354
+ RUN apt-get install -y --no-install-recommends openssh-client openssh-server && \
355
+ mkdir -p /var/run/sshd
356
+
357
+ # Allow OpenSSH to talk to containers without asking for confirmation
358
+ RUN cat /etc/ssh/ssh_config | grep -v StrictHostKeyChecking > /etc/ssh/ssh_config.new && \
359
+ echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config.new && \
360
+ mv /etc/ssh/ssh_config.new /etc/ssh/ssh_config
361
+
362
+ # Install ipython kernelspec
363
+ Run python3 -m ipykernel install --display-name "Tensorflow 2.1 on Python 3.7 (CUDA 10.0)" && \
364
+ cat /usr/local/share/jupyter/kernels/python3/kernel.json
365
+
366
+ # Jupyter notebook extension
367
+ RUN mkdir -p /home/work/.jupyter/nbextension
368
+ WORKDIR /home/work/.jupyter/nbextension
369
+
370
+ RUN jupyter nbextensions_configurator enable && \
371
+ jupyter contrib nbextension install && \
372
+ jupyter nbextension enable --py --sys-prefix widgetsnbextension && \
373
+ jupyter contrib nbextension install && \
374
+ jupyter serverextension enable --py jupyterlab --sys-prefix && \
375
+ jupyter labextension install @jupyter-widgets/jupyterlab-manager && \
376
+ git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding && \
377
+ jupyter nbextension enable /home/work/.jupyter/nbextension/vim_binding/vim_binding
378
+
379
+ # Backend.AI specifics
380
+ LABEL ai.backend.kernelspec="1" \
381
+ ai.backend.envs.corecount="OPENBLAS_NUM_THREADS,OMP_NUM_THREADS,NPROC" \
382
+ ai.backend.features="batch query uid-match user-input" \
383
+ ai.backend.base-distro="ubuntu16.04" \
384
+ ai.backend.resource.min.cpu="1" \
385
+ ai.backend.resource.min.mem="1g" \
386
+ ai.backend.resource.min.cuda.device=1 \
387
+ ai.backend.resource.min.cuda.shares=0.1 \
388
+ ai.backend.runtime-type="python" \
389
+ ai.backend.runtime-path="/usr/bin/python3" \
390
+ ai.backend.service-ports="ipython:pty:3000,tensorboard:http:6006,jupyter:http:8080,jupyterlab:http:8090"
391
+
392
+ WORKDIR /home/work
393
+ # vim: ft=dockerfile
0 commit comments