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

Para el uso de Singularity debe cargar los módulos:

  • ml purge
  • ml intel/2022.00
  • ml singularityCE

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 purge
 prueba@leftraru1:~$ ml intel/2022.00
 prueba@leftraru1:~$ ml singularityCE

Crear carpeta temporal:

 prueba@leftraru1:~$ mkdir -p /tmp/singularityce/singularity/mnt/session

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:

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

Como se puede observar el resultado de ejecutar el contenedor es la palabra: Tacotacotaco

Generando Script

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

Utilizamos 1 nodos, 44 simulaciones por nodo y utilizamos los 187 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-per-cpu=4250
#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 purge
ml intel/2022.00
ml singularityCE

#Creación de carpeta
mkdir -p /tmp/singularityce/singularity/mnt/session

#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
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
Tacotacotaco
...

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...


Contenedores GPU AMD MI210

Contamos con un directorio especial que contiene una serie de imágenes listas para ser ejecutadas en las GPU AMD MI210. Basta con cargar el módulo de Singularity:

 
ml singularityCE/3.10.3 
[modules@leftraru1 ~]$ ls $IMAGES
chroma_3.43.0.sif            nwchem.sif                   ryzen-ai-tensorflow2_latest.sif
cp2k_2022.2.amd3.sif         openfoam_2206.1.amd3.sif     ryzen-ai-tensorflow_latest.sif
grid_0.8.2-20211213.sif      openmm_7.7.0_49.sif          specfem3d_9c0626d1-20201122.sif
gromacs_2022.3.amd1_174.sif  petsc_3.18.amd4.sif          specfem3d_globe_1ee10977-20210321.sif
lammps_2022.5.04_130.sif     pyfr_1.14.0_48.sif           trilinos_1.7.sif
namd_2.15a2-20211101.sif     relion_4.0.sif               uif-pytorch_uif1.2_rocm5.6.1_vai3.5_py3.8_pytorch1.13.sif
namd3_3.0a9.sif              ryzen-ai-pytorch_latest.sif  uif-tensorflow_uif1.2_rocm5.6.1_vai3.5_tensorflow2.12.sif

Ejemplo contenedor CP2K

#!/bin/bash
#---------------Script SBATCH - NLHPC ----------------
#SBATCH -J testamd
#SBATCH -p mi210
#SBATCH -n 1
#SBATCH --gres=gpu:1
#SBATCH -c 1
#SBATCH --mem-per-cpu=30354
#SBATCH --mail-user=test@correo.com
#SBATCH --mail-type=ALL
#SBATCH -o testamd_%j.out
#SBATCH -e testamd_%j.err

#-----------------Toolchain---------------------------
# ----------------Modulos----------------------------
ml singularityCE/3.10.3
# ----------------Comando--------------------------

singularity exec $IMAGES/cp2k_2022.2.amd3.sif mpirun -x NUM_CPUS=64 -x NUM_GPUS=6 -x RANK_STRIDE=6 -x OMP_NUM_THREADS=4 --oversubscribe -np 16 --bind-to none set_cpu_affinity.sh set_gpu_affinity.sh cp2k.psmp -i /opt/cp2k/benchmarks/QS_DM_LS/H2O-dft-ls.NREP2.inp -o /tmp/H2O-DFT-LS-NREP2-8GPU.txt