Aller au contenu

Singularity

Pour diverses raisons, nous ne pouvons pas utiliser docker dans nos machines ou dans une grille de calcul en général.

Le programme singularity est une alternative à docker qui permet à des utilisateurs sans privilèges de faire tourner des conteneurs.

Création d'un conteneur

Il y a 2 méthodes pour créer des conteneurs, la première étant à partir d'un docker déjà existant et l'autre qu'on construit soi-même à partir d'un fichier de définition.

Une fois construits, ces conteneurs sont immuables alors vous ne pouvez pas y écrire des fichiers de résultats ou y apporter des modificaitons. Toutefois, vous aurez accès à votre compte et vous pourrez y écrire. Vous pouvez aussi ajouter d'autres répertoires si vous avez besoin d'accès spécifiques.

Comme ces images requièrent beaucoup d'espace, il est préférable de les créer sur un disque local à la machine plutôt que dans votre compte. Aussi, lorsque votre conteneur est créé, vous pouvez vider la cache afin de libérer l'espace disque dans votre compte

singularity cache clean

Docker

Vous pouvez construire un conteneur singularity à partir d'une image docker et le faire tourner avoir accès à sudo ou à des privilèges élevés.

Par exemple, vous voulez utiliser le conteneur pytorch qui est créé par l'organisme. Vous pouvez construire une image avec la commande:

singularity build pytorch.sif docker://pytorch/pytorch

Fichier def

Pour pouvoir créer une image à partir de ce type de fichier, vous devrez avoir un ordinateur personnel avec singularity installé puisque cette méthode requiert des privilèges root que vous n'aurez pas au CIRRELT/GERAD.

Pour créer un conteneur de cette façon, vous pouvez utiliser la commande: singularity build ecole.sif ecole.def

Voici un exemple pour créer un conteneur avec le logiciel SCIP. Vous devez télécharger le logiciel et mettre l'archive quelque part pour pouvoir la copier dans l'image. La version utilisée dans cet exemple n'est pas la version la plus récente mais sert à illustrer le processus.

Bootstrap: docker
From: ubuntu:bionic

%files
    SCIPOptSuite-7.0.3-Linux-ubuntu.sh /root

%post
    echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

    apt-get -y update
    apt-get -y upgrade
    apt-get -y install gcc g++ gfortran liblapack3 libtbb2 libcliquer1 libopenblas-dev libgsl23
    bash /root/SCIPOptSuite-7.0.3-Linux-ubuntu.sh --skip-license
    rm /root/SCIPOptSuite-7.0.3-Linux-ubuntu.sh

%environment
    export LC_ALL=C

Utilisation d'un conteneur

Pour utiliser le conteneur, vous pouvez ensuite faire

    singularity shell pytorch.sif

Vous aurez alors accès aux outils qui y sont installés.

Si vous êtes sur une machine GPU et que vous voulez y accéder dans le conteneur, vous devez utiliser l'option --nv.