Aller au contenu

Apptainer/Singularity dans VALERIA

Apptainer/Singularity est un logiciel de gestion de conteneurs applicatifs conçu pour les systèmes partagés, en particulier pour les environnements de calcul de haute performance (HPC). Apptainer est le nouveau nom du logiciel libre Singularity. Ce logiciel est accessible à même les modules fournis par l'Alliance de recherche numérique du Canada (Alliance).

Dans cette page, vous verrez les particularités pour une utilisation d'Apptainer dans l'environnement de calcul de VALERIA. La documentation d'Apptainer est riche en information pour l'utilisation du produit lui-même.

Prérequis

Particularités

Une préoccupation liée à Apptainer vient du stockage haute-performance (Lustre). Bien que généralement fonctionnel avec Apptainer, ce stockage pose quelques contraintes limitant certaines fonctions de Apptainer, principalement des fonctions de superposition de couches de systèmes de fichier.

Utiliser l'espace local aux nœuds de calcul permet de contourner ces limitations.

Bonnes pratiques

  • Utilisez des images « sif » pour l'exécution des conteneurs et non des images « sandbox ». Ces dernières sont toutefois adéquates pour l'assemblage des conteneurs sur l'espace local, en autant qu'elles soient ensuite converties en images « sif ». Les images « sif » peuvent être enregistrées et exécutées depuis le stockage haute-performance (Lustre) sans contraintes.

  • Utilisez les nœuds de calcul et réservez-vous des ressources de façon adéquate pour la création de vos images.

  • Utilisez l'espace de stockage temporaire du serveur hôte comme espace pour la cache, ainsi que pour l'espace temporaire d'Apptainer.

Exemple: En ligne de commande à partir du nœud de connexion

Utiliser un nœud de calcul et réservez-y suffisamment de ressources :

salloc --mem=2g --cpus-per-task=2

Chargez le module apptainer :

module load apptainer

Configurer la cache et l'espace temporaire d'Apptainer pour utiliser l'espace temporaire du serveur hôte, puis ajuster la variable APPTAINER_BIND au besoin :

export APPTAINER_TMPDIR=$( val-mktemp-dir )
export APPTAINER_CACHEDIR=$( val-mktemp-dir )
# export APPTAINER_BIND="/project,/scratch"  # valeur par défaut, ajustement facultatif

Assembler un conteneur depuis un conteneur générique :

apptainer build demo-apptainer.sif docker://python:latest

Éditer un conteneur en « sandbox » dans le répertoire temporaire du serveur hôte :

cd $SLURM_TMPDIR
apptainer build --sandbox hello/ docker://hello-world
apptainer shell --writable hello/

Convertir un « sandbox » en conteneur « sif » et l'enregistrer dans votre espace « scratch » :

apptainer build ~/scratch/hello.sif hello/

Script pour lancer l'image « sif » hello.sh :

#!/usr/bin/env bash
#SBATCH --mem=2g
#SBATCH --cpus-per-task=2
module load apptainer
source /etc/profile.d/val-utils.sh
export APPTAINER_TMPDIR=$( val-mktemp-dir )
export APPTAINER_CACHEDIR=$( val-mktemp-dir )
apptainer run ~/scratch/hello.sif

La ligne source /etc/profile.d/val-utils.sh est requise car les configurations sous profile.d ne sont pas disponibles par défaut pour les travaux en lots.

Lancer le script sur la plateforme de calcul :

sbatch hello.sh

Liens utiles