Environment Modules: Difference between revisions
No edit summary |
|||
(112 intermediate revisions by 12 users not shown) | |||
Line 1: | Line 1: | ||
The usage of compilers, libraries and software packages requires by default users to set up |
|||
manually the user environment. |
|||
Software on the bwHPC Clusters is provided as '''Software Environment Modules''', or short '''Modules'''. |
|||
The bwHPC clusters provide users the possibility to load and unload '''complete enviroments''' |
|||
for compilers, libraries and software packages by single commands. Because of the |
|||
convenient modularity this software is called ''Environment Modules''. |
|||
Modules make it possible to have different versions of a software installed at a the same time. |
|||
= Environment Modules = |
|||
The complete environments for the software package, compilers and libraries and needed by this specific version is then loaded by a single command. This happens usually in the beginning of the jobscript. |
|||
Full documentation: <code>module help</code> and [https://lmod.readthedocs.io/en/latest/ Environment Modules Website] |
|||
The Environment Modules software enables dynamic modification of your environment by the |
|||
use of so-called ''modulefiles''. A ''modulefile'' contains information to configure the shell |
|||
for an application. Typically, a modulefile contains instructions that alter or set shell |
|||
environment variables, such as PATH and MANPATH, to enable access to various installed |
|||
software. One of the key features of using the Environment Modules software is to allow multiple versions of the same software to be used in your environment in a controlled manner. |
|||
For example, two different versions of the Intel C compiler can be installed on the system at the same time - the version used is based upon which Intel C compiler modulefile is loaded. |
|||
The software stack of bwHPC clusters provides a number of modulefiles. You can also |
|||
create your own modulefiles. Modulefiles may be shared by many users on a system, and |
|||
users may have their own collection of modulefiles to supplement or replace the shared |
|||
modulefiles. |
|||
= Basic Usage = |
|||
A modulefile does not provide configuration of your environment until it is explicitly loaded. |
|||
That is, the specific modulefile for a software product or application must be loaded in your environment (with the |
|||
== Module categories, versions and defaults == |
|||
The bwHPC clusters categorize ''Modules'', each software can exist in different versions: |
|||
category/softwarename/version |
|||
e.g. if julia is installed, it is in the module <code>math/julia</code>. |
|||
You can load it in the default version just specifying math/julia or a specific version <code> math/julia/1.11.0 </code> |
|||
Please note, that software may be '''hidden''' from default view using a dot in front of the version; i.e. |
|||
the software is still available but not visible in <code>module avail</code> but may still be loaded, |
|||
e.g. <code> math/julia/.1.10.0 </code>. |
|||
Currently all bwHPC software packages are assigned to one of the following ''Module'' categories: |
|||
<code> bio cae chem compiler devel lib math mpi numlib phys system vis </code> |
|||
== Display and search available Modules == |
|||
Available ''Modules'' are modulefiles that can be loaded by the user. A ''Module'' must be loaded before it provides changes to your environment. You can display all available ''Modules'' on the system by executing: |
|||
<pre> |
<pre> |
||
$ module |
$ module avail |
||
</pre> |
</pre> |
||
command) before the configuration information in the modulefile is effective. |
|||
You can selectively list software in one of those categories using, e.g. for the category "compiler", or just all versions of a certain module: |
|||
The modulefiles that are currently loaded for you can be displayed by the |
|||
<pre> |
|||
command |
|||
$ module avail compiler/ |
|||
$ module avail compiler/gnu |
|||
</pre> |
|||
== module help == |
|||
A help message for a specific ''Module'' can be displayed with ''''module help category/softwarename/version''''. |
|||
<br> |
|||
The help message usually contains additional information about the software and points to the software website and documentation. |
|||
<pre> |
|||
$ module help system/example/1.0 |
|||
----------------- Module Specific Help for "system/example/1.0" --------------------------- |
|||
"This module provides a bwhpc-examples job that works on every cluster. |
|||
[... rest of the output is omitted in the Wiki for clarity ...] |
|||
</pre> |
|||
== Loading Modules and Check they are loaded == |
|||
{|style="background:#deffee; width:100%;" |
|||
|style="padding:5px; background:#cef2e0; text-align:left"| |
|||
[[Image:Attention.svg|center|25px]] |
|||
|style="padding:5px; background:#cef2e0; text-align:left"| |
|||
Don't use module load in .bashrc → see [[.bashrc Do's and Don'ts]] |
|||
|} |
|||
To load a software ''Module'' and display all loaded modules: |
|||
<pre> |
<pre> |
||
$ module list |
$ module list |
||
No Modulefiles Currently Loaded. |
|||
$ module load system/example/1.0 |
|||
$ module list |
|||
Currently Loaded Modulefiles: |
|||
1) system/example/1.0 |
|||
</pre> |
</pre> |
||
. You only have to load further modulefiles, if you want to use additional software |
|||
packages or to change the version of an already loaded software. |
|||
Modules make software available only in your current shell. Whenever you login in, you have to load the software again. Please do not auto-load modules in ~/.bashrc, this can lead to problems with system software or other modules you may load later. |
|||
== Software job examples == |
|||
bwHPC provides example job scripts for most installed software modules. |
|||
For a Software ''Module'' with the sofware called '''SOMESOFTWARE''', you can find the example directory by: |
|||
<pre> |
|||
$ cd $SOMESOFTWARE_EXA_DIR |
|||
</pre> |
|||
Copy the whole example folder to your $HOME directory, so you can edit those job examples: |
|||
<pre> |
|||
$ cd |
|||
$ mkdir softwarename_examples |
|||
$ echo $SOMESOFTWARE_EXA_DIR |
|||
# Please do not proceed if the command above does not provide any text ! |
|||
# Otherwise you will start to copy all system data (the directory "/"). |
|||
$ cp -r $SOMESOFTWARE_EXA_DIR/ softwarename_examples/ |
|||
</pre> |
|||
If your specific software isn't installed, there is a dummy software example module "system/example" present on all clusters. For this module, the process looks like this: |
|||
<pre> |
|||
# Load the example module |
|||
$ module load system/example/1.0 |
|||
# Run example in a temporary directory |
|||
$ mkdir tmp_example_dir |
|||
$ cp -r $EXAMPLE_EXA_DIR/ softwarename_examples/ |
|||
$ cd tmp_example_dir/bwhpc-examples |
|||
# Example jobscript for clusters using the SLURM batch system |
|||
sbatch examples-1.0.slurm |
|||
# Example jobscript for clusters using PBS |
|||
qsub examples-1.0.pbs |
|||
# Print the results |
|||
cat examples_result.txt |
|||
</pre> |
|||
---- |
---- |
||
[[Category:bwHPC|User Environment]] |
|||
= Additional Usage Recommendations = |
|||
[[Category:bwUniCluster|Environment Modules]] |
|||
=== Loading conflicts === |
|||
By default you can not load different versions of same software ''Module'' in same session. Loading for example Intel compiler version X while Intel compiler version Y is loaded results in error message as follows: |
|||
<source lang="bash"> |
|||
Module 'compiler/intel/X' conflicts with the currently loaded module(s) 'compiler/intel/Y' |
|||
</source> |
|||
The solution is [[#Unloading Modules|unloading]] or switching ''Modules''. |
|||
=== Showing the changes introduced by a Module === |
|||
Loading a ''Module'' will change the environment of the current shell session. For instance the $PATH variable will be expanded by the software's binary directory. Other ''Module'' variables may even change the behavior of the current shell session or the software program(s) in a more drastic way. |
|||
<br> |
|||
Loaded ''Modules'' may also invoke an additional set of environment variables, which e.g. point to directories or destinations of documentation and examples. Their nomenclature is systematic: |
|||
{| width=600px class="wikitable" |
|||
|- |
|||
! Variable |
|||
! Pointing to |
|||
|- |
|||
| $SWN_HOME |
|||
| Root directory of the software package |
|||
|- |
|||
| $SWN_DOC_DIR |
|||
| Documentation |
|||
|- |
|||
| $SWN_EXA_DIR |
|||
| Examples |
|||
|- |
|||
| $SWN_BPR_URL |
|||
| URL of software's Wiki article |
|||
|- |
|||
| and many many more... |
|||
| |
|||
|} |
|||
with SWN being the place holder of the software ''Module'' name. |
|||
<br> |
|||
All the changes to the current shell session to be invoked by loading the ''Module'' can be reviewed using ''''module show category/softwarename/version''''. |
|||
<br> |
|||
<pre> |
|||
$ module show system/example/1.0 |
|||
--------------------------------------------------------------------------------------------------- |
|||
/opt/bwhpc/common/modulefiles/Core/system/example/1.0.lua: |
|||
--------------------------------------------------------------------------------------------------- |
|||
whatis("A generic module containing a working bwhpc-examples job.") |
|||
setenv("EXAMPLE_VERSION","1.0") |
|||
setenv("EXAMPLE_HOME","/opt/bwhpc/common/system/example/1.0") |
|||
setenv("EXAMPLE_BIN_DIR","/opt/bwhpc/common/system/example/1.0/bin") |
|||
setenv("EXAMPLE_EXA_DIR","/opt/bwhpc/common/system/example/1.0/bwhpc-examples") |
|||
prepend_path("PATH","/opt/bwhpc/common/system/example/1.0/bin") |
|||
help([["This module provides a bwhpc-examples job that works on every cluster. |
|||
The module is used as example in the bwHPC-Wiki and therefore should be installed on every cluster, |
|||
such that users can try the commands out. |
|||
* The executable of this module can be found in the folder |
|||
$EXAMPLE_BIN_DIR |
|||
Upon loading the module, the binaries are added to PATH. |
|||
* Further documentation for using the example can be found in |
|||
https://wiki.bwhpc.de/e/Environment_Modules |
|||
* Examples are located at: |
|||
$EXAMPLE_EXA_DIR |
|||
]]) |
|||
</pre> |
|||
=== Modules depending on Modules === |
|||
Some program ''Modules'' depend on libraries to be loaded to the user environment. Therefore the |
|||
corresponding ''Modules'' of the software must be loaded together with the ''Modules'' of |
|||
the libraries. |
|||
<br> |
|||
By default such software ''Modules'' try to load required ''Modules'' and corresponding versions automatically. However, automatic loading might fail if a different version of that required ''Module'' |
|||
is already loaded (cf. [[#Loading conflicts|Loading conflicts]]). |
|||
<br> |
|||
== Unloading Modules == |
|||
To unload or to remove a software ''Module'' execute: |
|||
<pre> |
|||
$ module unload category/softwarename/version |
|||
</pre> |
|||
=== Unloading all loaded modules === |
|||
In order to remove all previously loaded software modules from your environment issue the command 'module purge'. |
|||
<br> |
|||
<pre> |
|||
$ module list |
|||
Currently Loaded Modulefiles: |
|||
1) devel/gdb/7.7 |
|||
2) compiler/intel/14.0 |
|||
3) mpi/openmpi/1.8-intel-14.0(default) |
|||
$ |
|||
$ module purge |
|||
$ module list |
|||
No Modulefiles Currently Loaded. |
|||
$ |
|||
</pre> |
|||
== Other Module commands == |
|||
=== module whatis === |
|||
A short description for a specific ''Module'' can be displayed with ''''module whatis category/softwarename/version'''' |
|||
<pre> |
|||
$ module whatis system/example/1.0 |
|||
system/example/1.0 : A generic module containing a working bwhpc-examples job. |
|||
</pre> |
Latest revision as of 13:42, 12 November 2024
Software on the bwHPC Clusters is provided as Software Environment Modules, or short Modules.
Modules make it possible to have different versions of a software installed at a the same time. The complete environments for the software package, compilers and libraries and needed by this specific version is then loaded by a single command. This happens usually in the beginning of the jobscript.
Full documentation: module help
and Environment Modules Website
Basic Usage
Module categories, versions and defaults
The bwHPC clusters categorize Modules, each software can exist in different versions:
category/softwarename/version
e.g. if julia is installed, it is in the module math/julia
.
You can load it in the default version just specifying math/julia or a specific version math/julia/1.11.0
Please note, that software may be hidden from default view using a dot in front of the version; i.e.
the software is still available but not visible in module avail
but may still be loaded,
e.g. math/julia/.1.10.0
.
Currently all bwHPC software packages are assigned to one of the following Module categories:
bio cae chem compiler devel lib math mpi numlib phys system vis
Display and search available Modules
Available Modules are modulefiles that can be loaded by the user. A Module must be loaded before it provides changes to your environment. You can display all available Modules on the system by executing:
$ module avail
You can selectively list software in one of those categories using, e.g. for the category "compiler", or just all versions of a certain module:
$ module avail compiler/ $ module avail compiler/gnu
module help
A help message for a specific Module can be displayed with 'module help category/softwarename/version'.
The help message usually contains additional information about the software and points to the software website and documentation.
$ module help system/example/1.0 ----------------- Module Specific Help for "system/example/1.0" --------------------------- "This module provides a bwhpc-examples job that works on every cluster. [... rest of the output is omitted in the Wiki for clarity ...]
Loading Modules and Check they are loaded
Don't use module load in .bashrc → see .bashrc Do's and Don'ts |
To load a software Module and display all loaded modules:
$ module list No Modulefiles Currently Loaded. $ module load system/example/1.0 $ module list Currently Loaded Modulefiles: 1) system/example/1.0
Modules make software available only in your current shell. Whenever you login in, you have to load the software again. Please do not auto-load modules in ~/.bashrc, this can lead to problems with system software or other modules you may load later.
Software job examples
bwHPC provides example job scripts for most installed software modules.
For a Software Module with the sofware called SOMESOFTWARE, you can find the example directory by:
$ cd $SOMESOFTWARE_EXA_DIR
Copy the whole example folder to your $HOME directory, so you can edit those job examples:
$ cd $ mkdir softwarename_examples $ echo $SOMESOFTWARE_EXA_DIR # Please do not proceed if the command above does not provide any text ! # Otherwise you will start to copy all system data (the directory "/"). $ cp -r $SOMESOFTWARE_EXA_DIR/ softwarename_examples/
If your specific software isn't installed, there is a dummy software example module "system/example" present on all clusters. For this module, the process looks like this:
# Load the example module $ module load system/example/1.0 # Run example in a temporary directory $ mkdir tmp_example_dir $ cp -r $EXAMPLE_EXA_DIR/ softwarename_examples/ $ cd tmp_example_dir/bwhpc-examples # Example jobscript for clusters using the SLURM batch system sbatch examples-1.0.slurm # Example jobscript for clusters using PBS qsub examples-1.0.pbs # Print the results cat examples_result.txt
Additional Usage Recommendations
Loading conflicts
By default you can not load different versions of same software Module in same session. Loading for example Intel compiler version X while Intel compiler version Y is loaded results in error message as follows:
Module 'compiler/intel/X' conflicts with the currently loaded module(s) 'compiler/intel/Y'
The solution is unloading or switching Modules.
Showing the changes introduced by a Module
Loading a Module will change the environment of the current shell session. For instance the $PATH variable will be expanded by the software's binary directory. Other Module variables may even change the behavior of the current shell session or the software program(s) in a more drastic way.
Loaded Modules may also invoke an additional set of environment variables, which e.g. point to directories or destinations of documentation and examples. Their nomenclature is systematic:
Variable | Pointing to |
---|---|
$SWN_HOME | Root directory of the software package |
$SWN_DOC_DIR | Documentation |
$SWN_EXA_DIR | Examples |
$SWN_BPR_URL | URL of software's Wiki article |
and many many more... |
with SWN being the place holder of the software Module name.
All the changes to the current shell session to be invoked by loading the Module can be reviewed using 'module show category/softwarename/version'.
$ module show system/example/1.0 --------------------------------------------------------------------------------------------------- /opt/bwhpc/common/modulefiles/Core/system/example/1.0.lua: --------------------------------------------------------------------------------------------------- whatis("A generic module containing a working bwhpc-examples job.") setenv("EXAMPLE_VERSION","1.0") setenv("EXAMPLE_HOME","/opt/bwhpc/common/system/example/1.0") setenv("EXAMPLE_BIN_DIR","/opt/bwhpc/common/system/example/1.0/bin") setenv("EXAMPLE_EXA_DIR","/opt/bwhpc/common/system/example/1.0/bwhpc-examples") prepend_path("PATH","/opt/bwhpc/common/system/example/1.0/bin") help([["This module provides a bwhpc-examples job that works on every cluster. The module is used as example in the bwHPC-Wiki and therefore should be installed on every cluster, such that users can try the commands out. * The executable of this module can be found in the folder $EXAMPLE_BIN_DIR Upon loading the module, the binaries are added to PATH. * Further documentation for using the example can be found in https://wiki.bwhpc.de/e/Environment_Modules * Examples are located at: $EXAMPLE_EXA_DIR ]])
Modules depending on Modules
Some program Modules depend on libraries to be loaded to the user environment. Therefore the
corresponding Modules of the software must be loaded together with the Modules of
the libraries.
By default such software Modules try to load required Modules and corresponding versions automatically. However, automatic loading might fail if a different version of that required Module
is already loaded (cf. Loading conflicts).
Unloading Modules
To unload or to remove a software Module execute:
$ module unload category/softwarename/version
Unloading all loaded modules
In order to remove all previously loaded software modules from your environment issue the command 'module purge'.
$ module list Currently Loaded Modulefiles: 1) devel/gdb/7.7 2) compiler/intel/14.0 3) mpi/openmpi/1.8-intel-14.0(default) $ $ module purge $ module list No Modulefiles Currently Loaded. $
Other Module commands
module whatis
A short description for a specific Module can be displayed with 'module whatis category/softwarename/version'
$ module whatis system/example/1.0 system/example/1.0 : A generic module containing a working bwhpc-examples job.