Utilisation des modules
De nombreux logiciels, bibliothèques, outils doivent être présents sur les calculateurs généralistes sur lesquels des chercheurs de domaines scientifiques très différents viennent calculer. Ces éléments présentent des dépendances, par forcément des mêmes versions, d’autres logiciels.
D’autre part les logiciels évoluent, les versions se succèdent. Il faut donc faire coexister plusieurs versions simultanément pour un même logiciel.
La commande module
permet de passer dynamiquement d’une version à une autre, pour un même logiciel, de manière transparente pour l’utilisateur. À charge pour l’administrateur, d’enrichir l’environnement de module
avec les informations ad hoc.
1. Commande module
La commande module
est présente par défaut sur les différents nœuds. Elle dispose d’options qui permettent d’interroger, d’enrichir, d’appauvrir son environnement de développement. Elle peut être utilisée dans le fichier de configuration de son shell (.bashrc, .tcshrc, …), dans un script de soumission SLURM
, directement en ligne de commande dans son terminal.
1.1. Liste des options
La liste complète des options peut être obtenue avec la commande module help
module help Modules Release 3.2.10 2012-12-21 (Copyright GNU GPL v2 1991): Usage: module [ switches ] [ subcommand ] [subcommand-args ] Switches: -H|--help this usage info -V|--version modules version & configuration options -f|--force force active dependency resolution -t|--terse terse format avail and list format -l|--long long format avail and list format -h|--human readable format avail and list format -v|--verbose enable verbose messages -s|--silent disable verbose messages -c|--create create caches for avail and apropos -i|--icase case insensitive -u|--userlvl <lvl> set user level to (nov[ice],exp[ert],adv[anced]) Available SubCommands and Args: + add|load modulefile [modulefile ...] + rm|unload modulefile [modulefile ...] + switch|swap [modulefile1] modulefile2 + display|show modulefile [modulefile ...] + avail [modulefile [modulefile ...]] + use [-a|--append] dir [dir ...] + unuse dir [dir ...] + update + refresh + purge + list + clear + help [modulefile [modulefile ...]] + whatis [modulefile [modulefile ...]] + apropos|keyword string + initadd modulefile [modulefile ...] + initprepend modulefile [modulefile ...] + initrm modulefile [modulefile ...] + initswitch modulefile1 modulefile2 + initlist + initclear
1.2. Options les plus fréquentes
Les options qui sont très souvent utilisées sont :
-
available
-
list
-
load
-
unload
-
purge
1.3. module available
Cette commande donne la liste de tous les modules installés et accessibles. Elle dispose de plusieurs écritures, qui sont des abréviations de la première :
module available module avail module av
1.4. module list
Cette commande donne la liste des modules activés. Au début, aucun module n’est chargé
module list No Modulefiles Currently Loaded.
Elle dispose d’une seconde écriture, une abréviation de la première :
module list module li
1.5. module load
Elle permet d’enrichir son environnement (i.e. le shell dans lequel la commande est tapée) avec les informations pour accéder à un programme une bibliothèque, un compilateur, …
On lui donne en argument un ou plusieurs noms de module que l’on récupère avec la commande module available
.
Exemples :
module load intel/2020.0.166 intel/mpi/2020.0.166 hdf5/intelmpi/icc20/1.12.0
Dans le premier cas, ces variables d’environnement suivantes sont enrichies :
echo $LD_LIBRARY_PATH /trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/compiler/lib/intel64:/trinity/shared/apps/cv-standard/hdf5/intelmpi/icc20/1.12.0/lib:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/mpi/intel64/lib/release:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/mpi/intel64/lib echo $PATH /trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/bin/intel64:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/bin:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/debugger_2020/gdb/intel64/bin:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/debugger_2020/bin:/trinity/shared/apps/cv-standard/hdf5/intelmpi/icc20/1.12.0/bin:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/mpi/intel64/bin:.:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
Ce qui est fait par l’action du module est renseigné par l’administrateur qui crée le fichier de paramétrage du module activé.
1.6. module unload
C’est la commande opposée à la précédente. Elle permet de retirer de son environnement les chemins renseignées ou les variables d’environnement initialisées par un module précédemment chargé.
module unload hdf5/intelmpi/icc20/1.12.0 echo $LD_LIBRARY_PATH /trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/compiler/lib/intel64:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/mpi/intel64/lib/release:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/mpi/intel64/lib echo $PATH /trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/bin/intel64:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/bin:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/debugger_2020/gdb/intel64/bin:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/debugger_2020/bin:/trinity/shared/apps/ccipl/machine-dependant/nazare-dc/soft/intel/2020.0.015/compilers_and_libraries_2020.0.166/linux/mpi/intel64/bin:.:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
Les chemins ajoutés dans ces variables et liées à HDF5 ont disparu, à savoir
-
/trinity/shared/apps/cv-standard/hdf5/intelmpi/icc20/1.12.0/lib
pour$LD_LIBRARY_PATH
. -
/trinity/shared/apps/cv-standard/hdf5/intelmpi/icc20/1.12.0/bin
pour$PATH
Le reste n’a pas bougé.