The Module System and What is Available
Goal: Introduce the LMOD Module System and the concept of dependencies.
- 1 What Have We Seen
- 2 LMOD: An Environment Module System
- 3 What do we have available?
- 4 What’s available: Using the Module System
- 5 Change Compiler
- 6 Purge Your Modules
- 7 Looking for Modules: module spider
- 8 Module load/spider: Dependencies
- 9 OpenMPI Tree: What Do You Notice?
- 10 What’s different between these command-lines?
- 11 More module commands
What Have We Seen
Although on the login nodes we do have a gcc
compiler and the Python language this only caters for a minority of users.
We can see that R is not available, nor most of the applications that researchers will require.
There are:
10s of compilers and languages
100s of applications and utilities.
1000s of underlying libraries and commands.
We can not provide a system that provides everything all at once.
What we need is a method to enable users to find and select that they specifically need, and a method to allow them to configure and setup their sessions/environment to allow them to perform their analysis and research.
LMOD: An Environment Module System
ARCC: Lmod – Software
What do we have available?
Compilers and eco systems: GNU family, Intel’s oneAPI, Nvidia’s hpc-sdk
Languages: C/C+, Fortran, Go, Java, Julia, Perl, Python, R, Ruby, Rust
Scientific libraries and toolkits: Built with a specific compiler: GNU by default
Standalone applications and utilities: Installed using:
Conda environments.
Containers: running Singularity (not Docker).
We can create a Singularity image from a Docker image.
Linux based Binaries/Executables
Check the MedicineBow Software Page.
What is Available?
ARCC provides a small set of core compilers , languages, libraries and application, which will be updated on a semi regular basis. When updated, we try and use the latest versions, and typically will not be support older versions.
The GNU family of compilers (i.e. gcc) is are primary focus, but we do provide Intel’s oneAPI suite of compilers/libraries as well as NVidia’s hpc-sdk toolset.
Please refer to the MedicineBow Software List for what is available and/or use the
module spider
command to search.ARCC will consider adding to this on a case-by-case basis.
What’s available: Using the Module System
Use module list
to view the modules you are currently loaded in your session:
# Modules currently loaded.
[]$ module list
Currently Loaded Modules:
1) slurm/latest (S) 2) arcc/1.0 (S)
Use module avail
to see what modules are currently available that you can be loaded your current session:
# What's available within my 'current' environment.
# With respect to what modules I 'currently' have loaded.
[]$ module avail
...
Notice: There are various categories of available software: containers, compilers, conda environments, Linux binaries…
Modules have a name and a version: <module-name>/<module-version>
The two modules slurm/latest
and arcc/1.0
are loaded by default at the start of every session by ARCC.
These make available various commands and scripts that ALL users require (such as Slurm commands). If you purge
/unload
(see later) these you will not be able to use Slurm.
What’s available? Compiler tree
Some software has to be built with respect to a compiler.
By default we build using the GNU family of compilers for C/C++ and Fortran.
Some commands have shortcuts. Using ml
is the a shortcut to module list
.
[]$ module purge
[]$ module load gcc/14.2.0
[]$ ml
Currently Loaded Modules:
1) slurm/latest (S) 5) mpc/1.3.1_x86_64
2) arcc/1.0 (S) 6) zlib-ng/2.1.4_x86_64
3) gmp/6.2.1_x86_64 7) zstd/1.5.5_x86_64__programs_True
4) mpfr/4.2.0_x86_64 8) gcc/14.2.0
The gmp
, mpc
, mpfr
, zlib-ng
and zstd
are know as dependencies.
There are libraries that need to be loaded for gcc to work.
They are loaded automatically so you don’t have to.
[] module avail
Question What changed?
We can now see all the modules available that have been compiled with gcc/14.2.0
[]$ module avail
-------------- /apps/s/lmod/mf/opt/linux-rhel9-x86_64/gcc/14.2.0 ---------------
...
------------- /apps/s/lmod/mf/spack/linux-rhel9-x86_64/gcc/14.2.0 --------------
...
These are only available after the gcc/14.2.0
module has been loaded.
Change Compiler
Let’s see what happens to our environment if we load a different compiler.
[]# module load nvhpc-sdk/24.3
Lmod is automatically replacing "gcc/14.2.0" with "nvhpc-sdk/24.3".
Again, what happened?
[]$ ml
Currently Loaded Modules:
1) slurm/latest (S) 2) arcc/1.0 (S) 3) nvhpc-sdk/24.3
[]$ module avail
Only modules relating to nvhpc-sdk/24.3
are now available.
You can only have one module compiler loaded at a time.
Compilers of the same name, but different versions (gcc/13.2.0
vs gcc/14.2.0
) are considered different.
Purge Your Modules
Use the module purge
command to reset your environment to the initial defaults.
[]$ module purge
The following modules were not unloaded:
(Use "module --force purge" to unload all):
1) slurm/latest 2) arcc/1.0
Again, what has changed?
[]$ ml
[]$ module avail
We are back to having the two modules slurm/latest
and arcc/1.0
loaded (by default) and the initial set of available modules.
The more modules you have loaded, the more dependencies you will have loaded and the more likely you are to forget what you have loaded…
As mentioned earlier, do not use the --force
option to unload the slurm
and arcc
modules.
Looking for Modules: module spider
Remember:
module avail
only shows what is available to be loaded with respect to your current environment and what you currently have loaded.It does not show you everything.
If you have performed module load gcc/14.2.0
, then module avail
will only show openmpi/5.0.5
.
Calling module spider
will show you other versions with different dependencies.
[]$ module spider openmpi
----------------------------------------------------------------------------
openmpi:
----------------------------------------------------------------------------
Versions:
openmpi/4.1.6
openmpi/5.0.5
Other possible modules matches:
nvhpc-openmpi3
----------------------------------------------------------------------------
To find other possible module matches execute:
$ module -r spider '.*openmpi.*'
----------------------------------------------------------------------------
For detailed information about a specific "openmpi" package (including how to load the modules) use the module's full name.
Note that names that have a trailing (E) are extensions provided by other modules.
For example:
$ module spider openmpi/5.0.5
----------------------------------------------------------------------------
Module load/spider: Dependencies
If you module spider
a specific version it will list the dependencies that are required to first be loaded before it can be used:
[]$ module spider openmpi/5.0.5
----------------------------------------------------------------------------
openmpi: openmpi/5.0.5
----------------------------------------------------------------------------
You will need to load all module(s) on any one of the lines below before the "openmpi/5.0.5" module is available to load.
arcc/1.0 gcc/14.2.0
Help:
An open source Message Passing Interface implementation. ...
Try loading before loading gcc/14.2.0
:
[]$ module purge
[]$ module load openmpi/5.0.5
Lmod has detected the following error: These module(s) or extension(s) exist
but cannot be loaded as requested: "openmpi/5.0.5"
Try: "module spider openmpi/5.0.5" to see how to load the module(s).
Load the required dependencies, then re-try:
[]$ module load gcc/14.2.0
[]$ module load openmpi/5.0.5
[]$
Let’s check everything has been loaded successfully:
[]$ which mpicc
/apps/u/opt/gcc/14.2.0/openmpi/5.0.5/bin/mpicc
[]$ mpicc --version
gcc (Spack GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
OpenMPI Tree: What Do You Notice?
After loading openmpi/5.0.5
what do we notice about what is now loaded and available?
[]$ ml
[]$ module avail
Notice we have opened up an additional set of modules:
---- /apps/s/lmod/mf/spack/linux-rhel9-x86_64/openmpi/5.0.5-jk3nxsx/gcc/14.2.0 ----
adios2/2.9.2-ompi netcdf-cxx4/4.3.1-ompi
...
ior/3.3.0-ompi wannier90/3.1.0-ompi
netcdf-c/4.9.2-ompi
...
Due to dependencies, there can be a hierarchy of core modules that need to be loaded to make other libraries and software available.
For example, some libraries, such as fftw
, need to be built with gcc/14.2.0
and use the openmpi/5.0.5
library.
Typically their version number will be prefixed with -ompi
.
Try: []$ module spider fftw
What’s different between these command-lines?
What do we notice about the required dependencies for the following versions of Python?
[]$ module spider python/3.10.6
[]$ module spider python/3.12.0
[]$ module spider python2
What’s different between these command-lines? Dependencies
The two python/3.x
versions have both been installed using both the gcc/13.2.0
and gcc/14.2.0
compilers.
You need to choose which gcc
compiler version first before we can use them.
[]$ module spider python/3.10.6
[]$ module spider python/3.12.0
...
You will need to load all module(s) on any one of the lines below before the "python/3.12.0" module is available to load.
arcc/1.0 gcc/13.2.0
arcc/1.0 gcc/14.2.0
...
Even though python/3.10.6
has been built with different compilers, it is still running Python Version 3.10.6. Your related scripts should run with either variant. This is same with python/3.12.0
.
We recommend using the variant built with the latest compiler.
The python/2
module has no dependencies, can can be loaded straight away:
[]$ module spider python2
----------------------------------------------------------------------------
python2: python2/2.7.18
----------------------------------------------------------------------------
You will need to load all module(s) on any one of the lines below before the "python2/2.7.18" module is available to load.
arcc/1.0
More module commands
The module
command has lots more sub-commands:
[]$ module
Modules based on Lua: Version 8.7 2022-04-16 13:49 -05:00
by Robert McLay mclay@tacc.utexas.edu
module [options] sub-command [args ...]
Help sub-commands:
------------------
help prints this message
help module [...] print help message from module(s)
Loading/Unloading sub-commands:
-------------------------------
load | add module [...] load module(s)
...
Prev | Workshop Home | Next |