Using software in modules🔗

To get your work done on the cluster, the software you require must be available on the cluster. Much common software is already installed, but if you need some special program it has to be installed. As a user you have the possibility to install software in your home directory. If you need support on installation please send a support request.

To organise much of the software installed on the cluster we use the Environment Module System https://en.wikipedia.org/wiki/Environment_Modules_(software). It allows you to list available software and dynamically load software modules in your command line session. The command used is simply called module, see man module for detailed usage information.

We offer a module system with a lot of pre-installed software. If your software isn't available, we offer several compilers for compiling the software yourself. Many languages also have systems in place for user local installations, see Python, Perl below. If it's a common software, we can do a system installation.

You can also use libraries, build tools, and compilers from the module system to build your own software.

We use EasyBuild to build all software.

Modules🔗

A module system is used to allow the user to specify which application/software they want to use on the cluster. The modules package allows dynamical modification of a user's environment (PATH etc.), which makes the program available from the shell. Modules can be loaded and unloaded dynamically.

The module command🔗

The module command (or the ml shortcut) controls how to change the software you have available. For the complete manual, please use

man module

To search for a module names:

module spider softwarename
ml spider softwarename

To search for keywords in a module (such as extensions in bundles):

module keyword foo
ml keyword foo

To view available software possible to load directly:

module avail
ml avail

To see what modules are loaded at the moment use:

module list
ml

To load/unload a module:

module load <modulename>
module unload <modulename>
module purge    # Unloads all currently loaded modules`
ml <modulename>
ml unload <modulename>
ml purge

To see what a module does, use

module show <modulename>
ml show <modulename>

This will display what environment variables the module sets or modifies.

Toolchains🔗

A toolchain is a set of modules that makes up the necessary components to build most software.

Most commercial (closed source) tools, do not require a toolchain, e.g. Mathematica, MATLAB. These can be loaded directly;

module load MATLAB/2023a

other software is build for a particular toolchain, predominatly foss (GCC, OpenMPI, OpenBLAS), and intel.

Toolchain hierarchy

Note: You can see the CUDA version in as a version suffix, indicating GPU support (but remember to look at the job statistics to verify that you are actually using the GPUs).

Finding compatible software🔗

You can't mix toolchains; something built with e.g. foss-2022a can not be combined with anything built for foss-2021b. Loading most modules will load many additional modules which it depends on, and trying to swap them out will not be compatible. If you need a library updated for a newer toolchain you can request it by contacting the support.

The module command will complain if you accidentally try to load incompatible modules.

module load TensorFlow/2.11.0-foss-2022a-CUDA-11.7.0
module load CMake/3.27.6-GCCcore-13.2.0 # This will fail; it uses a different compiler version

To find which compiler you have currently loaded (via TensorFlow/2.11.0-foss-2022a-CUDA-11.7.0 here) you can list them

module load TensorFlow/2.11.0-foss-2022a-CUDA-11.7.0
moduel list  # shows all the loaded dependencies

where you will see it was GCCcore-11.3.0.

You can module purge to start over if you loaded the wrong versions.

Recent toolchains🔗

Key software in recent toolchains:

Release GCC OpenMPI Intel CUDA Python
2021a 10.3.0 4.1.1 2021.2.0 11.3.1 3.9.5
2021b 11.2.0 4.1.1 2021.4.0 11.4.1 3.9.6
2022a 11.3.0 4.1.4 2022.1.0 11.7.0 3.10.4
2022b 12.2.0 4.1.4 2022.2.1 12.0.0 3.10.8
2023a 12.3.0 4.1.5 2023.1.0 12.1.1 3.11.3
2023b 13.2.0 4.1.6 2023.2.1 12.4.0 3.11.5