Skip to content

Software Environment

about 11 minutesStudents, Staffchecked 13 November 2024

Software on UBELIX can be accessed through modules. With the help of the module command, you will be able to load and unload the desired compilers, tools and libraries.

Software modules allow you to control which software and versions are available in your environment. Modules contain the necessary information to allow you to run a particular application or provide you access to a particular library so that

  • different versions of a software package can be provided.
  • you can easily switch to different versions without having to explicitly specify different paths.
  • you don’t have to deal with dependent modules, they are loaded at the same time as the software.

Modules are managed by the module command:

bash
$ module <sub-command> <module-name>

where the sub-command indicates the operation you want to perform. The sub-command is followed by the name of the module on which you want to perform the operation.

Sub-commandDescription
spiderSearch for modules and display help
keyword, keySearch for modules based on keywords
avail, avList available modules
whatisDisplay short information about modules
helpPrint the help message of a module
listList the currently modules loaded
load, addLoad a module
unloadRemove a module from your environment
purgeUnload all modules from your environment
showShow the commands in the module’s definition file

Lmod is a hierarchical module system. It distinguishes between installed modules and available modules. Installed modules are all modules that are installed on the system. Available modules are all modules that can be loaded directly at that time without first loading other modules. The available modules are often only a subset of the installed modules. However, Lmod can tell you for each installed module what steps you must take to also make it available so that you can load it. Therefore, the commands for finding modules are so important.

Some modules may also provide multiple software packages or extensions. Lmod can also search for these.

The basic command to search for software on UBELIX is module spider. It has three levels, producing different outputs:

  1. module spider without further arguments will produce a list of all installed software and show some basic information about those packages. Some packages may have an (E) behind their name and will appear in blue (in the default color scheme) which means that they are part of a different package. The following levels of module spider will then tell you how to find which module(s) to load.

    Note that module spider will also search in packages that are hidden from being displayed. These packages can be loaded and used. However, we hide them either because they are not useful to regular users or because we think that they will rarely or never be directly loaded by a user and want to avoid overloading the module display.

  2. module spider <name of package> will search for the specific package. This can be the name of a module, but it will also search some other information that can be included in the modules. The search is case-insensitive, e.g.

    bash
    $ module spider netcdf

    will show something along the lines of

    ------------------------------------------------------------------------------------------------------------------------------------
    netCDF:
    ------------------------------------------------------------------------------------------------------------------------------------
    Description:
    NetCDF (network Common Data Form) is a set of software libraries and machine-independent data formats that support the
    creation, access, and sharing of array-oriented scientific data.
    Versions:
    netCDF/4.8.0-gompi-2021a
    netCDF/4.9.0-gompi-2022a
    netCDF/4.9.2-gompi-2023a
    netCDF/4.9.2-iimpi-2023a
    ------------------------------------------------------------------------------------------------------------------------------------
    For detailed information about a specific "netCDF" package (including how to load the modules) use the module's full name.

    (abbreviated output) so even though the capitalization of the name was wrong, it can tell us that there are multiple versions of the netCDF library. The gompi-xxxx and iimpi-xxxx tell that the difference is the compiler that was used to install the library. This is important as it is risky to combine modules compiled with different compilers.

    In some cases, if there is no ambiguity, module spider will already produce help about the package.

  3. module spider <module name>/<version> will show more help information about the package, including information on which other modules need to be loaded to be able to load the package, e.g.

    bash
    $ module spider git/2.41.0-GCCcore-12.3.0-nodocs

    will return

    ------------------------------------------------------------------------------------------------------------------------------------
    git: git/2.41.0-GCCcore-12.3.0-nodocs
    ------------------------------------------------------------------------------------------------------------------------------------
    Description:
    Git is a free and open source distributed version control system designed to handle everything from small to very large
    projects with speed and efficiency.
    This module can be loaded directly: module load git/2.41.0-GCCcore-12.3.0-nodocs
    Help:
    Description
    ===========
    Git is a free and open source distributed version control system designed
    to handle everything from small to very large projects with speed and efficiency.
    More information
    ================
    - Homepage: https://git-scm.com

The module avail command is used to show only available modules, i.e., modules that can be loaded directly without first loading other modules. It can be used in two ways:

  1. Without a further argument, it will show an often lengthy list of all available modules. Some modules will be marked with (D) which means that they are the default module that would be loaded should you load the module using only its name.

  2. With the name of a module (or a part of the name), it will show all modules that match that (part of) a name:

    bash
    $ module avail netcdf

    will show something along the lines of

    ----------------------------------------------------- /software.9/modulefiles/data -----------------------------------------------------
    netCDF-C++4/4.3.1-gompi-2023a netCDF-Fortran/4.6.1-iimpi-2023a (D) netCDF/4.9.2-gompi-2023a
    netCDF-C++4/4.3.1-iimpi-2023a (D) netCDF/4.8.0-gompi-2021a netCDF/4.9.2-iimpi-2023a (D)
    netCDF-Fortran/4.6.1-gompi-2023a netCDF/4.9.0-gompi-2022a
    Where:
    D: Default Module

Loading and unloading modules in Lmod is very similar to other module systems. Also, note that only available modules can be loaded with the commands below. Some installed modules may only become available after first loading other modules as discussed above.

To load a module, use the module load command. For example, to load the FFTW library, use:

bash
$ module load FFTW

This command will load the default version of the module. If the software you loaded has dependencies, they will be loaded in your environment at the same time.

To load a specific version of the module, you need to specify it after the name of the module:

bash
$ module load FFTW/3.3.10-GCC-12.3.0

To unload a module from your environment, use the unload sub-command followed by the name of the module you want to remove.

$ module unload FFTTW

In most cases multiple module load or module unload commands can be combined in a single module load or module unload command.

You can also remove all loaded modules from your environment by using the purge sub-command.

bash
$ module purge

You can list currently loaded modules using

bash
$ module list

Workspace modules provide support for user-friendly file system access and custom software stacks in HPC Workspaces.

module load Workspace

The workspace module provides the following variables:

Variable
Function
$WORKSPACEfull path to the Workspace. Thus, you can access the workspace using: cd $WORKSPACE
$SCRATCHfull path to the Workspace SCRATCH directory. Thus you can access it using: cd $SCRATCH

The Workspace module provides tools to install custom software within your Workspace. See our EasyBuild documentation for details on how to install software modules for all users of a Workspace. Workspace software modules can be accessed by loading the Workspace module and the software product module.

The workspace module will also modify the following environment variables:

Variable
Function
$APPTAINER_BINDPATHusing singularity, the Workspace directory will be bind into the container without manual specification. The WORKSPACE variable as well as the SCRATCH variable will also be ported into the container. Thus, you can specify locations with $WORKSPACE or $SCRATCH within the container.
$PYTHONPATHif Python or Anaconda is loaded beforehand, it is set to: $WORKSPACE/PyPackages/lib/pythonXXX/site-packages where XXX is the Python major and minor version. And also add the bin directory to $PATH.
$PYTHONPACKAGEPATHif Python or Anaconda is loaded beforehand, it is set to: $WORKSPACE/PyPackages. This can be used for e.g. pip install --prefix $PYTHONPACKAGEPATH
$CONDA_ENVS_PATHused to create conda environments shared within the Workspace
$R_LIBSused to install additional R packages in the shared Workspace. The directory need to be created first. See R page

A toolchain is a set of modules all building on top of each other. Toolchains are provided in different versions and updated typically once a year. The UBELIX team will only support the three most recent toolchain versions available.

The two main toolchains foss and intel are subdivided into sub-toolchains that belong to the same family.

Toolchainpackages
fossGCC, OpenMPI, OpenBLAS, FFTW, ScaLAPACK
intelIntel compiler, (GCC required), MKL, Intel MPI
FamilySubtoolchains
fossGCC, gompi
inteliompi, iomkl

Sometimes, if you frequently use multiple modules together, it might be useful to save your environment as a module collection.

A collection can be created using save sub-command.

bash
$ module save <collection-name>

Your saved collections can be listed using the savelist sub-command.

bash
$ module savelist

Of course, the main interest of a collection is that you can load all the modules it contains in one command. This is done using the restore sub-command.

bash
$ module restore <collection-name>

More options to manage collections of modules can be found by running module help or in the Lmod User Manual.

This a (incomplete) list of the pre-installed software available on UBELIX.

NameVersion(s)
foss2021a, 2021b, 2022a, 2022b, 2023a
intel2021a, 2021b, 2022a, 2022b, 2023a
PGI19.4
NAGfor6.2.14
NVHPC23.7 (CUDA/12.1.1)
NameVersion(s)
CUDA11.8.0, 12.1.1, 12.2.0
cuDNN8.7.0 (CUDA 11.8.0), 8.9.2 (CUDA 12.1.1 / 12.2.0)
NameVersion(s)
Anaconda32023.09-0, 2024.02-1
R4.2.1
MATLABR2023b
NameVersion(s)
GDAL3.7.1
GEOS3.12.0
GMP6.2.1
GSL2.7
HDF51.14.0
netCDF4.9.2
netCDF-C++44.3.1
netCDF-Fortran4.6.1
NameVersion(s)
Bowtie22.4.4
BLAST2.2.26
canu2.2
CDO2.1.1, 2.2.2
Clustal-Omega1.2.4
CP2K2023.1
cutadapt3.4
GROMACS2023.3
MEGAHIT1.2.9
Nextflow23.04.2
NCO5.1.9
ORCA5.0.3
RAxML8.2.12
RSEM1.3.3
RSeQC4.0.0
Subread2.0.3
SMRT-Link13.1.0
prokka1.14.5
NameVersion(s)
ncview2.1.8
ParaView5.11.2