Apptainer#
Apptainer es una plataforma que permite ejecutar contenedores en entornos HPC. Originalmente, Singularity era la herramienta utilizada para este propósito pero su desarrollo fue bifurcado en Apptainer, que ahora es el estándar recomendado en la comunidad de HPC.
Warning
Singularity ha quedado obsoleto y será eliminado en el futuro, por lo que recomendamos a los usuarios migrar sus flujos de trabajo a Apptainer.
Apptainer ofrece soporte para ejecutar contenedores con soporte MPI y GPU. Además puede integrarse en scripts de Slurm sin problemas.
Uso de Apptainer en TeideHPC#
Info
Actualmente, tenemos disponible la versión 1.3.6 de Apptainer en TeideHPC.
Podemos cargar el software utilizando modules:
Contenedores de Docker#
Apptainer usa su propio formato de contenedor .sif
por lo que los contenedores de Docker deben convertirse aunque esto se hace automáticamente sin intervención del usuario.
Descargar contenedores desde DockerHub#
Info
Las descargas de contenedores deben realizarse siempre desde los login nodes, que tienen acceso a Internet, y no desde los nodos de cómputo.
Ejemplo de descarga de una imagen de DockerHub para su uso en el clúster:
Esto generará un archivo de imagen en el directorio actual:
Para ejecutar el contenedor:
Warning
No está permitido ejecutar software en los nodos de login. Usa salloc
para solicitar un nodo de cómputo y ejecutarlo allí.
Si necesitamos construir un contenedor desde Docker, podemos usar:
Ejecutar un contenedor#
Para ejecutar un contenedor:
También podemos ejecutar un comando específico dentro del contenedor:
Para obtener una shell interactiva dentro del contenedor:
Ejecutar un contenedor en Slurm#
Podemos ejecutar Apptainer en Slurm como cualquier otro software:
#!/bin/bash -l
#SBATCH -J apptainer_job
#SBATCH -p batch
#SBATCH --nodes=1
#SBATCH -o out.log
#SBATCH -e err.log
module load Apptainer/1.3.6
apptainer run $HOME/hello-world_latest.sif
Slurm tratará apptainer como un software más, es decir, que le aplicará las mismas restricciones de recursos, en cuanto a cpu, memoria y tiempo que el resto del software.
Uso con MPI#
Tip
El soporte para MPI dependerá del software que vayamos a ejecutar, no de Apptainer. Por tanto, pedimos a los usuarios que lean la documentación de su software detenidamente antes de ejecutar cualquier cosa.
Si el software dentro del contenedor soporta MPI, podemos ejecutarlo con srun
:
#!/bin/bash -l
#SBATCH -J apptainer_mpi
#SBATCH -p batch
#SBATCH --nodes=2
#SBATCH -o out.log
#SBATCH -e err.log
module purge
module load Apptainer/1.3.6
module load GCC/12.2.0 OpenMPI/4.1.4
srun apptainer run $HOME/hello-world_latest.sif
Uso con GPU#
Tip
El soporte para GPU dependerá del software que vayamos a ejecutar, no de Apptainer. Por tanto, pedimos a los usuarios que lean la documentación de su software detenidamente antes de ejecutar cualquier cosa.
Para utilizar GPU, debemos añadir el parámetro --nv (enable Nvidia support)
a apptainer:
Ejemplo en Slurm:
#!/bin/bash -l
#SBATCH -J apptainer_gpu
#SBATCH -p gpu
#SBATCH --cpus-per-task=4
#SBATCH --gpus=a100:1
#SBATCH -o out.log
#SBATCH -e err.log
module purge
module load Apptainer/1.3.6
apptainer run --nv $HOME/hello-world_latest.sif
Otras opciones#
Podemos montar directorios del host dentro del contenedor con -B
: