Skip to content

Commit d43a16b

Browse files
authored
Merge pull request #42 from ycarissan/main
Premiere contribution à la documentation de HEDY
2 parents 131138f + 493c558 commit d43a16b

File tree

10 files changed

+449
-1
lines changed

10 files changed

+449
-1
lines changed

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,3 @@ L'adresse de la documentation est celle-ci : https://www.mesonet.fr/documentatio
2222
- on installe docusaurus : `cd mesodoc && yarn install` ou `cd mesodoc && npm install`
2323
- On édite ce que l'on souhaite
2424
- On construit le site et lance un serveur web localement pour le prévisualiser : `yarn serve` ou `npm run start`
25-
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"label": "Hedy",
3+
"position": 5
4+
}

docs/code_form/hedy/cgu.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
title: "CGU"
3+
sidebar_position: 7
4+
---
5+
6+
7+
# Conditions générales d’utilisation des ressources de calcul du mésocentre d'Aix-Marseille
8+
9+
Tous les utilisateurs doivent lire et se conformer à la [charte publiée sur le site du mésocentre](https://mesocentre.univ-amu.fr/charte).
10+
11+
Lien vers la charte : [cliquez ici](https://mesocentre.univ-amu.fr/charte).

docs/code_form/hedy/connexion.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
title: "Se connecter à Hedy"
3+
sidebar_position: 2
4+
---
5+
6+
# Se connecter à Hedy
7+
8+
Vous avez besoin d'un compte MesoNET valide. Vous pouvez trouver les étapes pour obtenir un compte [ici](https://www.mesonet.fr/documentation/user-documentation/acces/portail).
9+
10+
Vous devez également participer à un projet MesoNET ayant demandé l'utilisation de la machine Hedy. Le dépôt de projet se fait [ici](https://www.mesonet.fr/documentation/user-documentation/acces/projets/).
11+
12+
La connexion s’effectue obligatoirement par clés ssh. Elles doivent avoir été créés sur votre poste client et la clé publique doit être déposée sur le portail MesoNET ([Gérer ses clés SSH)](https://www.mesonet.fr/documentation/user-documentation/acces/ssh/).
13+
14+
Depuis un terminal, la commande pour se connecter est :
15+
```
16+
ssh user@hedy.mesocentre.univ-amu.fr -p portnumber
17+
```
18+
19+
Il est recommandé de créer un fichier indiquant les informations de connexion ssh. Ce fichier nommé config est à placer sur le poste de travail, dans le répertoire `/home/user/.ssh` sur un système Unix ou `C:\Users\username\.ssh` sous Windows.
20+
21+
Le contenu minimal est :
22+
```
23+
Host hedy
24+
Hostname hedy.mesocentre.univ-amu.fr
25+
User user
26+
Port portnumber
27+
IdentityFile ~/.ssh/nom-de-ma-clé-privée
28+
IdentitiesOnly=yes
29+
```
30+
**user** est votre identifiant utilisateur sur MesoNET. Vous pouvez avoir plusieurs identifiants MesoNET, un par machine et un par projet, il faut veiller à renseigner l'identifiant correspondant.
31+
32+
**portnumber** est le numéro de port qui vous a été communiqué dans le message électronique de bienvenue.
33+
Comme ce n’est pas le port standard, il se peut qu’une autorisation soit nécessaire sur le firewall de votre ordinateur ou sur celui du site depuis lequel vous vous connectez.
34+
35+
**~/.ssh/nom-de-ma-clé-privée** il s'agit de la clé privée correspondant à la clé publique déposée sur le portail MesoNET (par ex: `~/.ssh/id_ed25519`)
36+
37+
Une fois le fichier config correctement créé, il est possible de se connecter à la machine Hedy simplement avec la commande :
38+
```
39+
ssh hedy
40+
```

docs/code_form/hedy/description.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
title: "Description"
3+
sidebar_position: 1
4+
---
5+
6+
# Hedy, la machine IA/GPU H100 de MesoNET
7+
8+
:::caution
9+
HEDY est en pré production : le nombre de projets est limité
10+
:::
11+
12+
La machine Hedy dispose de 8 Noeuds PowerEdge XE8640 :
13+
14+
- 2 x Intel Xeon Platinum 8462Y+ 2,8 GHz, 32C/64T, 16 GT/s, cache 60 Mo, Turbo, HT (300 W), mémoire DDR5 à 4 800 MHz
15+
- 512 Go RAM
16+
- 4 x GPU NVIDIA HGX H100 SXM 80Go connectés via NVSwitch (SXM)
17+
- DD NVMe de 3,84To
18+
- Network 100Gb
19+
20+
Elle est accessible via 2 serveurs de login et possède 1 serveur de visualisation.
21+
22+
[![Portrait d'Hedy Lamarr](/img/hedy/hedy_lamarr.png)](https://fr.wikipedia.org/wiki/Hedy_Lamarr)

docs/code_form/hedy/jobs.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
title: Lancer un calcul
3+
sidebar_position: 4
4+
---
5+
# Lancer un calcul
6+
7+
:::caution
8+
Les calculs ne doivent jamais être exécutés sur les frontales de login mais sur les nœuds de calcul.
9+
:::
10+
11+
Il n’y a pas d'espace scratch global sur la machine Hedy. Le disque local des nœuds, de technologie NVMe offre de bonnes performances en lecture/écriture et fait office de scratch. L’usage recommandé est de copier au début du job les données d’entrée sur le répertoire /tmp (si elles ne sont pas trop volumineuses) et, à l'issue de l'exécution du programme, de déplacer les résultats depuis /tmp vers le home. Cette étape est essentielle car toutes les données seront supprimées du nœud à la fin du job.
12+
13+
Hedy utilise l’ordonnanceur [Slurm]( https://slurm.schedmd.com/overview.html) qui assure l’ordonnancement et la planification des travaux de calcul. La soumission à Slurm des travaux de calcul se fait à partir d'un script shell ou en ligne de commande.
14+
15+
## Soumission par script
16+
17+
Il faut écrire un script shell comportant les directives Slurm (#SBATCH) et les commandes appropriées.
18+
19+
Exemple de script shell qui sollicite la réservation pour 24 heures de 2 GPUs GH100 et exécute le programme mon_programme.sh :
20+
```
21+
#!/bin/bash
22+
#SBATCH --job-name=mon_job_gpu
23+
#SBATCH --account=b1001
24+
#SBATCH --partition=gpu
25+
#SBATCH --nodes=1
26+
#SBATCH --gres=gpu:GH100:2
27+
#SBATCH --time=24:00:00
28+
29+
# copie des données d’entrée sur le nœud alloué
30+
mkdir /tmp/input
31+
cp /home/user/.../* /tmp/input/.
32+
33+
# lancement du programme
34+
~/soft/.../mon_progamme
35+
36+
# déplacement des résultats sur le home
37+
mv /tmp/output/* /home/user/…/.
38+
```
39+
:::info
40+
L'allocation des ressources est basée sur l'utilisation du GPU, on vous demande donc de NE PAS indiquer le nombre de cœurs CPU et la mémoire requise dans un Job car ces ressources seront allouées automatiquement, aussi efficacement que possible, en fonction du nombre de GPU (```CPU = nombre_de_GPUs * 16 cœurs``` , ```RAM = nombre_de_GPUs * 120000 MB```).
41+
:::
42+
Il suffit ensuite d'envoyer le script à Slurm par la commande sbatch qui le mettra en file d'attente.
43+
```
44+
sbatch mon_programme.sh
45+
```
46+
47+
## Soumission en ligne de commande
48+
49+
Il est possible d'utiliser directement sbatch en ligne de commande avec pour arguments les directives Slurm et le nom du programme.
50+
```
51+
srun --job-name=mon_job_gpu --account=b1001 --partition=gpu --nodes=1 --gres=gpu:GH100:2 --time=24:00:00 mon_script.sh
52+
```
53+
54+
## Ouverture d’une session interactive
55+
Il est également possible d'accéder à une session interactive en précisant les ressources souhaitées.
56+
57+
Par exemple :
58+
```
59+
srun --job-name=mon_job_gpu --account=b1001 --partition=gpu --nodes=1 --gres=gpu:GH100:2 --time=24:00:00 --pty bash -i
60+
```
61+
Vous serez alors connecté sur un nœud et pourrez utiliser les commandes unix et lancer vos directement en ligne de commande.
62+
63+
## Pour aller plus loin
64+
Quelques tutoriels sur Slurm sont disponibles [ici](../../HOWTO/slurm/slurm.md), la liste complète des directives Slum est disponible [ici]( https://slurm.schedmd.com/archive/slurm-24.05.5/sbatch.html#lbAG) et la documentation complète [ici]( https://slurm.schedmd.com/archive/slurm-24.05.5/).

docs/code_form/hedy/module.md

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
---
2+
title: "Environnements logiciels"
3+
sidebar_position: 5
4+
---
5+
6+
# INTRODUCTION
7+
8+
Le système de [Modules](https://modules.readthedocs.io/en/latest/#) est un outil qui simplifie l'initialisation du shell et permet aux utilisateurs et utilisatrices de modifier leur environnement facilement avec des fichiers de modules.
9+
10+
Chaque fichier de module contient les informations requises pour configurer le shell pour une application spécifique. Plusieurs modules sont pré-installés sur **Hedy**.
11+
12+
Par défaut, le module **[slurm/slurm](jobs)** (notre gestionnaire de ressources, indispensable pour soumettre des jobs) est chargé par défaut dans l'environnement de toutes les personnes se connectant au cluster.
13+
14+
# UTILISATION
15+
## module list
16+
17+
Pour lister les modules chargés dans votre environnement, vous pouvez utiliser la commande **module list** (ou son raccourci **ml list**) :
18+
19+
```console
20+
user@hedy:~$ module list
21+
Currently Loaded Modulefiles:
22+
1) slurm/slurm(latest)
23+
```
24+
25+
On voit ici que le module **slurm/slurm** estchargé, ce qui nous permettra d'utiliser cette application.
26+
27+
## module load
28+
29+
Prenons l'exemple de **openmpi**. Voici ce qui se passe si vous essayez de l'utiliser sans charger de module :
30+
31+
```console
32+
user@hedy:~$ mpirun
33+
-bash: mpirun: command not found
34+
user@hedy:~$ which mpirun
35+
/usr/bin/which: no mpirun in (/usr/local/bin/di:/nfs/mesonet/home/users/hal/HPC_tools/utilities:/nfs/mesonet/home/users/hal/.local/bin:/nfs/mesonet/sw/slurm/slurm-24.05.0/bin:/nfs/mesonet/sw/modules/modules-5.4.0/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/nfs/mesonet/home/users/hal/bin:/nfs/mesonet/sw/munge/munge-0.5.16/bin/)
36+
```
37+
Le logiciel n'apparaît pas dans votre environnement, et par conséquent vous ne pouvez pas l'utiliser. Il faut donc charger le bon module avec la commande **module load** (ou son raccourci **ml load**) :
38+
39+
```console
40+
user@hedy:~$ module load openmpi/5.0.3.rocm-6.1.1
41+
Loading openmpi/5.0.3.rocm-6.1.1
42+
Loading requirement: rocm/6.1.1
43+
user@hedy:~$ module list
44+
Currently Loaded Modulefiles:
45+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1
46+
user@hedy:~$ which mpirun
47+
/nfs/mesonet/sw/openmpi/openmpi-5.0.3.rocm-6.1.1/bin/mpirun
48+
```
49+
50+
On voit que maintenant **openmpi** est utilisable. On constate également que tous les autres modules desquels **openmpi** dépend ont été chargé automatiquement. Pour désactiver l'affichage du message, vous pouvez utiliser l'option **-q** (ou **--quiet**) :
51+
```console
52+
53+
user@hedy:~$ module -q load openmpi/5.0.3.rocm-6.1.1
54+
user@hedy:~$ module list
55+
Currently Loaded Modulefiles:
56+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1
57+
```
58+
Le message ne s'est pas affiché, mais tous les modules sont bien chargés. Cela peut servir pour alléger les logs de vos jobs.
59+
60+
## module remove
61+
62+
Lorsque vous ne voulez plus utiliser un module, vous pouvez le supprimer de votre environnement avec la commande **module remove** (ou ses raccourcis **module rm** ou **ml rm**). Dans notre exemple, le module **openmpi/5.0.3.rocm-6.1.1** n'est plus nécessaire :
63+
64+
```console
65+
user@hedy:~$ module list
66+
Currently Loaded Modulefiles:
67+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1
68+
user@hedy:~$ module remove openmpi/5.0.3.rocm-6.1.1
69+
Unloading openmpi/5.0.3.rocm-6.1.1
70+
Unloading useless requirement: rocm/6.1.1
71+
user@hedy:~$ module list
72+
Currently Loaded Modulefiles:
73+
1) slurm/slurm(latest)
74+
```
75+
76+
Module va gérer de manière "intelligente" les dépendances. Il a supprimé les dépendances automatiquement. Si vous aviez chargé le module **rocm/6.1.1** avant de charger le module **openmpi/5.0.3.rocm-6.1.1**, ce dernier ne chargera que l'autre dépendance manquante. Lors de la suppression, le module **rocm/6.1.1** sera conservé :
77+
78+
```console
79+
user@hedy:~$ module list
80+
Currently Loaded Modulefiles:
81+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest)
82+
user@hedy:~$ module load openmpi/5.0.3.rocm-6.1.1
83+
user@hedy:~$ module list
84+
Currently Loaded Modulefiles:
85+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1
86+
user@hedy:~$ module rm openmpi/5.0.3.rocm-6.1.1
87+
Unloading useless requirement: openmpi/openmpi-3.1.i18
88+
user@hedy:~$ module list
89+
Currently Loaded Modulefiles:
90+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest)
91+
```
92+
93+
À l'inverse, si vous enlevez un module dont dépend d'autres modules, tous les modules seront déchargés :
94+
```console
95+
user@hedy:~$ module load openmpi/5.0.3.rocm-6.1.1
96+
Loading openmpi/5.0.3.rocm-6.1.1
97+
Loading requirement: rocm/6.1.1
98+
user@hedy:~$ module list
99+
Currently Loaded Modulefiles:
100+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1
101+
user@hedy:~$ module rm rocm/6.1.1
102+
Unloading rocm/6.1.1
103+
Unloading dependent: openmpi/5.0.3.rocm-6.1.1
104+
```
105+
106+
## module purge
107+
108+
Vous pouvez supprimer tous vos modules d'un coup pour repartir sur une base nouvelle avec **module purge** (**ml purge**)
109+
110+
```console
111+
user@hedy:~$ module list
112+
Currently Loaded Modulefiles:
113+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1 4) gcc/13.2.0(latest)
114+
user@hedy:~$ module purge
115+
Unloading slurm/slurm
116+
ERROR: Unload of super-sticky module skipped
117+
user@hedy:~$ module list
118+
Currently Loaded Modulefiles:
119+
1) slurm/slurm(latest)
120+
```
121+
122+
Vous pouvez qu'une erreur indique que le module **slurm/slurm** n'a pas pu être supprimé. C'est tout à fait normal, ce module étant indispensable au fonctionnement du centre de calcul, nous avons décidé de le rendre permanent. Si vous ne souhaitez pas voir l'erreur apparaître, vous pouvez utiliser l'option **-q** :
123+
124+
```console
125+
user@hedy:~$ module list
126+
Currently Loaded Modulefiles:
127+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) openmpi/5.0.3.rocm-6.1.1 4) gcc/13.2.0(latest)
128+
user@hedy:~$ module purge -q
129+
user@hedy:~$ module list
130+
Currently Loaded Modulefiles:
131+
1) slurm/slurm(latest)
132+
```
133+
134+
## module switch
135+
136+
Il est possible de remplacer un module par un autre avec une seule commande **module switch** (**ml switch**) :
137+
138+
```console
139+
user@hedy:~$ module list
140+
Currently Loaded Modulefiles:
141+
1) slurm/slurm(latest)
142+
user@hedy:~$ module load aocl/4.2.0.aocc
143+
Loading aocl/4.2.0.aocc
144+
Loading requirement: rocm/6.1.1
145+
user@hedy:~$ module list
146+
Currently Loaded Modulefiles:
147+
1) slurm/slurm(latest) 2) rocm/6.1.1(latest) 3) aocl/4.2.0.aocc
148+
user@hedy:~$ module switch aocl/4.2.0.aocc aocl/4.2.0.gcc
149+
Switching from aocl/4.2.0.aocc to aocl/4.2.0.gcc
150+
Unloading useless requirement: rocm/6.1.1
151+
Loading requirement: gcc/13.2.0
152+
user@hedy:~$ module list
153+
Currently Loaded Modulefiles:
154+
1) slurm/slurm(latest) 2) gcc/13.2.0(latest) 3) aocl/4.2.0.gcc
155+
```
156+
157+
Ici on remplace le module **aocl/4.2.0.aocc** par le module **aocl/4.2.0.gcc**. Les dépendances sont gérées automatiquement.
158+
159+
## module avail
160+
161+
La commande **module avail** (**ml avail**) permet d'obtenir la liste des modules installés sur le cluster.
162+
163+
La liste peut être un peu longue et indigeste, il est préférable d'affiner un peu ses recherches avec le nom d'une application par exemple :
164+
165+
```console
166+
user@hedy:~$ module avail gcc
167+
---------------- /nfs/mesonet/sw/modulefiles ----------------
168+
gcc/9.5.0 gcc/10.5.0 gcc/11.4.0 gcc/12.3.0 gcc/13.2.0(latest)
169+
```
170+
171+
Certains modules ont des tags entre parenthèses. Ces derniers servent à identifier rapidement le module le plus récent. Quand 2 modules partagent le tag *latest*, un autre tag s'ajoute pour les différencier (souvent le compilateur qui a servi a complier l'application).
172+
173+
D'autres modules sont soulignés. Ces modules représentent les modules qui seront chargés par défaut si on ne précise pas de version de module :
174+
175+
```console
176+
user@hedy:~$ module load gcc
177+
user@hedy:~$ module list
178+
Currently Loaded Modulefiles:
179+
1) slurm/slurm(latest) 2) gcc/gcc-13.2.0(latest)
180+
```
181+
182+
## .bashrc / .cshrc / .zshrc
183+
Les fichiers **.bashrc** (pour [bash](https://www.gnu.org/software/bash)), **.cshrc** (pour [tcsh](https://www.tcsh.org) ou csh) et **.zshrc** (pour [zsh](https://www.zsh.org)) permettent une personalisation du shell. Vous pouvez y insérer des commandes qui seront lancées à chaque connexion. Il est ainsi possible de charger directement les modules qui vous intéressent dans ce fichier de configuration. Vous pouvez éditer ce fichier avec n'importe quel éditeur de texte installé sur **H** :
184+
185+
```console
186+
vim ~/.bashrc
187+
```
188+
189+
Ces modules seront également utilisés pour vos jobs, donc il n'est plus nécessaire de les charger manuellement dans vos scripts de soumissions.
190+
191+
Voici un exemple de **.bashrc** qui charge des modules automatiquement :
192+
193+
```console
194+
# .bashrc
195+
196+
# Source global definitions
197+
if [ -f /etc/bashrc ]; then
198+
. /etc/bashrc
199+
fi
200+
201+
source /usr/local/configfiles/bashrc.default
202+
203+
module load -s gcc/gcc-13.2.0
204+
module load -s openmpi/5.0.3.rocm-6.1.1
205+
module load -s cmake/3.29.5
206+
```

0 commit comments

Comments
 (0)