Apptainer is a container solution created by necessity for scientific and application-driven workloads. The Apptainer 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 Apptainer container and run.
(see webpage https://www.sylabs.io and/or https://apptainer.org/docs/user/latest/ for details)
Apptainer now requires fakeroot privilege for non-root users to create container images. Please contact an admin to set up your account with fakeroot. |
wget https://wiki.ncsa.illinois.edu/download/attachments/82518873/ubuntu1604-cuda92-ompi400.def apptainer build ubuntu1604-cuda92-ompi400.sif ubuntu1604-cuda92-ompi400.def |
apptainer pull docker://nvidia/cuda-ppc64le:9.2-cudnn7-devel-ubuntu16.04 |
Unlike docker (which provides an isolated filesystem), Singluarity mounts your home directory into the container. Be aware of this so you don't accidentally delete things in your home directory. |
mpirun -n 4 apptainer exec --nv /opt/apps/samples-image/ubuntu1604-cuda92-ompi400.sif hostname |
apptainer shell --nv /opt/apps/samples-image/ubuntu1604-cuda92-ompi400.sif |
By default, the Apptainer container filesystem is read-only. There are 2 options to build a writable Apptainer 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.
apptainer build --sandbox cuda-ppc64le/ docker://nvidia/cuda-ppc64le:9.2-cudnn7-devel-ubuntu16.0 apptainer shell --writable cuda-ppc64le/ |
The "--writable" option allows users to create a writable ext3 image. Root privileges are required to create writable containers.
apptainer build --writable cuda-ppc64le.sif docker://nvidia/cuda-ppc64le:9.2-cudnn7-devel-ubuntu16.04 apptainer shell --writable cuda-ppc64le.sif |
Convert it to a writable directory (a sandbox):
apptainer build --sandbox cuda-ppc64le-mod/ cuda-ppc64le.sif apptainer shell --writable cuda-ppc64le-mod/ |
Use an existing container as a target to build a new container
apptainer build --writable cuda-ppc64le-mod.sif cuda-ppc64le.sif apptainer shell --writable cuda-ppc64le-mod.sif |