Singularity is a container solution created by necessity for scientific and application driven workloads. The Singularity containers can be used to package entire scientific workflows, software and libraries, and even data. This means that you don’t have to ask your cluster admin to install anything for you - you can put it in a Singularity container and run.
(see webpage https://www.sylabs.io and/or http://singularity.lbl.gov/ for details)
wget https://wiki.ncsa.illinois.edu/download/attachments/82518873/ubuntu1604-cuda92-ompi400.def singularity build ubuntu1604-cuda92-ompi400.simg ubuntu1604-cuda92-ompi400.def |
singularity pull docker://nvidia/cuda-ppc64le:9.2-cudnn7-devel-ubuntu16.04 |
mpirun -n 4 singularity exec --nv /opt/apps/samples-image/ubuntu1604-cuda92-ompi400.simg hostname |
singularity shell --nv /opt/apps/samples-image/ubuntu1604-cuda92-ompi400.simg |
By default, the Singularity container filesystem is read-only. There are 2 options to build a writable Singularity container.
The "--sandbox
" option allows users to create a container within a writable directory (called a sandbox). It’s possible to create a sandbox without root privileges, but to ensure proper file permissions it is recommended to do so as root.
singularity build --sandbox cuda-ppc64le/ docker://nvidia/cuda-ppc64le:9.2-cudnn7-devel-ubuntu16.0 singularity shell --writable cuda-ppc64le/ |
The "--writable"
option allows users to create a writable ext3 image. You must create writable containers as root.
singularity build --writable cuda-ppc64le.simg docker://nvidia/cuda-ppc64le:9.2-cudnn7-devel-ubuntu16.04 singularity shell --writable cuda-ppc64le.simg |
Convert it to a writable directory (a sandbox):
singularity build --sandbox cuda-ppc64le-mod/ cuda-ppc64le.simg singularity shell --writable cuda-ppc64le-mod/ |
Use an existing container as a target to build a new container
singularity build --writable cuda-ppc64le-mod.simg cuda-ppc64le.simg singularity shell --writable cuda-ppc64le-mod.simg |