Singularity

De NLHPC

¿Qué es?

Singularity es un programa informático gratuito , multiplataforma y de código abierto que realiza la virtualización a nivel del sistema operativo, también conocida como containers.

Uno de los principales usos de Singularity es llevar contenedores y reproducibilidad a la informática científica y al mundo de la informática de alto rendimiento (HPC).

Los contenedores de Singularity se pueden usar para empaquetar flujos de trabajo científicos completos, software y bibliotecas, e incluso datos. Esto significa que no tiene que pedirle al administrador del clúster que instale nada por usted; puede ponerlo en un contenedor de Singularity y ejecutarlo.

El software Singularity puede importar sus imágenes de Docker sin tener Docker instalado o ser un superusuario.

¿Necesitas compartir tu código? Póngalo en un contenedor de Singularity y su colaborador no tendrá que pasar por la molestia de instalar dependencias faltantes. ¿Necesita ejecutar un sistema operativo completamente diferente? Puede "cambiar" el sistema operativo de su host por otro diferente dentro de un contenedor de Singularity

Modulos

Se encuentra disponible en:

Lmod

  • Anaconda3/5.3.0 squashfs-tools/4.4

Ejemplos de Lanzador

Importar imagen de Singularity

Para este ejemplo utilizaremos la imagen de Singularity hello-world (shub://singularityhub/hello-world), crearemos un directorio llamado Ejemplo y nos posicionaremos en el directorio creado:

prueba@leftraru1:~$ mkdir Ejemplo
prueba@leftraru1:~$ cd Ejemplo/

Cargar módulo de Singularity:

prueba@leftraru1:~$ ml Anaconda3/5.3.0 squashfs-tools/4.4

Importar imagen de Singularity:

prueba@leftraru1:~/Ejemplo$ singularity pull shub://singularityhub/hello-world
INFO:    Downloading shub image
 59.75 MiB / 59.75 MiB [=====================================================================================================================================================] 100.00% 12.41 MiB/s 4s
prueba@leftraru1:~/Ejemplo$ ll
total 57344
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 10:46 hello-world_latest.sif

Ejecutando imagen:

Como se puede observar el resultado de ejecutar el contenedor es la palabra: hello-world

prueba@leftraru1:~/Ejemplo$ singularity run hello-world_latest.sif
INFO:    Convert SIF file to sandbox...
Hello-world
INFO:    Cleaning up image...

Generando Script

Ejemplo de script para lanzar en la partición general.

Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 192 Gb de Ram declarados en el script:

prueba@leftraru1:~/Ejemplo$ vim script_44cores.sh

Ejemplo de Script Slurm:

#!/bin/bash
# ----------------SLURM Parameters----------------
#SBATCH -J Hello-world
#SBATCH -p general
#SBATCH -n 44
#SBATCH --ntasks-per-node=44
#SBATCH --mem=192000
#SBATCH --mail-user=prueba@nlhpc.cl
#SBATCH --mail-type=ALL
#SBATCH -o hello-world_%j.out
#SBATCH -e hello-world_%j.err
 
#Modulos Necesarios
ml Anaconda3/5.3.0 squashfs-tools/4.4
 
#Comandos
srun singularity run hello-world_latest.sif

Lanzar script:

prueba@leftraru1:~/Ejemplo$ sbatch script_44cores.sh
Submitted batch job 19051335

Revisar estado del trabajo:

prueba@leftraru1:~/Ejemplo$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
          19051335   general Hello-wo prueba  R       0:12      1 sn045

Revisar estado de simulación: (trabajo finalizado correctamente)

prueba@leftraru1:~/Ejemplo$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

Revisión de inicio del trabajo mediante correo:

Inicio Trabajo 19051335 .jpg

Revisión de finalización de trabajo mediante correo:

Finalización Trabajo 19051335 .jpg

La tarea fue ejecutada en 3 minutos con 04 segundos.

Resultados de la tarea (se generan 2 archivos, 1 archivo error y un 1 archivo de salida):

prueba@leftraru1:~/Ejemplo$ ll
total 61204
-rw-r--r-- 1 prueba nlhpc     3872 Jul 30 11:31 hello-world_19051335.err
-rw-r--r-- 1 prueba nlhpc      572 Jul 30 11:31 hello-world_19051335.out
-rwxr-xr-x 1 prueba nlhpc 62652447 Jul 30 11:16 hello-world_latest.sif
-rwxr-xr-x 1 prueba nlhpc      405 Jul 30 11:30 script_44cores.sh

Resumen de archivo hello-world_19051335.out:

Aquí podemos ver que la ejecución nos entregó como resultado 44 veces la ejecución del contenedor (la simulación fue ejecutada de forma correcta).

prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.out
44 hello-world_19051335.out
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.out
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world
hello-world

Resumen de archivo hello-world_19051335.err:

Aquí podemos ver que Singularity convirtió la imagen 44 veces y limpio la imagen 44 veces.

prueba@leftraru1:~/Ejemplo$ wc -l hello-world_19051335.err
88 hello-world_19051335.err
prueba@leftraru1:~/Ejemplo$ cat hello-world_19051335.err
Resumen
INFO:    Convert SIF file to sandbox...
INFO:    Convert SIF file to sandbox...
INFO:    Cleaning up image...
INFO:    Cleaning up image...