Skip to content

Commit 654b9a6

Browse files
authored
Merge pull request #49 from ycarissan/main
Mise à jour de la section modules de HEDY
2 parents 0b031e8 + c5936bd commit 654b9a6

File tree

1 file changed

+76
-149
lines changed

1 file changed

+76
-149
lines changed

docs/code_form/hedy/module.md

Lines changed: 76 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -3,204 +3,131 @@ title: "Environnements logiciels"
33
sidebar_position: 5
44
---
55

6-
# INTRODUCTION
6+
# Gestion de l'Environnement
77

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.
8+
Pour garantir que votre shell fonctionne correctement sur le cluster **Hedy**, nous utilisons un système appelé **[Modules](https://lmod.readthedocs.io/en/latest/index.html)**. Son but principal est de simplifier la configuration initiale.
99

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**.
10+
Concrètement, l'outil Modules permet à chaque utilisateur de modifier son environnement facilement. Il y parvient en utilisant des fichiers de configuration qui contiennent tous les réglages pour qu'une application spécifique soit prête à l'emploi. Vous avez accès à de nombreux programmes déjà installés via ces modules.
1111

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.
1312

14-
# UTILISATION
13+
# UTILISATION DU SYSTÈME DE MODULES
1514
## module list
1615

1716
Pour lister les modules chargés dans votre environnement, vous pouvez utiliser la commande **module list** (ou son raccourci **ml list**) :
1817

1918
```console
20-
user@hedy:~$ module list
21-
Currently Loaded Modulefiles:
22-
1) slurm/slurm(latest)
19+
[user@m-login02 ~]$ module list
20+
No modules loaded
21+
[user@m-login02 ~]$ ml list
22+
No modules loaded
2323
```
24+
On voit qu'au départ, aucun module n'est chargé et l'environnement de travail est propre.
2425

25-
On voit ici que le module **slurm/slurm** estchargé, ce qui nous permettra d'utiliser cette application.
26-
27-
## module load
26+
## module avail
2827

29-
Prenons l'exemple de **openmpi**. Voici ce qui se passe si vous essayez de l'utiliser sans charger de module :
28+
La commande **module avail** (**ml avail**) permet d'obtenir la liste des modules installés sur le cluster.
3029

3130
```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/)
31+
[user@m-login02 ~]$ module avail
32+
33+
----------------------------------------------------------------- /opt/ohpc/pub/modulefiles -----------------------------------------------------------------
34+
R-Studio/2024.04.1 cuda-nccl/2.21.5-cuda12.5 gdb/16.3 (D) octave/10.2.0 (D) pmix/4.2.9
35+
R-Studio/2025.05.1 (D) cuda-nccl/2.27.3-cuda12.9 (D) gnu12/12.2.0 openjdk/21 prun/2.2
36+
R/4.4.0 cuda-tensorrt/10.0.1.6-cuda12.4 gnu13/13.2.0 openjdk/24 (D) python/3.12.4
37+
R/4.5.0 (D) cuda-tensorrt/10.11.0.33-cuda12.9 (D) hwloc/2.12.0 os python/3.13.4 (D)
38+
autotools cuda-toolkit/12.4 intel/2023.2.1 paraview/5.12.1-egl ucx/1.18.0
39+
blender/4.1.1 cuda-toolkit/12.5 intel/2024.0.0 (D) paraview/5.12.1-mpi (D) valgrind/3.24.0
40+
blender/4.4.3 (D) cuda-toolkit/12.6 intel/2024.1.2 paraview/5.12.1-osmesa visit/3.4.1-beta
41+
cmake/4.0.0 cuda-toolkit/12.8 intel/2024.2.1 paraview/5.13.3-egl visit/3.4.2 (D)
42+
cuda-cuddn/9.2.0.82-cuda12 cuda-toolkit/12.9 (D) libfabric/1.18.0 paraview/5.13.3-mpi
43+
cuda-cuddn/9.10.2.21_cuda12 (D) gdb/14.2 octave/9.2.0 paraview/5.13.3-osmesa
44+
45+
Where:
46+
D: Default Module
3647
```
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**) :
48+
Certains modules ont des tags entre parenthèses. Ces modules représentent les modules qui seront chargés par défaut si on ne précise pas de version de module.
3849

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-
```
50+
La liste peut être un peu longue, il est préférable d'affiner ses recherches avec le nom d'une application, par exemple :
4951

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**) :
5152
```console
53+
[user@m-login02 ~]$ module avail cuda
5254

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
55+
----------------------------------------------------------------- /opt/ohpc/pub/modulefiles -----------------------------------------------------------------
56+
cuda-cuddn/9.2.0.82-cuda12 cuda-nccl/2.27.3-cuda12.9 (D) cuda-toolkit/12.4 cuda-toolkit/12.8
57+
cuda-cuddn/9.10.2.21_cuda12 (D) cuda-tensorrt/10.0.1.6-cuda12.4 cuda-toolkit/12.5 cuda-toolkit/12.9 (D)
58+
cuda-nccl/2.21.5-cuda12.5 cuda-tensorrt/10.11.0.33-cuda12.9 (D) cuda-toolkit/12.6
5759
```
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
6160

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 :
61+
## module load
6362

63+
Prenons l'exemple de **python3.12**. Voici ce qui se passe si vous recherchez **python3.12** dans votre environnement sans charger de module :
6464
```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)
65+
[user@m-login02 ~]$ which python3.12
66+
/usr/bin/which: no python3.12 in (/home/user/.local/bin:/home/user/bin:/etc/slurm/bin:/etc/slurm/svisu/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/dell/srvadmin/bin)
7467
```
7568

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é :
69+
Cette version de Python 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**) :
7770

7871
```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-
```
72+
[user@m-login02 ~]$ module load python/3.12
10573

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**)
74+
[user@m-login02 ~]$ module list
75+
Currently Loaded Modules:
76+
1) python/3.12.4
10977

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)
78+
[user@m-login02 ~]$ which python3.12
79+
/opt/ohpc/pub/apps/python/3.12.4/bin/python3.12
12080
```
12181

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** :
82+
On voit que maintenant **python3.12** est utilisable. Tous les modules requis en tant que dépendances seront identifiés et chargés automatiquement, le cas échéant.
12383

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
84+
## module remove
13585

136-
Il est possible de remplacer un module par un autre avec une seule commande **module switch** (**ml switch**) :
86+
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**) :
13787

13888
```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-
```
89+
[user@m-login02 ~]$ module list
90+
Currently Loaded Modules:
91+
1) python/3.12.4
15692

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.
93+
[user@m-login02 ~]$ module remove python/3.12.4
16294

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)
95+
[user@m-login02 ~]$ module list
96+
No modules loaded
16997
```
17098

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).
99+
Module va gérer de manière "intelligente" les dépendances, si vous enlevez un module dont dépend d'autres modules, tous les modules seront déchargés.
100+
101+
## module purge
172102

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 :
103+
Vous pouvez supprimer tous vos modules d'un coup pour repartir sur une base nouvelle avec **module purge** (**ml purge**)
174104

175105
```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-
```
106+
[user@m-login02 ~]$ module list
107+
Currently Loaded Modules:
108+
1) python/3.13.4 2) cuda-nccl/2.27.3-cuda12.9 3) autotools
181109

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** :
110+
[user@m-login02 ~]$ module purge
184111

185-
```console
186-
vim ~/.bashrc
112+
[user@m-login02 ~]$ module list
113+
No modules loaded
187114
```
188115

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.
116+
## module swap
190117

191-
Voici un exemple de **.bashrc** qui charge des modules automatiquement :
118+
Il est possible de remplacer un module par un autre avec une seule commande **module swap** (**ml sw**) :
192119

193120
```console
194-
# .bashrc
195-
196-
# Source global definitions
197-
if [ -f /etc/bashrc ]; then
198-
. /etc/bashrc
199-
fi
121+
[user@m-login02 ~]$ module list
122+
Currently Loaded Modules:
123+
1) python/3.12.4
200124

201-
source /usr/local/configfiles/bashrc.default
125+
[user@m-login02 ~]$ module swap python/3.12.4 python/3.13.4
126+
The following have been reloaded with a version change:
127+
1) python/3.12.4 => python/3.13.4
202128

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
129+
[user@m-login02 ~]$ module list
130+
Currently Loaded Modules:
131+
1) python/3.13.4
206132
```
133+
Ici on remplace le module **python3.12** par le module **python3.13**. Les dépendances sont gérées automatiquement, le cas échéant.

0 commit comments

Comments
 (0)