A continuación procedemos a mostrar cómo usar de forma básica sistema de contenerización para entornos HPC apptainer.
Procedemos a loguearnos en Drago.
ssh usuario@drago.csic.es
Procedemos a descargarnos imagen de hello-world desde el hub de singualarity, pero podría construirse una imagen a mano, o descargarse desde otros registros, esto es a modo prueba:
[usuario@drago31010015 ~]$ apptainer pull shub://singularityhub/hello-world
INFO: Downloading shub image
59.8MiB / 59.8MiB [============================================================================================================================================================================] 100 % 8.4 MiB/s 0s
[usuario@drago31010015 ~]$ ls -lh hello-world_latest.sif
-rwxr-x--- 1 usuario centro 44K Sep 11 10:47 hello-world_latest.sif
Ahora procedemos a ejecutar la imagen:
¡Atención! Los nodos de login están destinados únicamente para operaciones ligeras como descarga de imágenes o construcción de contenedores. No ejecute contenedores directamente en estos nodos, ya que puede generar una sobrecarga significativa que afecte a otros usuarios.
Ejecutamos una sesion interactiva en un nodo (para no sobrecargar el nodo de login) con:
srun -p generic -N1 -n1 --pty $SHELL -i
Para un nodo con GPU:
srun -p gpu -N1 -n1 --pty $SHELL -i
Ahora en un nodo ejecutamos el contenedor:
[usuario@drago3102064 ~]$ apptainer run hello-world_latest.sif
INFO: gocryptfs not found, will not be able to use gocryptfs
Tacotacotaco
[usuario@drago3102064 ~]$ apptainer exec hello-world_latest.sif cat /etc/os-release
INFO: gocryptfs not found, will not be able to use gocryptfs
NAME="Ubuntu"
VERSION="14.04.6 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.6 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
Procedemos a generar un script de slurm tal como se muestra a continuación haciendo uso del módulo apptainer.
# vim myapptainerjob.sh
#!/bin/bash
###################################################################################################################
############################################# DESCRIPCION ########################################################
###################################################################################################################
# Script de Prueba para Apptainer mediante Conda.
###################################################################################################################
################################# CONFIGURACION DE LA SOLICITUD AL CLUSTER #######################################
###################################################################################################################
#SBATCH -p generic # Particion elegida para el trabajo(cola)
#SBATCH -N 1 # Numero de nodods solicitados
#SBATCH -n 1 # Numero de cores(CPUs)
#SBATCH --mem=40G # memoria total solicitada
#SBATCH -t 0-01:00:00 # Duracion solicitada para el trabajo (D-HH:MM:SS)
#SBATCH --job-name=HelloWorld-Apptainer # Nombre del trabajo
#SBATCH -o HellowWord-Apptainer-%j.out # fichero de salida estandart
#SBATCH --mail-type=begin #Envia un correo cuando el trabajo inicia
#SBATCH --mail-type=end #Envia un correo cuando el trabajo finaliza
#SBATCH --mail-user=usuario@csic.es #Direccion de correo a la que enviar los mensajes
###################################################################################################################
########################################## COMANDO A EJECUTAR #####################################################
###################################################################################################################
# Fecha/Hora de inicio del trabajo
echo 'Trabajo iniciado en fecha:'
date
# COMANDOS
# Correr un contenedor
#apptainer run lolcow_latest.sif > salida.txt
# ejecutar una instruccion dentro de un contenedor
#apptainer exec lolcow_latest.sif cowsay moo > salida.txt
apptainer exec hello-world_latest.sif cat /etc/os-release > salida.txt
# Fecha/Hora de fin del trabajo
echo 'Trabajo finalizado en fecha:'
date
A continuación procedemos a ejectuar script con sbatch.
[usuario@drago31010015 ~]$ sbatch myapptainerjob.sh
[usuario@drago31010015 ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
578039 generic HelloWor usuario PD 0:00 1 (Priority)