Modules
GNU Modules
Many large institutions use the concept of Modules to load software into user environments. They provide a way to add and remove environmental variables that provide access to UMIACS' large set of software that we offer on our Red Hat Enterprise Linux (RedHat) and Ubuntu platforms. They work by customizing your shell environment which is done automatically for the two major shell families (bash/sh (default shell) and tcsh/csh). If you use an alternate shell, please look to source the appropriate script for your shell in /usr/share/Modules/init.
Initially your module environment is empty, though included in your module path are local operating system specific modules, locally built software modules, and binary software modules (Matlab, Intel Compiler, etc.).
Available Software
To see if a piece of software is available, use the module avail command. This can be given a trailing prefix on the command line to search a subset of the available software.
[username@nexusstaff00 ~]$ module avail cuda --------------------------- /opt/common/.modulefiles --------------------------- cuda/3.2.16 cuda/6.5.14 cuda/9.0.176 cuda/11.0.3 cuda/11.8.0 cuda/4.2.9 cuda/7.0.28 cuda/9.1.85 cuda/11.1.1 cuda/12.0.1 cuda/5.0.35 cuda/7.5.18 cuda/9.2.148 cuda/11.2.2 cuda/12.1.1 cuda/5.5.11 cuda/8.0.27rc2 cuda/10.0.130 cuda/11.3.1 cuda/5.5.22 cuda/8.0.44 cuda/10.1.243 cuda/11.4.4 cuda/6.0.37 cuda/8.0.61 cuda/10.2.89 cuda/11.7.0
[username@nexusstaff00 ~]$ module avail Python3 ------------------------- /opt/local/stow/.modulefiles ------------------------- Python3/3.5.2 Python3/3.8.2 Python3/3.8.15 Python3/3.9.16 Python3/3.6.15 Python3/3.8.10 Python3/3.9.5 Python3/3.10.4 Python3/3.7.13 Python3/3.8.12 Python3/3.9.6 Python3/3.10.10 Python3/3.7.16 Python3/3.8.13 Python3/3.9.12 Python3/3.11.2
There may be a (default) module otherwise the most recent version of software is loaded when specified.
Adding Modules into your Environment
You can simply add a module into your environment by using the module add <module> command.
[username@nexusstaff00 ~]$ module add cuda
You can also specify a specific version of the software when we have multiple ones available.
[username@nexusstaff00 ~]$ module add Python3/3.11.2
Listing Modules
You can list the currently loaded modules in your environment by using the list command.
[username@nexusstaff00 ~]$ module list Currently Loaded Modulefiles: 1) cuda/10.2.89(default) 2) Python3/3.11.2
Showing a Module
You can show what the module is going to add to your environment (and the dependencies that will be added) with the show command.
[username@nexusstaff00 ~]$ module show cuda ------------------------------------------------------------------- /opt/common/.modulefiles/cuda/10.2.89: conflict cuda/10.1.243 cuda/10.0.130 cuda/9.2.148 cuda/9.1.85 cuda/9.0.176 cuda/8.0.61 cuda/8.0.44 cuda/8.0.27rc2 cuda/7.5.18 cuda/7.0.28 cuda/6.5.14 cuda/6.0.37 cuda/5.5.22 cuda/5.5.11 cuda/5.0.35 cuda/4.2.9 cuda/3.2.16 prepend-path PATH /opt/common/cuda/cuda-10.2.89/bin prepend-path LD_LIBRARY_PATH /opt/common/cuda/cuda-10.2.89/lib64 prepend-path LD_RUN_PATH /usr/lib64/nvidia:/usr/lib/nvidia:/opt/common/cuda/cuda-10.2.89/lib64:/opt/common/cuda/cuda-10.2.89/lib prepend-path LIBRARY_PATH /usr/lib64/nvidia:/usr/lib/nvidia:/opt/common/cuda/cuda-10.2.89/lib64:/opt/common/cuda/cuda-10.2.89/lib prepend-path CPATH /opt/common/cuda/cuda-10.2.89/include prepend-path PKG_CONFIG_PATH /opt/common/cuda/cuda-10.2.89/pkgconfig setenv CUDA_HOME /opt/common/cuda/cuda-10.2.89 -------------------------------------------------------------------
Removing Modules in your Environment
If you want to remove a module because it conflicts or you want to clean up your environment you can by using the module rm <module> command.
Using Modules in Scripts
To use modules within a shell script or interpreted language you will need to load a file from /usr/share/Modules/init into your program.
Bash
. /usr/share/Modules/init/bash module add gcc
Tcsh
source /usr/share/Modules/init/tcsh module add gcc
Modules in Non-Interactive Shell Sessions
In non-interactive shell sessions (non-login shells), the Modules configuration environment will not automatically load. This will also occur if the OS version of the compute node you are scheduled on is different from the OS version of the submission node you are submitting the job from.
If you will need the use of Modules in non-interactive SLURM jobs, cross-OS jobs, or other similar sessions, you will need to include the following in your shell init scripts:
Bash
. /usr/share/Modules/init/bash . /etc/profile.d/ummodules.sh
Tcsh
source /usr/share/Modules/init/tcsh source /etc/profile.d/ummodules.csh
Additional Help
You can type module with no arguments for a full list of commands or man module for further information.