Skip to content

Commit ff58924

Browse files
committed
add tensorflow add-ons
1 parent 809e202 commit ff58924

File tree

1 file changed

+393
-0
lines changed

1 file changed

+393
-0
lines changed
Lines changed: 393 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,393 @@
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

Comments
 (0)