Apptainer (Singularity)

Présentation

Singularity est une technologie de conteneurs, aussi appelée virtualisation légère (car on note peu ou pas de surcoût en performances comparé à une machine physique), développée originellement pour le HPC au Laurence Berkeley National Laboratory, U.S.A.

C’est un produit assez récent qui bénéficie d’une importante communauté d’utilisateurs, et qui se développe très vite. Le corollaire direct de cet intérêt c’est que les fonctionnalités évoluent très rapidement.

Important

Les versions récentes du logiciel proposé par le CC-IN2P3 sont issues du fork libre nommé Apptainer. La numération de version a évolué et a débuté à 1.0.0 qui correspond à la version 3.9.5 de Singularity. Les fonctionnalités de base sont conservées.

Utilisation de Apptainer

Apptainer est installé au CC-IN2P3 sur l’ensemble des serveurs interactifs ainsi que sur la plateforme de calcul. Les expériences du LHC s’intéressant également à cette technologie, le CC-IN2P3 a décidé de suivre les recommandations de WLCG et fournit la dernière version issue du dépôt EPEL. C’est la version de facto par défaut.

Note

Plusieurs (autres) versions sont disponibles au CC-IN2P3. Veuillez vous référer à la syntaxe du logiciel de gestion d’environnements pour lister et charger la version souhaitée.

Attention

Même utilisant apptainer, il reste toujours possible d’utiliser le nom singularity pour appeler le binaire, car un wrapper est fourni. Veuillez toutefois noter qu’il n’est pas maintenu par le CC-IN2P3, et pourrait être amené à disparaître.

Dépôt d’images

Le CC-IN2P3 propose un dépôt d’images Singularity/Apptainer (voir Politique d’utilisation et de gestion des images pour plus de détails) et fournit une image pour les versions majeures des distributions GNU/Linux.

Les images disponibles sont classées en deux catégories : celles pour la platforme de calcul HTC et celles pour le HPC (cette dernière catégorie inclut les images dédiées au GPU). Certaines images peuvent avoir été enrichies avec des logiciels supplémentaires en fonction des besoins exprimés (voir le nom ou les méta-données de l’image).

% ls /cvmfs/singularity.in2p3.fr/images/
HPC/  HTC/
% ls /cvmfs/singularity.in2p3.fr/images/HTC/
sl6/  ubuntu/

La plupart des images sont données au format SquashFS (extension simg ou sif pour les images construites avec Singularity v2 ou v3 respectivement). Notre support utilisateurs pourra vous aider à résoudre les problèmes que vous rencontrerez en utilisant l’une de ces images.

Instanciation et utilisation

On pourra alors lancer un script ou une commande dans une image en faisant comme suit :

% apptainer exec /cvmfs/singularity.in2p3.fr/images/HTC/sl6/sl6-cc-atlas.simg ls

Ici on instancie un conteneur dans lequel on lance la commande ls dont le résultat apparaîtra à l’écran. Une fois la commande exécutée, le conteneur est détruit. Pour l’ensemble des options pour cette commande, il faut se référer à la documentation.

Dans les exemples suivants on instancie un conteneur et on demande à y ouvrir un shell. On a alors l’environnement système inhérent au système d’exploitation choisi.

% apptainer shell /cvmfs/singularity.in2p3.fr/images/HTC/sl6/sl6-cc-atlas.simg
Singularity> cat /etc/redhat-release
Scientific Linux release 6.10 (Carbon)
Singularity>
% apptainer shell /cvmfs/singularity.in2p3.fr/images/HTC/ubuntu/ubuntu1804-CC3D.simg
Singularity> cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"
Singularity>

Note

Une commande exit ou un CTRL+D suffira à quitter (détruire) le conteneur et retourner au shell original.

Il est possible que des « WARNING » soit retournés à l’instanciation du conteneur. Cela vient en général soit d’une incohérence de configuration du conteneur ou simplement de l’importation des préférences du shell utilisateur dans le conteneur. Ce type de message ne nuit en rien à la bonne instanciation du conteneur.

Avec la version courante de Singularity/Apptainer, il faut préciser à l’instanciation du conteneur les points de montages extérieurs au conteneur que l’on souhaite retrouver à l’intérieur de celui-ci. On pourra par exemple vouloir conserver /sps afin d’y lire et écrire des données. Pour ce faire, on utilisera l’option bind comme suit :

--bind <système de fichiers à monter>:<point de montage dans le conteneur>

Le point de montage proposé doit exister dans l’image. Un point de montage par défaut existe dans le conteneur, il s’agit de /srv. On souhaite par exemple conserver dans le conteneur l’accès à un répertoire auquel nous sommes authorisés (ici, en exemple, /sps/phenix/), on fera donc :

% ls /sps/phenix/
Run2pp/  Run3dAu/  Run3pp/  Run4AuAu/  Run7AuAu/
% apptainer shell --bind /sps/phenix:/srv /cvmfs/singularity.in2p3.fr/images/HTC/sl6/sl6-cc-atlas.simg
Singularity> ls /srv
Run2pp/  Run3dAu/  Run3pp/  Run4AuAu/  Run7AuAu/
Singularity>

Les images officielles CC-IN2P3 possède également un point de montage /sps. On pourra ainsi monter deux systèmes de fichiers à l’intérieur du conteneur :

% apptainer shell --bind /sps/phenix:/sps --bind /pbs/throng/phenix:/srv /cvmfs/singularity.in2p3.fr/images/HTC/sl6/sl6-cc-atlas.simg

Note

Il faudra bien mettre à jour les chemins en conséquence de ces montages pour les scripts exécutés dans le conteneur.

Attention

Contrairement à la configuration de Singularity par défaut, le $HOME de l’utilisateur n’est pas monté automatiquement au CC-IN2P3

Comme dit ci-dessus, le montage de son $HOME n’est plus automatique dans le conteneur au CC-IN2P3. Si l’on souhaite pouvoir y accéder, il faudra donc utiliser l’option --bind ou -B afin de le monter. Le répertoire $HOME étant dans PBS, tout comme les $THRONG, il sera alors judicieux de monter la racine /pbs dans le conteneur, ce qui permettra d’accéder à la fois à son $HOME et à son $THRONG.

Soumettre un job dans un conteneur

Pour soumettre un job sur la platforme de calcul, on pourra utiliser la première méthode donnée ci-dessus, c’est-à-dire qu’on demandera à exécuter un script dans le conteneur.

Par example, considérons le script my_script.sh, qui aura besoin d’un environnement SL6. Le script, bien évidemment, aura les permissions pour être exécuté :

% chmod u+x my_script.sh

Le script mon_job_apptainer.sh, qui sera soumis à la plateforme de calcul, aura la syntaxe suivante :

#!/usr/bin/env bash
apptainer exec /cvmfs/singularity.in2p3.fr/images/HTC/sl6/sl6-cc-atlas.simg $HOME/mon_script.sh

En conséquence, la soumission de mon_job_apptainer.sh permettra à my_script.sh de s’exécuter à l’intérieur d’un conteneur SL6, qui est lui-même exécuté dans l’environnement de la plateforme de calcul.

Important

Si un utilisateur veut soumettre un job GPU en prenant en compte les drivers à travers une image Singularity/Apptainer, il doit ajouter le paramètre --nv à la ligne d’execution :

apptainer exec --nv [autres options] [image] [script]

Une autre commande intéressante pour exécuter un conteneur est la commande run, voir Singularity run.

Pour de plus amples informations, vous pouvez vous référer à la documentation officielle ou contacter notre support utilisateurs.

Pour aller plus loin, vous pouvez vous référer aux documents utilisés lors des formations dispensées par le CC-IN2P3.

Utilisation et de gestion des images

Les images fournies par le CC-IN2P3 ont été testées et sont disponibles via CVMFS :

% ls /cvmfs/singularity.in2p3.fr/images/
HPC/  HTC/
% ls /cvmfs/singularity.in2p3.fr/images/HTC/
sl6/  ubuntu/

Il vous est également possible de créer et d’importer vos images. Les images pouvant être importantes en taille, afin de minimiser la pénalité en performances lors de l’utilisation de celles-ci, il est conseillé de les stocker dans un stockage ayant de bonnes performances en lecture/écriture, et si possible d’éviter les formats d’archives compressées.

Pour répondre à cette contrainte, le Centre vous propose de les stocker dans un stratum 0 (un répertoire) de CVMFS créé spécifiquement pour ce besoin, et de préférence sous format d’arborescence de répertoires (on utilise alors une fonctionnalité de CVMFS qui permet de lire fichier par fichier à la demande et donc de minimiser le coût en lecture). Il s’agit du même dépôt que celui présenté précédemment.

Pour vous aider à importer une image au CC-IN2P3, vous devez contacter notre support utilisateurs.

Pour ces images non officielles, le CC-IN2P3 ne pourra garantir leur bon fonctionnement sur ses serveurs, ni ne sera tenu de fournir un support. Nos experts feront néanmoins le maximum pour vous aider à résoudre vos difficultés.

Un autre type d’image qui peut être intéressant, du fait de sa popularité, ce sont les images Docker. Singularity peut en effet instancier sans difficulté des images Docker. Pour plus d’information, veuillez vous référer à la section Singularity and Docker dans la documentation officielle.