Projet

Général

Profil

Actions

Singularity

Description

Un conteneur Linux est une technologie de virtualisation qui partage le noyau Linux avec la machine hôte tout en offrant un espace isolé pour exécuter des logiciels.

Singularity est une solution de conteneur conçue pour le HPC qui permet la portabilité entre environnements Linux, la reproductibilité des résultats et la mobilité entre clusters.

Les utilisateurs font alors tourner un autre système d'exploitation dont ils peuvent contrôler la pile logiciels sans avoir besoin des privilèges root sur la machine hôte.

Singularity est installé sur Poudlard (module load singularity-ce/latest), ce qui permet de lancer à l'intérieur d'un job, un conteneur à l'environnement logiciel contrôlé.

Exemple d'utilisation

Openfoam

Par exemple, si vous avez besoin d'utiliser la dernière version, vous pouvez utiliser une image disponible dans Docker Hub comme je vais le détailler ici. Si vous avez besoin d'avoir une installation spécifique, il faudra passer par un fichier de définition et construire votre propre image.

  • Récupération de l'image sur le cluster:

    $ module load singularity/latest
    $ singularity pull docker://opencfd/openfoam-default:2506
    
  • Inspection de l'image pour voir comment elle a été généré:

    $ singularity inspect --deffile openfoam-default_2506.sif
    
  • Obtention d'un shell dans le conteneur:

    $ singularity shell openfoam-default_2506.sif
    ou
    $ ./openfoam-default_2506.sif
    
  • Tester l'exécution d'un exemple
    ** Script test_pitzDaily.bash

    #!/usr/bin/env bash
    source /usr/lib/openfoam/openfoam2506/etc/bashrc
    rm -rf pitzDaily
    cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily/ /scratch/$USER/
    cd pitzDaily
    #Create mesh
    blockMesh
    #Run openfoam via the solver simpleFoam
    simpleFoam
    

    ** Exécution du script dans le conteneur

    $ singularity exec openfoam-default_2506.sif bash test_pitzDaily.bash
    
  • Script de soumission

    #!/bin/bash
    #
    #SBATCH -J openfoam_test_pitzdaily
    #SBATCH -o %x-%j.out
    #SBATCH -N 1
    #SBATCH --tasks-per-node=4
    #SBATCH -t 30:00
    echo "#############################"
    echo "User:" $USER
    echo "Date:" `date`
    echo "Host:" `hostname`
    echo "Directory:" `pwd`
    echo "SLURM_JOB_NAME:" $SLURM_JOB_NAME
    echo "SLURM_JOB_ID:" $SLURM_JOB_ID
    echo "SLURM_NODELIST: " $SLURM_NODELIST
    echo "#############################"
    echo
    cd /scratch/$USER
    module load singularity-ce/latest
    IMG=openfoam-default_2506.sif
    cp $IMG $TMPDIR
    echo
    singularity exec $TMPDIR/$IMG bash test_pitzDaily.bash
    echo
    echo "Job finished" 
    
  • Pour une exécution en parallèle, vous pouvez modifier le script comme ceci:

    #!/bin/bash
    #
    #SBATCH -J openfoam_test_pitzdaily
    #SBATCH -o %x-%j.out
    #SBATCH -N 1
    #SBATCH --tasks-per-node=4
    #SBATCH -t 30:00
    echo "#############################"
    echo "User:" $USER
    echo "Date:" `date`
    echo "Host:" `hostname`
    echo "Directory:" `pwd`
    echo "SLURM_JOB_NAME:" $SLURM_JOB_NAME
    echo "SLURM_JOB_ID:" $SLURM_JOB_ID
    echo "SLURM_NODELIST: " $SLURM_NODELIST
    echo "#############################"
    echo
    cd /scratch/$USER
    module load singularity-ce/latest openmpi/4.1.4/gcc/8.5.0
    IMG=openfoam-default_2506.sif
    cp $IMG $TMPDIR
    echo
    mpirun -np $SLURM_NTASKS singularity exec $TMPDIR/$IMG bash test_pitzDaily.bash
    echo
    echo "Job finished" 
    

Mis à jour par Minerva Mac Gonagall il y a environ un mois · 5 révisions