Инструкция по сборке контейнера Singularity для пользователя кластера ЦКП ДВО РАН¶
Для создания нового контейнера необходимо подготовить bootstrap файл, называющийся Singularity
. Файл можно создать в любом текстовом редакторе.
Примерное содержимое файла приведено ниже:
$ cat Singularity
BootStrap: debootstrap MirrorURL: http://ports.ubuntu.com/ OSVersion: xenial %setup working_dir=$(pwd) pkgs_dir=${working_dir}/pkgs ifiles_dir=/8061c1d0 echo "Copying installation files into container..." mkdir -p ${SINGULARITY_ROOTFS}${ifiles_dir} cp ${pkgs_dir}/libcudnn6*.deb ${SINGULARITY_ROOTFS}${ifiles_dir} cp ${pkgs_dir}/cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el.deb ${SINGULARITY_ROOTFS}${ifiles_dir} cp ${pkgs_dir}/mldl-repo-local_4.0.0_ppc64el.deb ${SINGULARITY_ROOTFS}${ifiles_dir} echo "Unpacking NVIDIA driver into container..." ar p ${pkgs_dir}/libcuda1-384_384.59-0ubuntu1_ppc64el.deb data.tar.xz | tar xJ -C ${SINGULARITY_ROOTFS}/ ./usr ar p ${pkgs_dir}/nvidia-384_384.59-0ubuntu1_ppc64el.deb data.tar.xz | tar xJ -C ${SINGULARITY_ROOTFS}/ ./usr %runscript . /opt/DL/$DL_FRWK/bin/$DL_FRWK-activate exec /usr/bin/python "$@" %post export pkgs_dir=/8061c1d0 export CUDA_VERSION=8-0 export CUDA_PKG_VERSION=$CUDA_VERSION apt-get install -y --no-install-recommends apt-utils software-properties-common apt-get update && apt-get -y upgrade add-apt-repository universe && add-apt-repository multiverse && apt-get update dpkg -i $pkgs_dir/cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el.deb rm $pkgs_dir/cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el.deb apt-get update && apt-get install -y --no-install-recommends \ cuda-core-$CUDA_PKG_VERSION \ cuda-nvrtc-$CUDA_PKG_VERSION \ cuda-nvgraph-$CUDA_PKG_VERSION \ cuda-cusolver-$CUDA_PKG_VERSION \ cuda-cublas-$CUDA_PKG_VERSION \ cuda-cufft-$CUDA_PKG_VERSION \ cuda-curand-$CUDA_PKG_VERSION \ cuda-cusparse-$CUDA_PKG_VERSION \ cuda-npp-$CUDA_PKG_VERSION \ cuda-cudart-$CUDA_PKG_VERSION && \ ln -s cuda-8.0 /usr/local/cuda ls /var/cuda-repo-8-0-local-ga2v2 ar p /var/cuda-repo-8-0-local-ga2v2/cuda-command-line-tools-8-0_8.0.61-1_ppc64el.deb data.tar.gz | tar xz -C / ./usr/local/cuda-8.0/extras dpkg -i $pkgs_dir/libcudnn6*.deb rm $pkgs_dir/libcudnn6*.deb echo "/usr/lib/nvidia-384" >> /etc/ld.so.conf.d/nvidia.conf echo "/usr/local/cuda-8.0/extras/CUPTI/lib64" >> /etc/ld.so.conf.d/cuda.conf echo "/usr/lib/powerpc64le-linux-gnu" >> /etc/ld.so.conf.d/cuda.conf ldconfig dpkg -i $pkgs_dir/mldl-repo*.deb rm $pkgs_dir/mldl-repo*.deb apt-get update && apt-get -y upgrade apt-get install -y --no-install-recommends power-mldl=4.0.0 apt-get update apt-get -y upgrade apt-get update && apt-get install -y --no-install-recommends \ python-pip \ python3-pip \ openjdk-8-jdk \ libcurl3-dev \ vim \ libcupti-dev LC_ALL=C pip install --no-cache-dir \ keras rm -rf $pkgs_dir
Данный bootstrap задает процедуру создания контейнера с ОС Ubuntu 16 Xenial, драйвером Nvidia 384, CUDA 8, CuDNN 6, пакетом машинного обучения PowerAI ver. 4, включающим в себя фреймворки: Bazel, Caffe (BVLC, IBM, NVIDIA), Chainer, DIGITS, NCCL, OpenBLAS, OpenMPI, TensorFlow, Theano, Torch. Также, контейнер включает фреймворк-надстройку Keras (with Tensorflow backend).
Часть скрипта %runscript
отвечает за описание поведения контейнера после команды run. В данном случае:
%runscript . /opt/DL/$DL_FRWK/bin/$DL_FRWK-activate exec /usr/bin/python "$@"
выполняет активацию фреймворка машинного обучения из PowerAI, заданного в переменной среды DL_FRWK (например, tensorflow). Также, exec /usr/bin/python "$
@"
задает исполнение c интерпретатором python команды/файла, указанного в аргументах при запуске контейнера. Например: ./ubuntu.img ./mnist.py
запускает в контейнере ubuntu.img
скрипт mnist.py
.
Дополнительные пакеты могут быть установлены через apt-get install
или pip install
в соответствующих частях скрипта. Например LC_ALL=C pip install --no-cache-dir keras
устанавливает пакет keras.
Если есть необходимость в применении других пакетов, их также можно установить, добавив в скрипт, например:
pip install --no-cache-dir \ keras \ Lasagne
После того, как bootstrap скрипт Singularity
подготовлен необходимо создать пустой контейнер и собрать его с использованием bootstrap скрипта.
singularity create --size 8192 ./container_name.img singularity bootstrap ./container_name.img Singularity
Здесь singularity create --size 8192 ./container_name.img
создает контейнер container_name размером 8192 мб. Далее, singularity create --size 8192 ./container_name.img
запускает подготовку контейнера с применением bootstrap файла.
Для запуска скрипта mnist.py
, находящегося в текущей директории, с применением вышеописанного контейнера ubuntu.img
нужно ввести: ./ubuntu.img ./mnist.py