Module, Kesako ?#
module ou plus exactement Environment Modules (http://modules.sourceforge.net/) est un gestionnaire d'environnement qui permet de gérer quel package logiciel est chargé dans l'environnement de l'utilisateur. Ses fonctionnalités permettent de :
- lister l'ensemble des packages disponibles sur les serveurs de calculs
- lister les packages chargés par l'utilisateur
- charger ou décharger un package dans l'environnement de travail
- créer des modules spécifique à un(des) utilisateurs
- créer des modules spécifiques à des projets
Concrètement module vous permet de disposer d'une liste de packages parmi lesquels vous choisissez les outils que vous souhaitez utiliser. Vous pouvez considérer les packages comme des Plug In que vous chargez, déchargez de votre environnement de travail selon vos besoins.
A ce jour, plus de 1000 modulefiles sont disponibles, recouvrant 553 packages de logiciels bio-info proposés sous différente versions et 112 packages correspondant à des outils de développement (interpréteurs, compilateurs, bibliothèques...)
Quelques commandes utiles#
module av#
La commande module av vous affichera la liste de tous les modules installés sur les serveurs de calculs
exemple:
Code Block (text)
maestro:~ > module av
------------------------------------------------------------ /local/gensoft2/modules -----------------------------------------------------------
AlienTrimmer/0.3.0 clean_ngs/0.7(default) netphos/1.0(default)
AlienTrimmer/0.3.2 comalign/NA(default) newick-utils/1.6(default)
AlienTrimmer/0.3.2-gcj(default) combat/1.0(default) ngs_roi/0.2.2
BAMStats/1.25(default) concatfasta/1.00(default) ngs_roi/150(default)
BEAM/NA(default) consed/19 njplot/20051109(default)
BMGE/1.0(default) consed/26.0(default) ode/0.12
BclConverter/1.7.1(default) consensus/2004-04-14(default) paml/4.4c(default)
CCAT/3.0(default) cosa/NA(default) paup/4b10(default)
CLCGenomicsWorkbench/6.0(default) crac/1.3.0(default) pb/0.6.1-Paracel
CLCGenomicsWorkbench/6.5.1 crop/v1.33(default) pb/1.6.1-Paracel
CNVnator/v0.3(default) cufflinks/1.2.0 pb/1.8.5-Paracel(default)
ChIPMunk/v4.2(default) cufflinks/2.0.2(default) pdb-lib/0.99(default)
ClonalFrame/1.2(default) cutadapt/0.9.4 pdb-lib/1.0
Clustal-Omega/1.0.3 cutadapt/1.1 pedstats/0.6.12(default)
Clustal-Omega/1.1.0(default) cutadapt/1.3(default) penncnv/2009.08.27(default)
ClustalW/2.0.12(default) dash/1.1.0(default) penncnv_script/1.0(default)
ClustalW/2.1 dbtools/0.99a pf1-tools/0.1(default)
..... etc etc
vous obtenez ainsi la liste de TOUS les modules disponibles.
cette liste comporte plusieurs informations
package_name est le nom du modulefile et du package correspondant
version vous renseigne sur le numéro de version du package
la mention (default) sera décrite un peu plus loin.
par exemple blast/2.2.21 est le package blast en version 2.2.21
NB : cette commande est assez longue à répondre (c'est un sujet sur lequel nous travaillons) et elle affiche ces résultats sur stderr pour pouvoir la piper dans more ou less* il faut donc travailler sur le flux stderr ce qui selon votre shell s'écrit comme cela: module av |& more ou module avail 2>&1 | more
module av vous permet aussi de restreindre la recherche en spécifiant un mot.
Attention ce mot correspond au début du nom du module//package et la recherche est ~~sensible à la casse~~ maintenant insensible à la casse. (modification mise en place mi juin 2014)
Par exemple module av bla vous affichera tous les modules dont le nom COMMENCE par bla.
Code Block (text)
maestro:~ > module av bla
------------------------------------------------------------ /local/gensoft2/modules ------------------------------------------------------------
blast/2.2.21 blast+/2.2.29 blast2taxonomy/2.1(default) blat/35(default)
blast/2.2.26(default) blast2seqids/1.3(default) blast2usa/1.2(default)
blast+/2.2.28(default) blast2taxonomy/2.0 blastTaxoAnalysis/1.0(default)
module load#
La commande pour charger un module dans votre environnement est module load <package name> , ou pour charger une version spécifique module load <package_name>/<version> .
Dans le cas ou le numéro de version n'est pas spécifié, le module chargé sera celui comportant le drapeau (default) qui sera automatiquement choisi.
Par exemple, prenons le cas suivant :
Code Block (text)
maestro:~ > module av blast
------------------------------------------------------------ /local/gensoft2/modules ------------------------------------------------------------
blast/2.2.21 blast/2.2.26(default)
si vous exécutez la commande module load blast sans spécifier de numéro de version, vous chargerez le module par défaut c'est-à-dire la version 2.2.26 de blast
- si vous exécutez la commande
module load blast/2.2.26vous chargerez la version 2.2.26 de blast - si vous exécutez la commande
module load blast/2.2.21vous chargerez la version 2.2.21 de blast
NB il est conseillé de spécifier le numéro de version à utiliser
NB bien qu'il soit possible de le faire, il est FORTEMENT DÉCONSEILLÉ de charger plusieurs versions différentes d'un même programme
NB module load accepte plusieurs arguments, ex module load blast/2.2.21 html4blast chargera les 2 modules
module list#
Pour obtenir la liste des différents modules que vous avez chargés, utilisez la commande module list.
exemple:
Code Block (text)
maestro:~ > module list
Currently Loaded Modulefiles:
1) blast/2.2.21 2) html4blast/1.7a 3) blast2seqids/1.3
on voit que l'utilisateur a chargé les 3 modules suivants blast, html4blast et blast2seqids en version 2.2.21, 1.7a et 1.3 respectivement.
module show#
La commande module show <package name>. vous permet de visualiser le modifications apportées à votre environnemnt par ce module.
il permet en particulier de visualiser si des variables d'environnement sont positionnées par ce module.
exemple
Code Block (text)
maestro:~ > module show blast
-------------------------------------------------------------------
/local/gensoft2/modules/blast/2.2.26:
module-whatis Set environnement for blast (2.2.26)
module-whatis Categorie: EDAM-0002421
module-whatis Categorie: EDAM-0002422
module-whatis Categorie: EDAM-0000338
module-whatis Categorie: EDAM-0000239
module-whatis Categorie: EDAM-0000346
module-whatis Categorie: EDAM-0000491
module-whatis Categorie: EDAM-0000496
module-whatis Categorie: EDAM-0003096
prepend-path PATH /local/gensoft2/exe/blast/2.2.26/bin
prepend-path PATH /local/gensoft2/exe/blast/2.2.26/scripts
prepend-path MANPATH /local/gensoft2/exe/blast/2.2.26/man
setenv NCBI /local/gensoft2/exe/ncbitools/20122006/share
setenv BLASTDB /local/databases/index/blast2
-------------------------------------------------------------------
on note qu'une fois le module blast/2.2.26 sera chargé:
- le PATH sera modifié et pointera sur
/local/gensoft2/exe/blast/2.2.26/binet/local/gensoft2/exe/blast/2.2.26/scripts - 2 variables d'environnement seront positionnées NCBI et BLASTDB que vous pouvez utiliser en ligne de commande ou dans vos scripts.
module unload#
La commande pour supprimer un module de votre environnement est module unload <package name>. Il n'est pas nécessaire de spécifier le numéro de version.
exemple
Code Block (text)
maestro:~ > module list
Currently Loaded Modulefiles:
1) blast/2.2.21 2) html4blast/1.7a 3) blast2seqids/1.3
maestro:~ > module unload html4blast
maestro:~ > module list
Currently Loaded Modulefiles:
1) blast/2.2.21 2) blast2seqids/1.3
module purge#
module purge est un super module unload, ie : cette commande élimine de l’environnement tous les modules chargés.
module use#
La commande module use vous permet de rajouter au chemin de recherche des modulefiles un ou plusieurs répertoires de votre choix.
Cela revient à modifier la variable d'environnement MODULEPATH
Par défaut module use modifie la variable d'environnement MODULEPATH de telle sorte que le(s) répertoire(s) apparaisse(nt) en première position dans le chemin de recherche.
Il est possible de modifier ce comportement, de telle sorte à faire apparaitre ce(s) répertoire(s) en fin de chemin de recherche en utilisant l'option -a ou --append.
exemple:
Code Block (text)
maestro:~ > echo $MODULEPATH
/local/gensoft2/modules:/usr/share/Modules/modulefiles:/etc/modulefiles
maestro:~ > module use ~/privatemodules
maestro:~ > echo $MODULEPATH
/pasteur/homes/edeveaud/privatemodules:/local/gensoft2/modules:/usr/share/Modules/modulefiles:/etc/modulefiles
module unuse#
retire un ou des répertoires du chemin de recherche des modulefiles.
module help#
La commande module help <package name> affiche des informations sur le package, telles qu'une description succincte, la home page du package, la présence de documentation locale, quand ces informations sont disponibles.
De plus cette commande vous affiche la liste des commandes fournies par le package.
exemple:
Code Block (text)
maestro:~ > module help ptools
----------- Module Specific Help for 'ptools/0.99' ----------------
This modulefile defines the requisite environement
needed to use package: ptools version (0.99)
Parallel versions of various tools
WARNING: ptools relies at least on one of the module(s) < blast or bwa or infernal or fqtools or maq or taxoptimizer >. Load them accordingly to your needs
package provides following commands:
pcmsearch
pblastall
pmaq
ptaxoptimizer
pbwa
pfqextract
module display#
module display <package name> affiche les modifications de l’environnement (PATH, variables d'environnement, ect...) qui seront effectuées lors du load du module correspondant
exemple:
Code Block (text)
maestro:~ > module display toppred
-------------------------------------------------------------------
/local/gensoft2/modules/toppred/1.10:
module-whatis Set environnement for toppred (1.10)
module-whatis Categorie: EDAM-0000269
module-whatis Categorie: EDAM-0000270
module-whatis Categorie: EDAM-0002241
prepend-path PATH /local/gensoft2/exe/toppred/1.10/bin
prepend-path PATH /local/gensoft2/exe/toppred/1.10/scripts
prepend-path MANPATH /local/gensoft2/exe/toppred/1.10/man
prepend-path INFOPATH /local/gensoft2/exe/toppred/1.10/man
setenv TOPPREDDATA /local/gensoft2/exe/toppred/1.10/share/toppred
-------------------------------------------------------------------
module whatis#
module whatis <package name> affiche une brève description du package ainsi que sa classification EDAM.
module apropos#
module apropos <string> n'affiche que les noms de modules dont la description (telle qu'affichée par la commande module whatis) contient la chaine
Concrètement, module apropos permet de chercher les modules correspondant à une classification EDAM donnée.
Chargement automatique de modules au login.#
Si vous souhaitez charger automatiquement un(des) module(s) au login mettez les commandes module load correspondantes dans le fichier de configuration de votre shell, classiquement ~/.bashrc.
exemple extrait du ~/.bashrc d'un utilisateur :
Code Block (text)
# ------ alias perso -------------------------------------------------
alias ls='ls -F'
alias ll='ls -Fl'
alias m='more'
alias l='less -aiMQ'
# ------ modules charge au login ------------------------------------
module load R
module load boost
module load gsl/1.15
Cet utilisateur chargera donc automatiquement lors de chaque connexion sur la machine le module R, la bibliothèque boost en version par défaut tel que définies par le système, ainsi que la bibliothèque gsl en version 1.15
Écrire et utiliser vos propres modulefiles#
Pourquoi donc ?#
Supposons que vous souhaitiez décrire un pipeline qui demande plusieurs outils avec des versions spécifiques, que ce pipeline demande la mise en place d'alias spécifiques, de variables d'environnement particulières, etc, etc...
Supposons que vous ayez à gérer simultanément plusieurs projets utilisant des versions différentes d'un même outil, et que vous souhaitiez avoir la garantie que les prérequis pour chacun de ces projets sont respectés.
Fournir un modulefile spécifique à ces exemples vous assurera une mise en place de l'environnement de travail (versions spécifiques, variables d'environnement, etc...) correspondant à vos besoins.
Comment écrire un module file#
Les modulefiles sont écrits en TCL
exemple:
Code Block (text)
#%Module1.0
proc ModulesHelp { } {
puts stderr "\tun modulefile pour l'exemple"
}
module-whatis "un exemple de modulefile"
# definition de la variable d'environnement ENV_VAR1
setenv ENV_VAR1 toto
# ajout du path vers mes outils
preprend-path PATH /quelque/part/par/la
preprend-path MANPATH /quelque/part/par/ici
# definition de l'alias ma_cmd
set-alias ma_cmd "cmd -p 25 -t N"
# chargement de modules et versions spécifiques requis pour le projet
module load toto/1.0 bond/007
Voici quelques éléments de syntaxe :
- ModulesHelp: la fonction qui est appelée quand on exécute la commande
module help moddulefile. - module-whatis: la valeur de module-whatis sera affichée lors de l'appel à
module whatis moddulefile. - setenv:
setenv variable valuepositionne la variable d'environnement à la valeur value. - prepend-path:
prepend-path variable valuePositionne en début d'une variable de type path la valeur value. - append-path:
append-path variable valuePositionne en fin d'une variable de type path la valeur value. - set-alias:
set-alias alias valuedéfinit l'alias avec la valeur value
pour une description détaillée de la syntaxe d'un modulefile, cf: man modulefile
NB: les modulefiles disponibles sur le cluster sont accessibles dans /local/gensoft2/modules
comment utiliser vos propres modulefiles#
Une fois vos modulefiles écrits, il vous suffit de créer un répertoire ~/privatemodules
puis de copier vos modulefiles dans celui-ci. Ensuite l'invocation du module use.own: module load use.own vous permettra d'utiliser vos modulefiles
Attention: exécuter la commande module purge aura pour effet de décharger le module use.own et donc de vous faire perdre l'accès à vos modulefiles personnels, tant que vous n'aurez pas rechargé celui-ci.
Alternativement, il vous est possible en utilisant la commande module use d'ajouter tout répertoire comportant vos modulesfiles personnels au chemin de recherche de module. par exemple module use ~/privatemodules vous donnera accès à vos modulefiles. Dans ce cas de figure, l'accès aux modulefiles personnels est insensible à tout module purge
Code Block (text)
maestro:~ > mkdir ~/privatemodules
maestro:~ > cp my_modulefile ~/privatemodules
maestro:~ > module use ~/privatemodules
maestro:~ > module load my_modulefile
NB il est recommandé de travailler avec une arborescence pour classifier vos modulesfiles.
modules et scripts#
Utiliser module au sein d'un script#
Selon les shells, les méthodes de login sur les machines, les méthodes de soumission des jobs, la fonction module peut être définie ou non. La solution pour s'affranchir de cette contrainte est de sourcer le fichier d'init du shell utilisé.
Cluster maestro#
Les premières lignes d'un script shell bash doivent être :
Code Block (text)
#!/bin/bash
# get sure module function is defined
# if using another shell, adapt
source /opt/gensoft/adm/etc/profile.d/modules.sh
# s'assurer d'avoir un environnement propre
module purge
# load the modules we need for this script
module load cufflinks/2.0.1 tophat/2.0.8 bowtie2/2.1.0
# do the job
Code Block (text)