INTRODUCTION
Le système de Modules 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.
Chaque fichier de module contient les informations requises pour configurer le shell pour une application spécifique. Le CCUS met à votre disposition plusieurs modules pré-installés.
Par défaut, les modules slurm/slurm (notre gestionnaire de ressources, indispensable pour soumettre des jobs) et intel/intel20 (la suite de compilateurs Intel) sont chargés par défaut dans l'environnement de toutes les personnes se connectant au CCUS.
UTILISATION
module list
Pour lister les modules chargés dans votre environnement, vous pouvez utiliser la commande module list (ou son raccourci ml list) :
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 2) intel/intel20(latest)
On voit ici que les modules slurm/slurm et intel/intel20 sont chargés, ce qui nous permettra d'utiliser ces 2 applications.
module load
Prenons l'exemple du logiciel namd. Voici ce qui se passe si vous essayez de l'utiliser sans charger de module :
hal@hpc-login1:~$ namd2
-bash: namd2: command not found
hal@hpc-login1:~$ which namd2
/usr/bin/which: no namd2 in (/usr/local/bin/di:/b/home/di/hal/Appli:/usr/local/bin/:/opt/intel/compilers_and_libraries_2020.1.217/linux/bin/intel64:/opt/intel/compilers_and_libraries_2020.1.217/linux/bin:/software/opt/intel/compilers_and_libraries_2020.1.217/linux/mpi/intel64/libfabric/bin:/software/opt/intel/compilers_and_libraries_2020.1.217/linux/mpi/intel64/bin:/opt/intel/debugger_2020/gdb/intel64/bin:/usr/local/Modules/4.5.1/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/slurm/bin:/b/home/di/hal/bin)
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) :
hal@hpc-login1:~$ module load namd/namd-2.13
Loading namd/namd-2.13
Loading requirement: intel/intel18 openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) intel/intel18 5) namd/namd-2.13(latest)
2) intel/intel20(latest) 4) openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ which namd2
/usr/local/namd/namd-2.13/namd2
On voit que maintenant namd est utilisable. On constate également que tous les autres modules desquels namd dépend ont été chargé automatiquement. Pour désactiver l'affichage du message, vous pouvez utiliser l'option -s (ou --silent) :
hal@hpc-login1:~$ module load -s namd/namd-2.13
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) intel/intel18 5) namd/namd-2.13(latest)
2) intel/intel20(latest) 4) openmpi/openmpi-3.1.i18
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, ou pour les personnes qui utilisent X2Go qui chargent des modules automatiquement (voir en bas de cette page).
module remove
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 intel/intel20 n'est plus nécessaire :
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) intel/intel18 5) namd/namd-2.13(latest)
2) intel/intel20(latest) 4) openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ module remove intel/intel20
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) openmpi/openmpi-3.1.i18
2) intel/intel18 4) namd/namd-2.13(latest)
Module va gérer de manière "intelligente" les dépendances. Si vous aviez chargé le module intel/intel18 avant de charger le module namd/namd-2.13, ce dernier ne chargera que l'autre dépendance manquante. Lors de la suppression, le module intel/intel18 sera conservé :
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 2) intel/intel18
hal@hpc-login1:~$ module load namd/namd-2.13
Loading namd/namd-2.13
Loading requirement: openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) openmpi/openmpi-3.1.i18
2) intel/intel18 4) namd/namd-2.13(latest)
hal@hpc-login1:~$ module rm namd/namd-2.13
Unloading namd/namd-2.13
Unloading useless requirement: openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 2) intel/intel18
À l'inverse, une erreur apparaîtra si vous souhaitez enlever un module dont dépend un autre des modules de votre environnement :
hal@hpc-login1:~$ module load namd/namd-2.13
Loading namd/namd-2.13
Loading requirement: openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) openmpi/openmpi-3.1.i18
2) intel/intel18 4) namd/namd-2.13(latest)
hal@hpc-login1:~$ module rm openmpi/openmpi-3.1.i18
Unloading openmpi/openmpi-3.1.i18
ERROR: openmpi/openmpi-3.1.i18 cannot be unloaded due to a prereq.
HINT: Might try "module unload namd/namd-2.13" first.
Il faudra obligatoirement supprimer le module namd/namd-2.13 si vous voulez supprimer le module openmpi-3.1.i18.
module purge
Vous pouvez supprimer tous vos modules d'un coup pour repartir sur une base nouvelle avec module purge (ml purge)
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) openmpi/openmpi-3.1.i18
2) intel/intel18 4) namd/namd-2.13(latest)
hal@hpc-login1:~$ module purge
Unloading slurm/slurm
ERROR: Unload of super-sticky module skipped
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest)
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 -s :
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 3) openmpi/openmpi-3.1.i18
2) intel/intel18 4) namd/namd-2.13(latest)
hal@hpc-login1:~$ module purge -s
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest)
module switch
Il est possible de remplacer un module par un autre avec une seule commande module switch (ml switch) :
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest)
hal@hpc-login1:~$ module load openmpi/openmpi-3.1.i18
Loading openmpi/openmpi-3.1.i18
Loading requirement: intel/intel18
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 2) intel/intel18 3) openmpi/openmpi-3.1.i18
hal@hpc-login1:~$ module switch openmpi/openmpi-3.1.i18 openmpi/openmpi-4.0.i20
Switching from openmpi/openmpi-3.1.i18 to openmpi/openmpi-4.0.i20
Unloading useless requirement: intel/intel18
Loading requirement: intel/intel20
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 2) intel/intel20(latest) 3) openmpi/openmpi-4.0.i20(latest intel)
Ici on remplace le module openmpi/openmpi-3.1.i18 par le module openmpi/openmpi-4.0.i20. Les dépendances sont gérées automatiquement.
module avail
La commande module avail (ml avail) permet d'obtenir la liste des modules installés sur le cluster.
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 :
hal@hpc-login1:~$ module avail fftw
-------------------- /usr/local/configfiles/modules --------------------
fftw/fftw3 fftw/fftw3.3.5.i16 fftw/fftw3.3.6.g7
fftw/fftw3.3.6.g63 fftw/fftw3.3.6.i17 fftw/fftw3.3.8.g9(latest gcc)
fftw/fftw3.3.8.g10 fftw/fftw3.3.8.i18(latest intel) fftw/fftw3.gnu49
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).
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 :
hal@hpc-login1:~$ module load intel
hal@hpc-login1:~$ module list
Currently Loaded Modulefiles:
1) slurm/slurm(latest) 2) intel/oneAPI-2021(latest)
.bashrc / .cshrc
Les fichiers .bashrc (pour bash) et .cshrc (pour tcsh ou csh) 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é au CCUS :
vim ~/.bashrc
vim ~/.bashrc
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.
Si vous utiliser X2Go, il est impératif d'utiliser l'option -s si vous charger des modules dans votre .bashrc ou .cshrc, sinon vous aurez une erreur à la connexion.
Voici un exemple de .bashrc qui charge des modules automatiquement :
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
source /usr/local/configfiles/bashrc.default
module load -s cuda/cuda-10.2
module load -s intel/intel20
module load -s openmpi/openmpi-4.0.i20
module load -s singularity/singularity