Dockerfile 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. FROM nvidia/cuda:11.7.1-devel-ubuntu18.04
  2. ENV DEBIAN_FRONTEND noninteractive
  3. ##############################################################################
  4. # Temporary Installation Directory
  5. ##############################################################################
  6. ENV STAGE_DIR=/tmp
  7. RUN mkdir -p ${STAGE_DIR}
  8. ##############################################################################
  9. # Installation/Basic Utilities
  10. ##############################################################################
  11. RUN apt-get update && \
  12. apt-get install -y --no-install-recommends \
  13. software-properties-common build-essential autotools-dev \
  14. nfs-common pdsh \
  15. cmake g++ gcc \
  16. curl wget vim tmux emacs less unzip \
  17. htop iftop iotop ca-certificates openssh-client openssh-server \
  18. rsync iputils-ping net-tools sudo \
  19. llvm-9-dev
  20. ##############################################################################
  21. # Installation Latest Git
  22. ##############################################################################
  23. RUN add-apt-repository ppa:git-core/ppa -y && \
  24. apt-get update && \
  25. apt-get install -y git && \
  26. git --version
  27. ##############################################################################
  28. # Client Liveness & Uncomment Port 22 for SSH Daemon
  29. ##############################################################################
  30. # Keep SSH client alive from server side
  31. RUN echo "ClientAliveInterval 30" >> /etc/ssh/sshd_config
  32. RUN cp /etc/ssh/sshd_config ${STAGE_DIR}/sshd_config && \
  33. sed "0,/^#Port 22/s//Port 22/" ${STAGE_DIR}/sshd_config > /etc/ssh/sshd_config
  34. ##############################################################################
  35. # Mellanox OFED
  36. ##############################################################################
  37. ENV MLNX_OFED_VERSION=4.6-1.0.1.1
  38. RUN apt-get install -y libnuma-dev
  39. RUN cd ${STAGE_DIR} && \
  40. 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 - && \
  41. cd MLNX_OFED_LINUX-${MLNX_OFED_VERSION}-ubuntu18.04-x86_64 && \
  42. ./mlnxofedinstall --user-space-only --without-fw-update --all -q && \
  43. cd ${STAGE_DIR} && \
  44. rm -rf ${STAGE_DIR}/MLNX_OFED_LINUX-${MLNX_OFED_VERSION}-ubuntu18.04-x86_64*
  45. ##############################################################################
  46. # nv_peer_mem
  47. ##############################################################################
  48. ENV NV_PEER_MEM_VERSION=1.1
  49. ENV NV_PEER_MEM_TAG=1.1-0
  50. RUN mkdir -p ${STAGE_DIR} && \
  51. git clone https://github.com/Mellanox/nv_peer_memory.git --branch ${NV_PEER_MEM_TAG} ${STAGE_DIR}/nv_peer_memory && \
  52. cd ${STAGE_DIR}/nv_peer_memory && \
  53. ./build_module.sh && \
  54. cd ${STAGE_DIR} && \
  55. tar xzf ${STAGE_DIR}/nvidia-peer-memory_${NV_PEER_MEM_VERSION}.orig.tar.gz && \
  56. cd ${STAGE_DIR}/nvidia-peer-memory-${NV_PEER_MEM_VERSION} && \
  57. apt-get update && \
  58. apt-get install -y dkms && \
  59. dpkg-buildpackage -us -uc && \
  60. dpkg -i ${STAGE_DIR}/nvidia-peer-memory_${NV_PEER_MEM_TAG}_all.deb
  61. ##############################################################################
  62. # OPENMPI
  63. ##############################################################################
  64. ENV OPENMPI_BASEVERSION=4.0
  65. ENV OPENMPI_VERSION=${OPENMPI_BASEVERSION}.1
  66. RUN cd ${STAGE_DIR} && \
  67. wget -q -O - https://download.open-mpi.org/release/open-mpi/v${OPENMPI_BASEVERSION}/openmpi-${OPENMPI_VERSION}.tar.gz | tar xzf - && \
  68. cd openmpi-${OPENMPI_VERSION} && \
  69. ./configure --prefix=/usr/local/openmpi-${OPENMPI_VERSION} && \
  70. make -j"$(nproc)" install && \
  71. ln -s /usr/local/openmpi-${OPENMPI_VERSION} /usr/local/mpi && \
  72. # Sanity check:
  73. test -f /usr/local/mpi/bin/mpic++ && \
  74. cd ${STAGE_DIR} && \
  75. rm -r ${STAGE_DIR}/openmpi-${OPENMPI_VERSION}
  76. ENV PATH=/usr/local/mpi/bin:${PATH} \
  77. LD_LIBRARY_PATH=/usr/local/lib:/usr/local/mpi/lib:/usr/local/mpi/lib64:${LD_LIBRARY_PATH}
  78. # Create a wrapper for OpenMPI to allow running as root by default
  79. RUN mv /usr/local/mpi/bin/mpirun /usr/local/mpi/bin/mpirun.real && \
  80. echo '#!/bin/bash' > /usr/local/mpi/bin/mpirun && \
  81. echo 'mpirun.real --allow-run-as-root --prefix /usr/local/mpi "$@"' >> /usr/local/mpi/bin/mpirun && \
  82. chmod a+x /usr/local/mpi/bin/mpirun
  83. ##############################################################################
  84. # Python
  85. ##############################################################################
  86. ENV DEBIAN_FRONTEND=noninteractive
  87. ENV PYTHON_VERSION=3
  88. RUN apt-get install -y python3 python3-dev && \
  89. rm -f /usr/bin/python && \
  90. ln -s /usr/bin/python3 /usr/bin/python && \
  91. curl -O https://bootstrap.pypa.io/pip/3.6/get-pip.py && \
  92. python get-pip.py && \
  93. rm get-pip.py && \
  94. pip install --upgrade pip && \
  95. # Print python an pip version
  96. python -V && pip -V
  97. RUN pip install pyyaml
  98. RUN pip install ipython
  99. ##############################################################################
  100. # TensorFlow
  101. ##############################################################################
  102. ENV TENSORFLOW_VERSION=1.15.2
  103. RUN pip install tensorflow-gpu==${TENSORFLOW_VERSION}
  104. ##############################################################################
  105. # Some Packages
  106. ##############################################################################
  107. RUN apt-get update && \
  108. apt-get install -y --no-install-recommends \
  109. libsndfile-dev \
  110. libcupti-dev \
  111. libjpeg-dev \
  112. libpng-dev \
  113. screen \
  114. libaio-dev
  115. RUN pip install psutil \
  116. yappi \
  117. cffi \
  118. ipdb \
  119. pandas \
  120. matplotlib \
  121. py3nvml \
  122. pyarrow \
  123. graphviz \
  124. astor \
  125. boto3 \
  126. tqdm \
  127. sentencepiece \
  128. msgpack \
  129. requests \
  130. pandas \
  131. sphinx \
  132. sphinx_rtd_theme \
  133. scipy \
  134. numpy \
  135. sklearn \
  136. scikit-learn \
  137. nvidia-ml-py3 \
  138. mpi4py \
  139. cupy-cuda100
  140. ##############################################################################
  141. ## SSH daemon port inside container cannot conflict with host OS port
  142. ###############################################################################
  143. ENV SSH_PORT=2222
  144. RUN cat /etc/ssh/sshd_config > ${STAGE_DIR}/sshd_config && \
  145. sed "0,/^Port 22/s//Port ${SSH_PORT}/" ${STAGE_DIR}/sshd_config > /etc/ssh/sshd_config
  146. ##############################################################################
  147. # PyTorch
  148. ##############################################################################
  149. ENV PYTORCH_VERSION=1.9.0
  150. ENV TORCHVISION_VERSION=0.10.0
  151. ENV TENSORBOARDX_VERSION=1.8
  152. RUN pip install torch==${PYTORCH_VERSION}
  153. RUN pip install torchvision==${TORCHVISION_VERSION}
  154. RUN pip install tensorboardX==${TENSORBOARDX_VERSION}
  155. ##############################################################################
  156. # PyYAML build issue
  157. # https://stackoverflow.com/a/53926898
  158. ##############################################################################
  159. RUN rm -rf /usr/lib/python3/dist-packages/yaml && \
  160. rm -rf /usr/lib/python3/dist-packages/PyYAML-*
  161. ##############################################################################
  162. ## Add deepspeed user
  163. ###############################################################################
  164. # Add a deepspeed user with user id 8877
  165. #RUN useradd --create-home --uid 8877 deepspeed
  166. RUN useradd --create-home --uid 1000 --shell /bin/bash deepspeed
  167. RUN usermod -aG sudo deepspeed
  168. RUN echo "deepspeed ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  169. # # Change to non-root privilege
  170. USER deepspeed
  171. ##############################################################################
  172. # DeepSpeed
  173. ##############################################################################
  174. RUN git clone https://github.com/microsoft/DeepSpeed.git ${STAGE_DIR}/DeepSpeed
  175. RUN cd ${STAGE_DIR}/DeepSpeed && \
  176. git checkout . && \
  177. git checkout master && \
  178. ./install.sh --pip_sudo
  179. RUN rm -rf ${STAGE_DIR}/DeepSpeed
  180. RUN python -c "import deepspeed; print(deepspeed.__version__)"