Projet

Général

Profil

Singularity » Historique » Version 5

Minerva Mac Gonagall, 29/10/2025 14:56

1 1 Argus Rusard
# Singularity
2
3 2 Minerva Mac Gonagall
## Description
4
5
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.
6
7
[Singularity](https://docs.sylabs.io/guides/latest/user-guide/) 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.
8
9
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.
10
11
Singularity est installé sur Poudlard (<code>module load singularity-ce/latest</code>), ce qui permet de lancer à l'intérieur d'un job, un conteneur à l'environnement logiciel contrôlé.
12
13
## Exemple d'utilisation
14
15
### Openfoam
16
17
Par exemple, si vous avez besoin d'utiliser la dernière version, vous pouvez utiliser une image disponible dans [Docker Hub](https://hub.docker.com/r/opencfd/openfoam-default) 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.
18
19
* Récupération de l'image sur le cluster:
20
```
21
$ module load singularity/latest
22
$ singularity pull docker://opencfd/openfoam-default:2506
23
```
24
25
* Inspection de l'image pour voir comment elle a été généré:
26
```
27
$ singularity inspect --deffile openfoam-default_2506.sif
28
```
29
30
* Obtention d'un shell dans le conteneur:
31
```
32
$ singularity shell openfoam-default_2506.sif
33
ou
34
$ ./openfoam-default_2506.sif
35
```
36
37
* Tester l'exécution d'un exemple
38 4 Minerva Mac Gonagall
** Script **test_pitzDaily.bash**
39 3 Minerva Mac Gonagall
```bash
40
#!/usr/bin/env bash
41
source /usr/lib/openfoam/openfoam2506/etc/bashrc
42
rm -rf pitzDaily
43
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily/ /scratch/$USER/
44
cd pitzDaily
45
#Create mesh
46
blockMesh
47
#Run openfoam via the solver simpleFoam
48
simpleFoam
49
```
50
** Exécution du script dans le conteneur
51 2 Minerva Mac Gonagall
```
52 1 Argus Rusard
$ singularity exec openfoam-default_2506.sif bash test_pitzDaily.bash
53 4 Minerva Mac Gonagall
```
54
55
* Script de soumission
56
```bash
57
#!/bin/bash
58
#
59
#SBATCH -J openfoam_test_pitzdaily
60
#SBATCH -o %x-%j.out
61
#SBATCH -N 1
62
#SBATCH --tasks-per-node=4
63
#SBATCH -t 30:00
64
echo "#############################"
65
echo "User:" $USER
66
echo "Date:" `date`
67
echo "Host:" `hostname`
68
echo "Directory:" `pwd`
69
echo "SLURM_JOB_NAME:" $SLURM_JOB_NAME
70
echo "SLURM_JOB_ID:" $SLURM_JOB_ID
71
echo "SLURM_NODELIST: " $SLURM_NODELIST
72
echo "#############################"
73
echo
74
cd /scratch/$USER
75
module load singularity-ce/latest
76
IMG=openfoam-default_2506.sif
77
cp $IMG $TMPDIR
78
echo
79
singularity exec $TMPDIR/$IMG bash test_pitzDaily.bash
80
echo
81
echo "Job finished" 
82 2 Minerva Mac Gonagall
```
83 5 Minerva Mac Gonagall
84
* Pour une exécution en parallèle, vous pouvez modifier le script comme ceci:
85
```bash
86
#!/bin/bash
87
#
88
#SBATCH -J openfoam_test_pitzdaily
89
#SBATCH -o %x-%j.out
90
#SBATCH -N 1
91
#SBATCH --tasks-per-node=4
92
#SBATCH -t 30:00
93
echo "#############################"
94
echo "User:" $USER
95
echo "Date:" `date`
96
echo "Host:" `hostname`
97
echo "Directory:" `pwd`
98
echo "SLURM_JOB_NAME:" $SLURM_JOB_NAME
99
echo "SLURM_JOB_ID:" $SLURM_JOB_ID
100
echo "SLURM_NODELIST: " $SLURM_NODELIST
101
echo "#############################"
102
echo
103
cd /scratch/$USER
104
module load singularity-ce/latest openmpi/4.1.4/gcc/8.5.0
105
IMG=openfoam-default_2506.sif
106
cp $IMG $TMPDIR
107
echo
108
mpirun -np $SLURM_NTASKS singularity exec $TMPDIR/$IMG bash test_pitzDaily.bash
109
echo
110
echo "Job finished" 
111
```