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

1.7. module purge

Cette commande permet de supprimer en une seule opération tous les modules activés et de revenir à l’état initial de son shell.