Containers
Apptainer (recently Singularity) is the most common containerization technology on HPC systems. Containers are a popular way to control software environments on various different platforms/machines.
With containers you can:
- Create a reproducible version of your research software
- Improve reproducibility of your research
- Run software (mostly) independent from underlying hardware and operating system
- Improve software quality, e.g. through continuous integration
Different Compiler Versions Using Apptainer
The container management program singularity is installed on the system. If you need a different compiler version in order to be able to compile your program, you can download them as an image from the docker hub by using the command
apptainer pull docker://gcc:<version> # e.g. version 13.2
This will create a .sif file in your current directory. You can then use the command
apptainer shell <your-.sif-file> # e.g. gcc_13.2.sif
to get an interactive shell using the specified compiler version. Compile your program in the way you need to and log out of the container in the usual way.
Apptainer and MPI
Apptainer can be used to execute MPI-processes in a container. This can be done by using
mpirun apptainer exec <your-.sif-file> </path/to/program>
Note the order of calling MPI and apptainer. Apptainer will connect the MPI runtime environment on the host system with the MPI processes in the container.
Also see https://apptainer.org/docs/user/main/mpi.html for more on this topic.
Apptainer and GPUs
You can use GPUs from within a container. Most important is running a gpu-prepared container with the --nv
flag, e.g.:
apptainer run --nv tensorflow_latest-gpu.sif
For more information, please read in the apptainer documentation: https://apptainer.org/docs/user/main/gpu.html.