Skip to content

Commit c5936bd

Browse files
authored
Merge branch 'MesoNET:main' into main
2 parents a1c5ecc + 0b031e8 commit c5936bd

File tree

10 files changed

+460
-7
lines changed

10 files changed

+460
-7
lines changed

docs/arch_exp/turpan/Actualité.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,24 @@ Vous trouverez ici les dernières informations, annonces et mises à jour concer
99

1010
---
1111
## Dernières Nouvelles
12+
13+
### 💻➕ Environnement logiciel
14+
L’environnement logiciel a été enrichi avec les modules :
15+
- [La dynamique moléculaire](./logiciels/dynamique_moléculaire.md): LAMMPS, GROMACS et AMBER sont désormais disponible.
16+
- [Chdb](./logiciels/chdb.md): pour embarrassingly parallel sur un grand nombre d’entrées indépendantes.
17+
- L'utile `placement` a été mis à jour pour permettre une surveillance continue comme suit : Ajoutez à votre commande l’option **`--rt`**, qui par défaut affiche les informations toutes les 1 seconde, ou **--rt=t**, qui affiche les informations sur l’utilisation des ressources du code intégrées sur un intervalle de temps t. Pour plus d’informations, consultez placement --help.
18+
19+
20+
## Actualités Précédentes
21+
---
22+
### 💻➕ Environnement logiciel
1223
L’environnement logiciel a été enrichi avec les modules suivants :
1324

1425
- **MAQAO version 25.1.0** est désormais disponible. Cette dernière version offre des outils améliorés pour l’analyse et l’optimisation des performances.
1526

1627
- **SYCL avec AdaptiveCpp** pour ARM a été intégré avec succès, permettant une programmation hétérogène efficace et un meilleur support des plateformes basées sur ARM.
17-
18-
1928
---
2029

21-
## Actualités Précédentes
2230
### 🔄 **Mise à jour et maintenance de Turpan**
2331
**🗓️ <u>Date : 31 mars - 3 avril 2025</u>**
2432

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
---
2+
title: Chdb
3+
sidebar_position: 1
4+
---
5+
6+
Chdb est conçu pour exécuter en parallèle le même programme sur un grand nombre d’entrées indépendantes. Il s’adresse aux calculs dits « embarrassingly parallel », qui ne nécessitent aucune communication entre processus et ne font donc pas appel à MPI.
7+
## Les prérequis
8+
Il s’applique aux calculs ayant les caractéristiques suivantes :
9+
- Un exécutable séquentiel ou multithreadé est appliqué de manière répétitive sur un ensemble de fichiers d’entrée
10+
- Les noms des fichiers d’entrée se terminent tous par la même extension
11+
- Il n’y a pas de dépendance entre les différents traitements
12+
- Il n’y a donc pas de communication entre eux
13+
- Il est possible de lancer plusieurs instances de l’exécutable simultanément.
14+
15+
## Les précautions à pendre
16+
17+
:::danger Important
18+
chdb est un outil très puissant : s’il y a une erreur dans votre exécutable produisant des effets néfastes pour le système, en particulier des entrées-sorties intensives, ceux-ci seront démultipliés. La règle d’or est donc la suivante :
19+
20+
AVANT DE LANCER UN EXÉCUTABLE AVEC chdb, VÉRIFIEZ QUE CELUI-CI FONCTIONNE CORRECTEMENT EN LE LANÇANT en "STANDALONE". Si le comportement de votre exécutable est correct, alors seulement vous pouvez envisager de l’utiliser avec chdb.
21+
:::
22+
23+
## Initialiser l’environnement
24+
L’environnement doit être initialisé :
25+
>```shell
26+
> module load chdb/1.1
27+
>```
28+
29+
## La commande chdb
30+
31+
chdb permet d’exécuter un programme présentant les caractéristiques ci-dessus sur un nombre arbitraire de processeurs et de nœuds.
32+
33+
Lire la documentation `chdb --help`
34+
35+
#### On **doit passer** les paramètres suivants :
36+
37+
- `--in-dir` Le nom du répertoire dans lequel se trouvent les fichiers d’entrée. Ce répertoire doit exister
38+
- `--in-type` L’extension des fichiers que l’on considère comme fichiers d’entrée. Par exemple txt, pdb, etc.
39+
- `--out-files` Le nom du ou des fichiers créés par la commande, pour chaque exécution de la commande le nom est bien sûr différent, on utilise des "templates" qui seront remplacés avec le nom du fichier d’entrée. S’il y a plusieurs fichiers créés, leurs noms doivent être séparés par des virgules (,)
40+
- `--command-line` La ligne de commande utilisée. Il est possible de mettre un morceau de shell complet (une série de commandes séparée par des | par exemple). La seule restriction est que cette commande doit lire un fichier en entrée, écrire un ou plusieurs fichiers en sortie. La commande doit être mise entre guillemets, sinon elle sera interprétée par le shell
41+
- `--out-dir` Le nom du répertoire contenant les fichiers de sortie. Ce répertoire ne doit pas exister au démarrage de chdb
42+
43+
#### On peut passer en outre les paramètres suivants :
44+
45+
- `--work-dir` Avant d’exécuter la commande, chdb fera un chdir dans ce répertoire. Ce répertoire est souvent le même que --outdir, et les mêmes "templates" peuvent être utilisés.
46+
- `--create-environment` Vous pouvez entrer ici un "petit morceau" de code shell, qui sera exécuté après le chdir précédent et avant l’appel de la commande : cela vous permet par exemple de copier des fichiers d’entrée qui seraient obligatoirement présents dans le répertoire courant.
47+
- `--sort-by-size` Les fichiers présentés en entrée sont triés du plus gros au plus petit, si l’on fait l’hypothèse que le temps de traitement est proportionnel à la charge cela devrait permettre un meilleur équilibrage de la charge
48+
- `--block-size=10` Si on met 10 par exemple, cela signifie que les process mpi traitent les fichiers par blocs de 10. Cela permet de minimiser les communications lorsque le nombre de fichiers est important. S’il y a peu de fichiers, cette option risque par contre de générer un déséquilibrage de la charge.
49+
- `--in-files` Permet de ne traiter qu’une partie des fichiers du répertoire d’entrée
50+
51+
#### En cas d’erreur dans la commande exécutée :
52+
53+
Si la commande exécutée renvoie un code d’erreur (c’est-à -dire un statut différent de zéro), le comportement par défaut de chdb est d’arrêter tout traitement.
54+
55+
On peut toutefois modifier ce comportement en spécifiant le paramètre `--on-error` : le nom des fichiers ayant provoqué une erreur est conservé, cela permet de relancer chdb (avec des paramètres différents).
56+
57+
Pour cela, le paramètre `--in-files` sera utile car il permettra de ne relancer le programme que sur les fichiers d’entrée qui ont provoqué l’erreur.
58+
59+
### Chdb dans un script slurm
60+
Dans cet exemple simple, un script Bash génère les fichiers d’entrée et le programme qui exécute le traitement correspondant à chaque entrée.
61+
62+
>```shell
63+
> #create directories
64+
> mkdir -p ./chdb_test/input
65+
> mkdir -p ./chdb_test/dev_output
66+
> cd ./chdb_test
67+
> #create 20 small input files
68+
>for i in $(seq -f "%02g" 1 20); do
69+
> printf "This is file %s\n" "$i" > input/file_${i}.txt
70+
>done
71+
> # create a simple processing program (mon_programme)
72+
> # This program reads stdin (or a filename arg) and writes an output file.
73+
> cat > mon_programme.sh <<'EOF'
74+
> #!/bin/bash
75+
> # mon_programme.sh infile > outfile
76+
> infile="$1"
77+
> # simulate some work: sleep 0-2 seconds, print file contents with header
78+
> sleep $((RANDOM % 3))
79+
> echo "=== processed: $(basename "$infile") ==="
80+
> cat "$infile"
81+
> EOF
82+
> chmod +x mon_programme.sh
83+
> #test one run "standalone" (MANDATORY before using chdb)
84+
> ./mon_programme.sh input/file_01.txt > dev_output/file_01.out
85+
> cat dev_output/file_01.out
86+
>```
87+
88+
Ce script Slurm permet de lancer le code sur tous les fichiers d’entrée.
89+
```
90+
#!/bin/bash
91+
#SBATCH -J chdb_example
92+
#SBATCH -N 1
93+
#SBATCH -n 3
94+
#SBATCH --ntasks-per-node=3
95+
#SBATCH --ntasks-per-core=1
96+
#SBATCH --time=00:30:00
97+
#SBATCH --output=chdb.out
98+
99+
module purge
100+
module load chdb/1.1
101+
102+
103+
# IMPORTANT: ensure out directory does NOT exist
104+
rm -rf out_slurm
105+
mpirun chdb \
106+
--in-dir ./chdb_test/input \
107+
--in-type txt \
108+
--out-dir ./chdb_test/out_slurm \
109+
--out-files %out-dir%/%path% \
110+
--sort-by-size \
111+
--command "./mon_program.sh %in-dir%/%path% > %out-dir%/%path%"
112+
```
113+
114+
Les variables `%in-dir%/%path%` et `%out-dir%/%path%` correspondent aux chemins d’entrée et de sortie définis précédemment dans la commande par (`--out-dir`, `--in-dir`) ; elles seront détectées automatiquement.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
title: La dynamique moléculaire
3+
sidebar_position: 12
4+
---
5+
6+
Les modules disponibles sont:
7+
- LAMMPS
8+
- GROMACS
9+
- AMBER
10+
11+
## LAMMPS
12+
LAMMPS (Large-scale Atomic/Molecular Massively Parallel Simulator) est un logiciel de dynamique moléculaire hautement parallélisé, conçu pour simuler des systèmes atomiques, moléculaires ou mésoscopiques. Il est particulièrement utilisé pour la modélisation des matériaux, des polymères, des métaux et des fluides complexes.
13+
14+
« Il y a deux modules disponibles : l’un avec GNU-CUDA et l’autre avec le support de Kokkos. »
15+
16+
```
17+
#!/bin/bash
18+
#SBATCH -J lammps-run
19+
#SBATCH -N 1
20+
#SBATCH -n 2
21+
#SBATCH --gres=gpu:2
22+
#SBATCH --cpus-per-task=1
23+
24+
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
25+
export OMP_PROC_BIND=close
26+
```
27+
#### Kokkos GPU-MPI
28+
29+
```
30+
module purge
31+
module load lammps/lammps_kakos
32+
mpirun -np ${ntasks} --mca pml ucx -x UCX_NET_DEVICES=all --map-by ppr:80:node:PE=$SLURM_CPUS_PER_TASK --bind-to core lmp -k on g 2 -sf kk -pk kokkos -in in.file
33+
34+
```
35+
36+
#### GNU-CUDA
37+
```
38+
module purge
39+
module load lammps/lammps_gnu_cuda
40+
```
41+
Il existe plusieurs façons d’exécuter le programme ; vous pouvez en choisir une parmi les suivantes
42+
```
43+
# MPI
44+
mpirun -np $SLURM_NTASKS --mca pml ucx -x UCX_NET_DEVICES=all --map-by ppr:80:node:PE=$SLURM_CPUS_PER_TASK --bind-to core lmp -in in.file
45+
```
46+
```
47+
# MPI OMP (lmp -sf omp )
48+
mpirun -np $SLURM_NTASKS --mca pml ucx -x UCX_NET_DEVICES=all --map-by ppr:80:node:PE=$SLURM_CPUS_PER_TASK --bind-to core lmp -sf omp -in in.file
49+
```
50+
```
51+
# GPU cuda (lmp -sf gpu )
52+
export CUDA_VISIBLE_DEVIES=0,1
53+
mpirun -np $SLURM_NTASKS --mca pml ucx -x UCX_NET_DEVICES=all --map-by ppr:80:node:PE=$SLURM_CPUS_PER_TASK --bind-to core lmp -sf gpu -in in.file
54+
```
55+
56+
57+
## GROMACS
58+
GROMACS est un logiciel open source spécialisé dans la dynamique moléculaire, principalement utilisé pour l’étude des biomolécules comme les protéines, les lipides et les acides nucléiques. Il est reconnu pour sa rapidité et son efficacité sur les architectures parallèles, notamment les GPU.
59+
60+
```
61+
#!/bin/bash
62+
#SBATCH --job-name=gmx_mpi_gpu
63+
#SBATCH --nodes=1
64+
#SBATCH --ntasks-per-node=16
65+
#SBATCH --gres=gpu:2
66+
#SBATCH --cpus-per-task=4
67+
#SBATCH --time=00:30:00
68+
#SBATCH --partition=small
69+
#SBATCH -o gmx_%j.out
70+
#SBATCH -e gmx_%j.err
71+
72+
# Chargement des modules
73+
module purge
74+
module load gromacs/2024.6
75+
76+
source $GMXRC
77+
78+
# Commande MPI explicite
79+
mpirun -np $SLURM_NTASKS \
80+
--hostfile hosts.txt \
81+
--map-by ppr:$SLURM_NTASKS:node:PE=$SLURM_CPUS_PER_TASK \
82+
--bind-to core \
83+
gmx_mpi mdrun \
84+
-s benchPEP.tpr \
85+
-deffnm benchPEP \
86+
-ntomp $SLURM_CPUS_PER_TASK \
87+
-nb gpu \
88+
-pin on -v
89+
```
90+
:::danger Important
91+
N'oubliez pas `source $GMXRC`
92+
:::
93+
94+
:::tip Note
95+
Si vous lancez un calcul sans `mpirun`, et que vous ne définissez pas `--cpus-per-task` ou `OMP_NUM_THREADS`, le programme utilisera alors 80 threads
96+
:::
97+
98+
## AMBER
99+
AMBER (Assisted Model Building with Energy Refinement) est un ensemble de programmes destinés à la simulation de biomolécules par dynamique moléculaire. Il repose sur des champs de force précis et est couramment employé en chimie computationnelle et en biophysique pour l’étude des interactions et de la stabilité des systèmes biologiques.
100+
101+
```
102+
103+
#!/bin/bash
104+
#SBATCH -N 1
105+
#SBATCH -n 2
106+
#SBATCH --gres=gpu:2
107+
#SBATCH -p small
108+
#SBATCH --ntasks-per-node=2
109+
110+
module purge
111+
module load amber/gnu/25
112+
source $AMBERSH
113+
114+
mpirun -n 2 pmemd.cuda_SPFP.MPI -O -i mdin5 -o overall_output.out -p sys.prmtop -c sys4.rst -inf mdinfo5 -x sys4rot5.mdcrd
115+
116+
```
117+
:::danger Important
118+
N'oubliez pas `source $AMBERSH`
119+
:::
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import Tabs from '@theme/Tabs';
2+
import TabItem from '@theme/TabItem';
3+
4+
Les GPU A100 sont puissants, mais parfois une application n’a pas besoin de toute la capacité du GPU. La technologie MIG (Multi-Instance GPU) de NVIDIA permet de partitionner un seul GPU en plusieurs instances plus petites, chacune avec sa propre mémoire, ses cœurs et ses ressources de calcul dédiées.
5+
6+
L’utilisation de MIG améliorera l’efficacité de la machine et réduira aussi [votre consommation d’heures](../accounting/accounting-rules.md) au lieu d'utiliser Shared ou Full nœud.
7+
8+
:::info
9+
Pour savoir si votre application doit utiliser un MIG ou non, essayez-la d’abord sur un GPU complet et utilisez `placement` pour observer l’utilisation du GPU ``` placement --jobid={your_job_id} ``` qui permet de voir l’utilisation du GPU et de la mémoire, sachant qu’un GPU complet dispose de 80 Go de mémoire.
10+
:::
11+
12+
13+
## À propos de MIG sur Turpan
14+
Il existe 2 types d’instances MIG sur Turpan :
15+
#### 3g.40gb
16+
Cela représente environ 57 % d’un GPU A100 complet. À prendre en compte dans cette configuration :
17+
- Le nombre de cœurs CPU disponibles sur cette configuration est `20 cores`
18+
- La mémoire disponible est `40 GB`
19+
#### 2g.20gb
20+
Cela représente environ 40 % d’un GPU A100 complet. À prendre en compte dans cette configuration :
21+
- Le nombre de cœurs CPU disponibles sur cette configuration est `10 cores`
22+
- La mémoire disponible est `20 GB`
23+
24+
## Quand utiliser MIG
25+
Après avoir exécuté votre code une première fois sur un GPU complet, utilisez placement pour analyser l’usage du GPU.
26+
- Si votre **code utilise entre 50 % et 35 %**, moins de 20 cœurs et moins de 40 Go de mémoire, utilisez **`3g.40gb`**
27+
- Si votre code a besoin de plus de 40 Go ou de plus de 20 cœurs, restez sur le GPU complet.
28+
- Si votre **code utilise moins de 35 %**, 10 cœurs et moins de 20 Go de mémoire, utilisez **`2g.20gb`**
29+
- Si vous avez besoin de plus de 10 cœurs mais moins de 20, ou de plus de 20 Go de mémoire mais moins de 40 Go, suivez les indications de la configuration `3g.40gb`.
30+
31+
:::caution
32+
MIG est utilisable uniquement si votre application n’a besoin que d’un seul GPU.
33+
:::
34+
35+
## Comment utiliser MIG
36+
37+
<Tabs>
38+
<TabItem label="3g.40gb" value="3g.40gb" >
39+
40+
>```
41+
>#!/bin/bash
42+
>#SBATCH -N 1
43+
>#SBATCH -n 20
44+
>#SBATCH --gres=gpu:3g.40gb
45+
>#SBATCH -p 3g.40gb
46+
>
47+
>module purge
48+
>module load gnu/11.2.0
49+
>module load openmpi/gnu/4.1.4-gpu
50+
>
51+
>mpirun -n 20 ./exec
52+
>```
53+
54+
</TabItem>
55+
56+
<TabItem label="2g.20gb" value="2g.20gb" >
57+
58+
>```
59+
>#!/bin/bash
60+
>#SBATCH -N 1
61+
>#SBATCH -n 10
62+
>#SBATCH --gres=gpu:2g.20gb
63+
>#SBATCH -p 2g.20gb
64+
>
65+
>module purge
66+
>module load gnu/11.2.0
67+
>module load openmpi/gnu/4.1.4-gpu
68+
>
69+
>mpirun -n 10 ./exec
70+
>```
71+
72+
</TabItem>
73+
</Tabs>
74+
75+
:::danger Important
76+
- Impossible d’utiliser plus d’une instance MIG par job.
77+
- Évitez l’option --gpus-per-task, car elle considère automatiquement un GPU complet.
78+
:::

docs/arch_exp/turpan/jobs.md renamed to docs/arch_exp/turpan/soumettre_calcul/index.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Lancer un calcul
3-
sidebar_position: 4
3+
sidebar_position: 3
44
---
55

66
import Tabs from '@theme/Tabs';
@@ -20,7 +20,7 @@ L'utilisateur peut exécuter un maximum de 3 jobs simultanément, quelle que soi
2020
* **Exclusive**: Un job en partition exclusive réserve l’intégralité des nœuds qui lui sont attribués.
2121
* **Non exclusive**: Un job en partition non exclusive ne réserve pas l’intégralité du nœud, ce qui permet à d’un autre job (d’un autre utilisateur) de partager les mêmes ressources.
2222

23-
Le choix de la partition dépend des besoins en ressources, notamment en termes de nombre de cœurs par nœud et des limites de temps de calcul (walltime), veuillez consulter [les règles de comptabilisation des ressources ](./accounting/accounting-rules.md#exemples-).
23+
Le choix de la partition dépend des besoins en ressources, notamment en termes de nombre de cœurs par nœud et des limites de temps de calcul (walltime), veuillez consulter [les règles de comptabilisation des ressources ](../accounting/accounting-rules.md#exemples-).
2424
:::
2525

2626
Afin de ne pas monopoliser l’ensemble des noeuds du cluster en journée :
@@ -30,6 +30,11 @@ Afin de ne pas monopoliser l’ensemble des noeuds du cluster en journée :
3030

3131
Lorsque la partition est désactivée, les soumissions sont possibles, mais les jobs sont suspendus jusqu’à l’activation de la partition. A la désactivation, les jobs RUNNING sur la partition "full" ne sont pas arrêtés.
3232

33+
34+
:::info
35+
Si votre application n’utilise qu’un seul GPU et ne consomme pas toute la capacité du GPU, pensez à vérifier l’option [**MIG**](./MIG.md).
36+
:::
37+
3338
## Comment lancer un script `sbatch` ?
3439

3540
<Tabs>
@@ -79,7 +84,7 @@ Exemple script shared, 1 nœud, 40 processeurs, le temps d'exécution moins de
7984
</Tabs>
8085
8186
:::caution
82-
Sur Turpan, si l'application utilise **MPI**, il est nécessaire d'utiliser **mpirun** et d'éviter srun, sauf si un conteneur est utilisé ([voir ici](./logiciels/apptainer.md)). Pour les autres applications **sans MPI**, srun reste valide
87+
Sur Turpan, si l'application utilise **MPI**, il est nécessaire d'utiliser **mpirun** et d'éviter srun, sauf si un conteneur est utilisé ([voir ici](../logiciels/container/index.md)). Pour les autres applications **sans MPI**, srun reste valide
8388
:::
8489
8590
## Obtenir des informations sur un job
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"label": "Environnement logiciels",
3+
"position": 4
4+
}

0 commit comments

Comments
 (0)