Module Structure

The idea behind our module organization on MOGON NHR

Hundreds of software modules are installed on a typical cluster during its lifetime. This amount may complicate the usage of the cluster, especially for beginners. At the same time, a lot of advanced users are interested only in the latest versions of the programs. Therefore, for MOGON-NHR we introduce a system for module versions rotation and organization.

The modules are organized into several categories:

  • current - most recent versions of the software modules;
  • legacy - recently retired current modules;
  • archive - recently retired legacy modules and older ones.

By default, you only see the current modules. If you want to use modules from any other category, you have to activate it first.

For example, to activate the category legacy, you have to run following command:

module use /apps/easybuild/legacy/core/modules/all

You will now see all the modules from current and legacy categories together.

Rotation policy

We update modules seamlessly to ensure your workflow remains uninterrupted. After testing, we shift module categories: legacy modules move to archive, current modules become legacy, and the ones we’ve updated become current. This cycle is called module rotation.

Every module rotation is done on a maintenance day and is announced by HPC team in advance.

Most common issues

Every policy has a potential to cause little problems. We will list several common ones here.

Usage of specific module versions

It is a good practice to work with the same version of a software throughout your project. For example, you are using Python 3.10.8 and load it with module load lang/Python/3.10.8-GCCcore-12.2.0. However, after module rotation, this command will fail with:

The following module(s) are unknown:
"lang/Python/3.10.8-GCCcore-12.2.0"

The reason is the update of the current modules, where Python has changed to a newer version Python 3.11.3.

You have a choice:

  1. To keep using your old version, you need to activate legacy modules by executing
module use /apps/easybuild/legacy/core/modules/all
  1. To switch to a newer version of Python, you need to adapt your module load command:
module load lang/Python/3.11.3-GCCcore-12.3.0
Please make sure you edit not only the Python version, but also the versions of toolchains and compilers. In this case, we have also updated GCCcore-12.2.0 to GCCcore-12.3.0

Usage of default module versions

Consider situations where you use the default modules. In this case, you load the latest Python with

module load lang/Python

After module rotation, your workflow remains unchanged. However, the Python version you load shifts from 3.10.8 (old current, now in legacy) to 3.11.3 (new current).

This change may significantly impact your program’s behavior. While it might be acceptable for Python, scientific software like TensorFlow, Gromacs, etc., may exhibit deviations from previous behavior.