Les logiciels sur le calculateur (modules)

Les logiciels sont installés à la demande des utilisateurs dans la pile de logiciels centrale et mis à disposition de l’utilisateur sous la forme de modules chargés à la demande par un utilitaire appelé lmod. Chaque module permet de modifier l’environnement de l’utilisateur pour pointer vers le logiciel+version en question.

Exemple:

[user@hpc-login1 ~]$ perl --version

This is perl 5, version 26, subversion 3 (v5.26.3) built for x86_64-linux-thread-multi

[user@hpc-login1 ~]$ module load perl
[=== Module perl/5.34.1 loaded ===]

[user@hpc-login1 ~]$ perl --version

This is perl 5, version 34, subversion 1 (v5.34.1) built for x86_64-linux-thread-multi
...

Un autre exemple avec Python

[user@hpc-login1 ~]$ python --version
-bash: python: command not found

[user@hpc-login1 ~]$ module load python
[=== Module python/3.10.6 loaded ===]

[user@hpc-login1 ~]$ python --version
Python 3.10.6

Les modules

Les catégories

Les modules sont divisés en plusieurs grandes sections listées ci-dessous.

Section

Description

Local

Quelques modules custom locaux au calculateur

Core

Les interpréteurs de base (compilateurs, python, cuda, …)

Environments

Des environnements pré-déployés avec une chaîne de dépendance locale

Pour obtenir la liste des modules disponibles il suffit d’utiliser module avail

[user@hpc-login1 ~]$ module avail
------------------------ /etc/hpc.unc.nc/modules/Local -------------------------
UNC (S,L)

------------------------- /etc/hpc.unc.nc/modules/Core -------------------------
anaconda2/2019.10    anaconda3/2022.05    autoconf/2.69    automake/1.16.5
cmake/3.24.2    cuda/10.2.89    cuda/11.7.1    cuda/11.8.0 (D)    ffmpeg/4.4.1
gcc/12.2.0    hdf5/1.10.5    openmpi/4.1.4    perl/5.34.1    python/2.7.18
python/3.9.13    python/3.10.6 (D)    sqlite/3.39.2

--------------------- /etc/hpc.unc.nc/modules/Environments ---------------------
python/3.9/cuda/11.7/cudnn/8.4/pytorch/1.12.1

Charger un module module load

Charger un module s’effectue simplement en utilisant la commande module load NOM.

Si certains modules dépendent d’autres modules, ceux-ci seront chargées automatiquement.

[user@hpc-login1 ~]$ module load python
[=== Module sqlite/3.39.2 loaded ===]
[=== Module python/3.10.6 loaded ===]

Afin de décharger un module, il suffit d’utiliser la commande module unload NOM ou pour réinitialiser complétement les modules chargés, on peut utiliser la commande module reset.

Chercher un module module spider

Si vous connaissez le nom d’un module ou d’une fonctionnalité que vous recherchez mais que le nom du module vous est encore inconnu, vous pouvez utiliser la commande module spider <terme>. Vous aurez ainsi les noms de module les plus pertinents par rapport au terme recherché.

Exemple:

[user@hpc-login1 ~]$ module spider mpi

--------------------------------------------------------------------
openmpi: openmpi/4.1.4
--------------------------------------------------------------------

    This module can be loaded directly: module load openmpi/4.1.4

    Help:
    An open source Message Passing Interface ...

Module caché

Si vous souhaitez charger un module dont la branche n’est pas encore affichée, il vous sera aussi conseillé d’utiliser module spider pour connaitre la chaine de dépendance du module en question.

[user@hpc-login1 ~]$ module load cudnn/8.2.4.15
Lmod has detected the following error:  These module(s) or extension(s) exist
but cannot be loaded as requested: "cudnn/8.2.4.15"
Try: "module spider cudnn/8.2.4.15" to see how to load the module(s).

[user@hpc-login1 ~]$ module spider cudnn/8.2.4.15

--------------------------------------------------------------------
cudnn: cudnn/8.2.4.15
--------------------------------------------------------------------

    You will need to load all module(s) on any one of the lines below
    before the "cudnn/8.2.4.15" module is available to load.

    cuda/11.7.1
    gcc/12.2.0  cuda/11.7.0

    Help:
    NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural
    networks

Ainsi pour charger cudnn/8.2.4.15 qui se trouve dans une branche avec dépendance, il vous est indiqué de:

  • Charger cuda/11.7.1 pour débloquer la branche correspondante

  • Puis charger cudnn/8.2.4.15

Les branches de dépendance

Lorsque l’on charge un module qui est une dépendance forte à une autre famille de modules, une nouvelle branche est débloquée et devient accessible. Par exemple, en chargeant openmpi, on débloque la branche de modules des applications compilées avec le logiciel+version en question:

[user@hpc-login1 ~]$ module load openmpi/4.1.4
[=== Module openmpi/4.1.4 loaded ===]
[user@hpc-login1 ~]$ module avail

------------- /etc/hpc.unc.nc/modules/MPI/gcc/8.5.0/openmpi/4.1.4 -------------
cfdem/5.x    hdf5/1.12.2 (D)    openfoam/5.x    openfoam/2206 (D)

------------------------ /etc/hpc.unc.nc/modules/Local -------------------------
UNC (S,L)

------------------------- /etc/hpc.unc.nc/modules/Core -------------------------
....

Deviennent maintenant disponible différentes versions d’OpenFoam compilées avec openmpi/4.1.4.