On the cluster, the so-called module environment system LMod version 8.2.4 is installed. Modules enable users to change environments (see Linux basics) quickly. For example, if a software is installed in multiple versions, the command to run the software would be ambiguous. In these cases, you can select which version you want by loading the corresponding module.
When you log in, some modules are loaded automatically, some need to be loaded by hand for their commands to be available. Others are loaded automatically when you load a module that depends on them.
Each module is defined in a separate module file.
Using the module system
LMod uses a number of commands, all of which start with the word module
.
To display available modules type module avail
:
$ module avail
---------------------------- /opt/ohpc/pub/moduledeps/gnu9 -----------------------------
R/3.6.3 mpich/3.3.2-ofi
gsl/2.6 mvapich2/2.3.2
hdf5/1.10.6 openblas/0.3.7
impi/2019.5 openmpi4/4.0.4 (L)
impi/2019.5.100010_cm9.0_6a80743563 pdtoolkit/3.25.1
impi/2020.1 plasma/2.8.0
impi/2020.1.100005_cm9.0_8629b716ff (D)
----------------------------- /cm/shared/ohpc/modulefiles ------------------------------
cmake/3.16.2 os
gnu9/9.3.0 (L) papi/5.7.0
intel/19.0.5_2019 paraver/4.8.2
intel/19.0.5.100010_cm9.0_6a80743563 prun/2.0
intel/19.1.1_2020 singularity/3.4.2
intel/19.1.1.100005_cm9.0_8629b716ff (D) ucx/1.8.0 (L)
libfabric/1.10.1 (L) valgrind/3.15.0
Loaded modules are marked with (L)
, default modules with (D)
. As you can see, there is a hierarchy of names, whose levels are separated by slashes like directory paths. For example, module load impi/2019.5
would load a specific version of the Intel MPI software, while module load impi
would load the preset default (impi/impi/2020.1.100005_cm9.0_8629b716ff
in this case).
Note also that they are grouped by paths in the MODULEPATH
environment variable. MODULEPATH
determines where groups of module files are.
Search function
Not all modules are always displayed with module avail
, because some modules depend on others. With the command
module spider <module name>
you can search for modules.
Other commands
The most important command is the one for loading and unloading modules:
$ module load <module name>
$ module unload <module name>
Loaded modules can be displayed with
$ module list
All modules can be unloaded with the following command (this is often useful for debugging):
module purge
There are some additional commands that can be shown with:
module help
Defining custom modules
Although you will typically use module files provided by ZIMT, in principle you can write your own module files. To do that you have to do two things: First, you need to write the module file and second, you need to add the path to the module file to MODULEPATH
.
Module files
A module file in LMod is a script that is written in the Lua language. It needs to end in .lua
. It defines which actions are to be performed when the module is loaded. Predefined Lua functions exist for these actions. As an example, the dot
module file is shown. dot
is a module on the cluster which adds the current directory (.
) to the PATH (see also Linux basics).
whatis("adds `.' to your PATH environment variable ")
append_path("PATH",".")
help([[ Adds `.' to your PATH environment variable
This makes it easy to add the current working directory
to your PATH environment variable. This allows you to
run executables in your current working directory
without prepending ./ to the excutable name
Version 3.2.10
]])
The function append_path()
does the actual appending, the functions help()
and whatis()
serve to provide users with information about the module. Here is a list with possible functions in LMod.
You can display the contents of an existing module file with module show <module name>
.
Adding to MODULEPATH
To add a path to an environment variable, you need to re-export the variable:
$ export MODULEPATH=$MODULEPATH:/home/demo_user/exampledir
More details are on the Linux basics page. That page also shows how to make this setting permanent by adding it to .bashrc
.
Caution: Changing environment variables, especially permanent changes, can lead to commands in Linux not functioning any more. You should exercise maximum caution when doing it. You can test changes to environment variables by entering them manually in the console. Then you can restore the previous settings by logging out and logging back in.