Table des matières
Jean Zay : commande module
Afin de charger les produits installés sur Jean Zay, il est nécessaire d'utiliser la commande module
.
La version actuellement disponible sur Jean Zay est la version 4.3.1 qui apporte de nombreuses nouveautés par rapport à la version 3 (historiquement installée sur les machines de calcul de l'IDRIS) et permet notamment de charger automatiquement les prérequis des produits (compilateur, bibliothèque MPI) lors du chargement d'un module.
Attention : les modules accessibles par défaut ne sont pas compatibles avec les partitions gpu_p5 (extension équipée de GPU NVIDIA A100 80 Go installée en juin 2022) et gpu_p6 (extension équipée de GPU NVIDIA H100 80 Go installée en été 2024). Il est nécessaire de charger préalablement le module arch/a100
ou arch/h100
pour pouvoir lister et charger les modules compatibles avec ces partitions. Pour un savoir plus, consultez les sections Modules compatibles avec la partition gpu_p5 ou Modules compatibles avec la partition gpu_p6.
Nouveautés avec Environment Modules v4
En plus de corriger de nombreux bugs, Environment Modules v4 introduit de nouvelles fonctionnalités, en particulier :
- la gestion automatique des dépendances entre les modules (voir la section suivante) ;
- un choix amélioré de la version par défaut des modules : la plus récente est utilisée par défaut, plutôt que la dernière version disponible dans l'ordre alphabétique. Par exemple, la version 1.10 est bien considérée comme étant plus récente que la version 1.9 ;
- un filtrage avancé de la sortie de la commande
module avail
via des options :-d
n'affiche que la version par défaut de chaque module-L
n'affiche que la version la plus récente de chaque module-C <texte>
permet de chercher tous les modules dont le nom ou la version contient le motif<texte>
- une colorisation de la sortie de la commande pour en améliorer la lisibilité ;
- une amélioration des performances.
Pour plus de détails, nous vous invitons à consulter, sur le site officiel d'Environment Modules, les notes de version et la page Differences between versions 3.2 and 4.
Gestion automatique des dépendances
La fonctionnalité de gestion automatique des dépendances entre les modules, introduite dans l'Environment Modules v4, est utilisée à l'IDRIS afin de garantir la cohérence de l'environnement chargé.
Ceci signifie que la commande module
s'assure que les prérequis en matière de compilateur et de bibliothèque MPI sont bien satisfaits à chaque chargement d'un module :
- Lorsqu'un module est chargé dans un environnement vierge (sans aucun compilateur ni bibliothèque MPI déjà sélectionnés), un environnement par défaut est chargé si nécessaire (sélection du compilateur et/ou de la bibliothèque MPI). Par exemple, la bibliothèque NetCDF est disponible avec 2 environnements Intel (18.0.5 et 19.0.4); par défaut, c'est l'environnement Intel 19.0.4 qui est chargé :
$ module purge $ module load netcdf Loading netcdf/4.7.2-mpi Loading requirement: intel-compilers/19.0.4 intel-mpi/19.0.4 $ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 2) intel-mpi/19.0.4 3) netcdf/4.7.2-mpi $ which ncdump /.../netcdf/4.7.2/intel-19.0.4-cqo7jj3yxaprhm23gr2tfq2f4epw7k3r/bin/ncdump
- Lorsqu'on charge un module dans un environnement déjà contraint par le chargement antérieur d'un compilateur (et éventuellement d'une bibliothèque MPI), l’installation du produit effectuée avec cette même version du compilateur (et respectivement de la même bibliothèque MPI) est automatiquement sélectionnée. Prenons, par exemple, la bibliothèque NetCDF disponible pour les environnements Intel 18.0.5 et 19.0.4, on peut vérifier ce comportement de la commande
module
en chargeant préalablement l'environnement Intel 18.0.5 :$ module list Currently Loaded Modulefiles: 1) intel-compilers/18.0.5 2) intel-mpi/18.0.5 $ module load netcdf $ module list Currently Loaded Modulefiles: 1) intel-compilers/18.0.5 2) intel-mpi/18.0.5 3) netcdf/4.7.2-mpi $ which ncdump /.../netcdf/4.7.2/intel-18.0.5-4q5xoewvla54i45rdh743eu7bm7wnsi7/bin/ncdump
- Par contre, si aucune installation n'a été effectuée pour l'environnement déjà chargé, un message d'erreur sera affiché (indiquant un conflit, par exemple) ; dans ce cas le module n'est pas chargé. Par exemple, si on essaie de charger la bibliothèque NetCDF dans l'environnement Intel 19.0.5 alors qu'elle n'est pas disponible :
$ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.5 $ module load netcdf Loading intel-compilers/19.0.4 ERROR: Conflicting intel-compilers is loaded Loading intel-compilers/18.0.5 ERROR: Conflicting intel-compilers is loaded Loading netcdf/4.7.2-mpi ERROR: Load of requirement intel-compilers/19.0.4 or intel-compilers/18.0.5 failed $ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.5
Remarque : lorsqu'un produit est disponible pour plusieurs environnements, il peut être nécessaire de charger le compilateur et/ou la bibliothèque MPI avant de charger le produit afin de s'assurer que l'environnement utilisé est le bon.
Affichage des produits installés
Pour afficher les produits installés sur Jean Zay, il faut utiliser la sous-commande avail
.
$ module avail ------------------------- /gpfslocalsup/pub/module-rh/modulefiles ------------------------- arm-forge intel-all/16.0.4 intel-compilers/18.0.1 intel-vtune/18.0.5 pgi/19.7 cuda/9.2 intel-all/18.0.1 intel-compilers/18.0.5 intel-vtune/19.0.2 pgi/19.9 cuda/10.0 intel-all/18.0.5 intel-compilers/19.0.2 intel-vtune/19.0.4 pgi/19.10 cuda/10.1.1 intel-all/19.0.2 intel-compilers/19.0.4 intel-vtune/19.0.5 cuda/10.1.2 intel-all/19.0.4 intel-compilers/19.0.5 nccl/2.4.2-1+cuda9.2 cudnn/9.2-v7.5.1.10 intel-all/19.0.5 intel-itac/18.0.1 nccl/2.4.2-1+cuda10.1 cudnn/10.1-v7.5.1.10 intel-itac/19.0.4 intel-itac/18.0.5 pgi/19.5 ------------------------- /gpfslocalsup/pub/modules-idris-env4/modulefiles/linux-rhel7-x86_64 ------------------------- abinit/7.0.5 fftw/3.3.8-mpi nco/4.8.1 trilinos/12.12.1-mpi abinit/8.8.2-mpi fftw/3.3.8-mpi-cuda ncview/2.1.7-mpi udunits2/2.2.24 abinit/8.10.3-mpi gaussian/g09-revD01 netcdf-fortran/4.5.2 uuid/1.6.2 adf/2019.104-mpi-cuda gaussian/g16-revC01 netcdf-fortran/4.5.2-mpi valgrind/3.14.0-mpi anaconda-py2/2019.03 gcc/4.8.5 netcdf/4.7.2 valgrind/3.14.0-mpi-cuda anaconda-py3/2019.03 gcc/5.5.0 netcdf/4.7.2-mpi vasp/5.4.4-mpi-cuda arpack-ng/3.7.0-mpi gcc/6.5.0 netlib-lapack/3.8.0 vim/8.1.0338 autoconf/2.69 gcc/8.2.0 netlib-scalapack/2.0.2-mpi visit/2.13.0-mpi automake/1.16.1 gcc/8.3.0 netlib-scalapack/2.0.2-mpi-cuda vtk/8.1.2-mpi bigdft/devel-0719-mpi-cuda gcc/9.1.0 nwchem/6.8.1-mpi xedit/1.2.2 blitz/1.0.1 gcc/9.1.0-cuda-openacc octave/4.4.1-mpi boost/1.62.0 gdb/8.2.1 opa-psm2/11.2.77 [...]
(affichage non exhaustif, basé sur une sortie de la commande éditée en décembre 2019)
Rechercher un produit particulier
Il est possible de rechercher un produit particulier en tapant : module avail <premières lettres du nom du produit>
.
Par exemple pour afficher les produits commençant par cud
:
$ module avail cud ------------------------- /gpfslocalsup/pub/module-rh/modulefiles ------------------------- cuda/9.2 cuda/10.0 cuda/10.1.1 cuda/10.1.2 cudnn/9.2-v7.5.1.10 cudnn/10.1-v7.5.1.10
Vérifier quels sont les modules déjà chargés
La sous-commande list
permet de vérifier quels sont les modules chargés à un moment donné dans votre environnement courant :
$ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 4) intel-vtune/19.0.4 7) intel-itac/19.0.4 2) intel-mkl/19.0.4 5) intel-advisor/19.0.4 8) intel-all/19.0.4 3) intel-mpi/19.0.4 6) intel-tbb/19.0.4
Si aucun module n'est chargé le message suivant apparaît :
$ module list No Modulefiles Currently Loaded.
Chargement d'un produit
Le chargement des produits se fait avec la sous-commande load
suivie par :
- soit le nom complet du module pour sélectionner une version précise du produit :
$ module load intel-compilers/19.0.4
- soit le début du nom du module qui sélectionne alors la version par défaut du produit :
$ module load intel-compilers
La commande module load
ne renvoie aucune information lorsqu'elle s'exécute sans problème. Il peut donc être nécessaire d'utiliser la commande module list
pour savoir quelle version a été chargée.
Par contre, une erreur peut se produire et empêcher le chargement d'un module. Des messages d'erreur sont alors retournés, par exemple :
- si le module à charger n'existe pas :
$ module load intel-compilers-19/19.0.4 ERROR: Unable to locate a modulefile for 'intel-compilers-19/19.0.4'
- si un conflit existe entre le module à charger et un des modules déjà chargés :
$ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.5 $ module load intel-compilers/19.0.4 Loading intel-compilers/19.0.4 ERROR: Conflicting intel-compilers is loaded
Chargement de plusieurs produits
Il est possible de charger plusieurs produits en une seule fois :
- En les listant sur une même ligne de commande :
$ module load intel-compilers/19.0.4 intel-mpi/19.0.4 intel-mkl/19.0.4
Attention : l'ordre dans lequel les modules sont indiqués peut être important !
Ainsi, la commande suivante ne donne pas le résultat escompté puisque les modulesintel-compilers/18.0.5
etintel-mpi/18.0.5
ne sont finalement pas utilisés :$ module load netcdf intel-compilers/18.0.5 intel-mpi/18.0.5 Loading netcdf/4.7.2-mpi Loading requirement: intel-compilers/19.0.4 intel-mpi/19.0.4 Loading intel-compilers/18.0.5 ERROR: Conflicting intel-compilers is loaded Loading intel-mpi/18.0.5 ERROR: Conflicting intel-mpi is loaded $ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 2) intel-mpi/19.0.4 3) netcdf/4.7.2-mpi
Dans ce cas, il faut charger
intel-compilers/18.0.5
etintel-mpi/18.0.5
avantnetcdf
pour avoir le résultat attendu :$ module load intel-compilers/18.0.5 intel-mpi/18.0.5 netcdf $ module list Currently Loaded Modulefiles: 1) intel-compilers/18.0.5 2) intel-mpi/18.0.5 3) netcdf/4.7.2-mpi
- Certains modules sont des raccourcis permettant de charger plusieurs modules en une seule opération. C'est le cas des modules nommés
intel-all/XX.Y.Z
, qui vont charger plusieurs modules définissant un environnement Intel complet pour une version XX.Y.Z choisie.
Par exemple avec Intel 19.0.4 :$ module load intel-all/19.0.4 Loading intel-all/19.0.4 Loading requirement: intel-compilers/19.0.4 intel-mkl/19.0.4 intel-mpi/19.0.4 intel-vtune/19.0.4 intel-advisor/19.0.4 intel-tbb/19.0.4 intel-itac/19.0.4 $ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 4) intel-vtune/19.0.4 7) intel-itac/19.0.4 2) intel-mkl/19.0.4 5) intel-advisor/19.0.4 8) intel-all/19.0.4 3) intel-mpi/19.0.4 6) intel-tbb/19.0.4
Déchargement d'un produit
Vous pouvez retirer un produit de votre environnement en utilisant la sous-commande unload
; vous pouvez aussi supprimer tous les modules avec la sous-commande purge
:
$ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 2) intel-mpi/19.0.4 3) intel-mkl/19.0.4 $ module unload intel-mkl/19.0.4 $ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 2) intel-mpi/19.0.4 $ module purge $ module list No Modulefiles Currently Loaded.
S'il s'effectue sans problème, le déchargement d'un produit ne renvoie aucune information.
Changement de version d'un produit
Lorsque vous souhaitez changer la version d'un produit déjà chargé, vous pouvez utiliser la sous-commande switch
:
$ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 2) intel-mpi/18.0.5 $ module switch intel-mpi/19.0.4 $ module list Currently Loaded Modulefiles: 1) intel-compilers/19.0.4 2) intel-mpi/19.0.4
Là encore, si tout se passe bien la commande ne renvoie aucun message.
Mise en garde pour l’édition de liens
Lors de la compilation de vos codes, même après avoir chargé le module adéquat pour utiliser une bibliothèque, il sera sans doute nécessaire de spécifier les librairies à utiliser lors de l'édition de liens.
Par exemple, pour compiler avec la bibliothèque mathématique HYPRE :
$ module load hypre $ ifort -o test -lHYPRE test.f90
Notez que, par contre, les chemins vers les fichiers headers, les modules Fortran, les librairies statiques (.a) et dynamiques (.so) sont positionnés automatiquement, sans qu'il soit nécessaire de les préciser.
Pour tous ces points, en cas de problème, contactez le Support de l'Assistance.
Modules compatibles avec la partition gpu_p5
Les travaux ciblant la partition gpu_p5 (extension installée en juin 2022 et équipée de GPU NVIDIA A100 80 Go) doivent utiliser des modules spécifiques/dédiés car les nœuds qui la composent sont équipés de CPU AMD alors que tous les autres nœuds de Jean Zay sont équipés de CPU Intel.
Attention : vous devez aussi recompiler vos codes avec les modules dédiés avant de les utiliser sur cette partition. Si vous prévoyez de lancer un code sur plusieurs partitions utilisant les 2 types de CPU (AMD et Intel), il est nécessaire de compiler des binaires distincts.
Important : les modules accessibles par défaut ne sont pas compatibles avec cette partition. Il est donc nécessaire de charger le module arch/a100
en premier pour avoir accès aux modules dédiés. Vous pouvez ensuite lister l'ensemble des modules compatibles avec la commande module avail
et charger les modules de votre choix.
$ module load arch/a100 $ module avail # la sortie a été tronquée, lancez la commande sur Jean Zay pour avoir une liste à jour ------------------------------------------- /gpfslocalsup/pub/module-rh/modulefiles ------------------------------------------- arm-forge/19.1.1 intel-all/2019.5(19.0.5) intel-itac/2020.1 intel-tbb/2019.6(19.0.4) pgi/20.1 arm-forge/20.1.2 intel-all/2020.0 intel-itac/2020.2 intel-tbb/2019.8(19.0.5) pgi/20.4 arm-forge/20.2.1 intel-all/2020.1 intel-itac/2020.3 intel-tbb/2020.0 [...] ----------------------------- /gpfslocalsup/pub/modules-idris-env4/modulefiles/linux-rhel9-x86_64 ----------------------------- anaconda-py2/2019.03 gcc/7.3.0 gcc/10.1.0-cuda-openacc python/3.6.15 python/3.10.4 anaconda-py3/2019.03 gcc/8.2.0 magma/2.5.4-cuda python/3.7.3 pytorch-gpu/py3/1.11.0 anaconda-py3/2020.11 gcc/8.3.0 nccl/2.9.6-1-cuda python/3.7.5 sox/14.4.2 anaconda-py3/2021.05 gcc/8.4.1(8.3.1) openfoam/2112-mpi python/3.7.6 sparsehash/2.0.3 cudnn/8.1.1.33-cuda gcc/9.1.0 openmpi/4.0.5-cuda python/3.7.10 tensorflow-gpu/py3/2.8.0 [...] $ module load ...
Modules compatibles avec la partition gpu_p6
Les travaux ciblant la partition gpu_p6 (extension installée en été 2024 et équipée de GPU NVIDIA H100 80 Go) doivent utiliser des modules spécifiques/dédiés car les nœuds qui la composent ont une architecture spécifique.
Attention : vous devez aussi recompiler vos codes avec les modules dédiés avant de les utiliser sur cette partition. Si vous prévoyez de lancer un code sur plusieurs partitions utilisant des architectures différentes, il est nécessaire de compiler des binaires distincts.
Important : les modules accessibles par défaut ne sont pas compatibles avec cette partition. Il est donc nécessaire de charger le module arch/h100
en premier pour avoir accès aux modules dédiés. Vous pouvez ensuite lister l'ensemble des modules compatibles avec la commande module avail
et charger les modules de votre choix.
$ module load arch/h100 $ module avail # la sortie a été tronquée, lancez la commande sur Jean Zay pour avoir une liste à jour ------------------------------------ global/user modulerc ------------------------------------ java/1.8.0_222 java/11.0.2 ---------------------- /lustre/fshomisc/sup/pub/modules-rh/modulefiles ----------------------- arch/a100 cuda/12.1.0 intel-oneapi-mkl/2024.1 nvidia-nsight-compute/2024.2.1.0 arch/h100 cuda/12.2.0 nvidia-compilers/24.5 nvidia-nsight-systems/2024.4.1.61 cuda/11.8.0 cuda/12.4.1 nvidia-compilers/24.7 ----- /lustre/fshomisc/sup/pub/modules-idris-env4/modulefiles/linux-rhel9-sapphirerapids ----- anaconda-py3/2024.06 nccl/2.19.3-1-cuda anaconda-py3/2024.06-h100 nccl/2.21.5-1-cuda arpack-ng/3.8.0-mpi-cuda nccl/2.22.3-1-cuda [...] $ module load ...