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.

Aktualisiert um 15:29 am 8. February 2021 von Gerd Pokorra