Applications

HPC systems include lots of different compilers, tools, and applications so it’s easy for command names and file paths to clash. We also need to support multiple versions of the same software. To make this easier for users, we use a "module" system that lets you find what programs and their versions are installed on the system, and load and switch between these.

When you start a session or job, only the basic system commands are available by default. If you need access to specific compilers, tools, or applications, you can use the module command to load them. This temporarily updates your environment, making everything in the selected package available for the duration of your session or job. You can even load multiple modules at once if needed.

The best feature of modules is that when you switch to different versions of applications, you need only to change the module command in your script, all the other commands remain unchanged. This makes switching to different versions very easy and you can do it on a per job basis.

Finding what applications are installed

Most of the software on Imperial's HPC clusters is installed using the EasyBuild software installation system. When you first log in, you will have the tools/prod module loaded; this module is used to make our "production" applications accessible to your module commands. You can see this with the module list command:

[user@login ~]$

Currently Loaded Modules:
  1) tools/prod

You can use the module avail command to see what compilers, applications and tools are available for you to use. For example:

[user@login ~]$ module avail
----------------------------------------- /sw-eb/modules/all ------------------------------------
   ABINIT/9.6.2-foss-2022a
   ABINIT/9.6.2-intel-2022a
   ABINIT/9.10.3-intel-2022a
   ABINIT/10.2.5-intel-2023a                         (D)
   AFNI/24.0.02-foss-2023a
   ANTs/2.3.5-foss-2021a
   ATK/2.36.0-GCCcore-10.3.0
   ATK/2.38.0-GCCcore-11.3.0
   ATK/2.38.0-GCCcore-12.2.0
   ATK/2.38.0-GCCcore-12.3.0
   ATK/2.38.0-GCCcore-13.2.0                         (D)
   AUGUSTUS/3.5.0-foss-2023a
   Abseil/20230125.2-GCCcore-12.2.0
   Abseil/20230125.3-GCCcore-12.3.0
   Abseil/20240116.1-GCCcore-13.2.0
   Abseil/20240722.0-GCCcore-13.3.0                  (D)
   Advisor/2023.2.0
   AlphaFold/2.3.1-foss-2022a-CUDA-11.8.0
   AlphaPulldown/2.0.0b4-foss-2022a-CUDA-11.8.0
   Archive-Zip/1.68-GCCcore-13.2.0
   Archive-Zip/1.68-GCCcore-13.3.0                   (D)
   Armadillo/11.4.3-foss-2022b
   Armadillo/12.6.2-foss-2023a
   Armadillo/12.8.0-foss-2023b
   Armadillo/14.0.3-foss-2024a                       (D)
   Arrow/6.0.0-foss-2021b
--More--

You can view the versions of a single application by running either module avail <name>; note that the module avail command is case-insensitive. For example:

[user@login ~]$ module avail GROMACS

----------------------------------------- /sw-eb/modules/all ------------------------------------
   GROMACS/2021.3-foss-2021a-CUDA-11.3.1     GROMACS/2023.1-foss-2022a-CUDA-11.7.0
   GROMACS/2021.3-foss-2021a-PLUMED-2.7.2    GROMACS/2023.1-foss-2022a
   GROMACS/2021.3-foss-2021a                 GROMACS/2023.3-foss-2023a
   GROMACS/2021.5-foss-2021b-PLUMED-2.8.0    GROMACS/2024.1-foss-2023b             (D)
   GROMACS/2021.5-foss-2021b

  Where:
   D:  Default Module

Loading modules

Modules are loaded into your environment using the module load command; note that the module load command is case-sensitive.

If you load a module for an application into your environment without specifying the version you will load the default version (marked with a (D) as above). The default version of a module will normally be the latest version we have installed unless we have set a particular version to be the default. We generally recommend that you use the latest installed version of an module unless there are specific reasons not to do so. For example:

[user@login ~]$ module load GROMACS
[user@login ~]$ module list

Currently Loaded Modules:
  1) tools/prod                        22) FFTW.MPI/3.3.10-gompi-2023b
  2) GCCcore/13.2.0                    23) ScaLAPACK/2.2.0-gompi-2023b-fb
  3) zlib/1.2.13-GCCcore-13.2.0        24) foss/2023b
  4) binutils/2.40-GCCcore-13.2.0      25) bzip2/1.0.8-GCCcore-13.2.0
  5) GCC/13.2.0                        26) ncurses/6.4-GCCcore-13.2.0
  6) numactl/2.0.16-GCCcore-13.2.0     27) libreadline/8.2-GCCcore-13.2.0
  7) XZ/5.4.4-GCCcore-13.2.0           28) Tcl/8.6.13-GCCcore-13.2.0
  8) libxml2/2.11.5-GCCcore-13.2.0     29) SQLite/3.43.1-GCCcore-13.2.0
  9) libpciaccess/0.17-GCCcore-13.2.0  30) libffi/3.4.4-GCCcore-13.2.0
 10) hwloc/2.9.2-GCCcore-13.2.0        31) Python/3.11.5-GCCcore-13.2.0
 11) OpenSSL/1.1                       32) gfbf/2023b
 12) libevent/2.1.12-GCCcore-13.2.0    33) cffi/1.15.1-GCCcore-13.2.0
 13) UCX/1.15.0-GCCcore-13.2.0         34) cryptography/41.0.5-GCCcore-13.2.0
 14) libfabric/1.19.0-GCCcore-13.2.0   35) virtualenv/20.24.6-GCCcore-13.2.0
 15) PMIx/4.2.6-GCCcore-13.2.0         36) Python-bundle-PyPI/2023.10-GCCcore-13.2.0
 16) UCC/1.2.0-GCCcore-13.2.0          37) pybind11/2.11.1-GCCcore-13.2.0
 17) OpenMPI/4.1.6-GCC-13.2.0          38) SciPy-bundle/2023.11-gfbf-2023b
 18) OpenBLAS/0.3.24-GCC-13.2.0        39) networkx/3.2.1-gfbf-2023b
 19) FlexiBLAS/3.3.1-GCC-13.2.0        40) mpi4py/3.1.5-gompi-2023b
 20) FFTW/3.3.10-GCC-13.2.0            41) GROMACS/2024.1-foss-2023b
 21) gompi/2023b

When you load a single module on our HPC system, you will often find many other modules are automatically loaded. These modules will be "dependencies" of the module that you loaded and will have been automatically defined by EasyBuild software.

Modules are required at compile and run time so must be present in your qsub file when you submit a job.

Loading a specific version of an application

In the above example, the default version of the GROMACS application at the time the command was run was 2024.1-foss-2023b and this is what was loaded.

A specific version of an application can be loaded by specifying the application name and version when running the module load command:

[user@login ~]$ module load GROMACS/2023.1-foss-2022a-CUDA-11.7.0

Unloading and purging modules

You can purge all the loaded modules from your environment by running the module purge command:

[user@login ~]$ module purge
[user@login ~]$ module list
No modules loaded

You may wish to do this if you've accidentally loaded the wrong modules. To load the production modules into your environment again, you can use the module load command:

[user@login ~]$ module load tools/prod
[user@login ~]$ module list

Currently Loaded Modules:
  1) tools/prod

Summary of module commands

Module Command Description
module list Lists all modules that are currently loaded in your environment.
module load <name> Loads the module called <name> (case-sensitive).
module avail Report the names and versions of all the applications that can be loaded.
module avail <name> Reports all the versions of an application that matches the name <name> (case-insensitive).
module help <name> Gives information about the module called <name>, similar to man <name>.
module purge Unloads any loaded modules. We strongly recommend you place this in your submission script before loading any new modules.
module show <name> Displays will list the full path of the modulefile and the environment changes the modulefile will make if loaded.