Skip to content

Using the Module System

LMOD is very useful software system that is used on HPC clusters to manage several different software stacks and user environments. This allow users to switch between software stacks and packages on the cluster.

Get a List of ALL Software

The spider subcommand is a great search tool to find out if the software package has been installed as a system package. From the command line, run a spider command to output a list of the available software for the entire system:
module spider

Ex: module spider

Running the module spider command on Medicinebow and possible output:
[arccuser1@mblog1 ~]$ module spider  
----------------------------------------------------------------------------  
The following is a list of the modules and extensions currently available:  
----------------------------------------------------------------------------   
adios2: adios2/2.9.2-ompi  
af3cli: af3cli/0.4.2  
alphafold: alphafold/2.3.2  
alphafold3: alphafold3/3.0.0  
ansys: ansys/2024R2  
apptainer: apptainer/default, apptainer/1.3.5, apptainer/1.4.1  
arcc: arcc/1.0 ARCC added tools to the cluster       
aspera-cli: aspera-cli/3.7.7  
assimp: assimp/5.3.1  
astral: astral/5.7.8   
atk: atk/2.38.0  
autoconf: autoconf/2.69_x86_64, autoconf/2.69_zen4   
automake: automake/1.16.5_x86_64, automake/1.16.5_zen4  
bam-readcount: bam-readcount/0.8.0  
bcftools: bcftools/1.20   
beagle-lib: beagle-lib/4.0.0      
beast1: beast1/1.10.4   
beast2: beast2/2.7.7  
bedops: bedops/2.4.41   
berkeley-db: berkeley-db/18.1.40_x86_64, berkeley-db/18.1.40_zen4  
binutils: binutils/2.41  
bison: bison/3.8.2  
blast: blast/2.16.0  
boost: boost/1.82.0__filesystem_True, boost/1.83.0__filesystem_False, ...  
bowtie2: bowtie2/2.5.4   
bwa: bwa/0.7.17   
cairo: cairo/1.16.0  
cgal: cgal/5.5.2   
cmake: cmake/3.27.7  
cuda-toolkit: cuda-toolkit/11.7.1, cuda-toolkit/12.4.1, ...  
curl: curl/8.4.0__libidn2_False, curl/8.4.0__libidn2_True  
cutadapt: cutadapt/4.1  
diffutils: diffutils/3.9_x86_64, diffutils/3.9_zen4  
dorado: dorado/0.8.2  
eigen: eigen/3.4.0  
elfutils: elfutils/0.189  
elpa: elpa/2023.05.001-ompi  
expat: expat/2.5.0  
fastp: fastp/0.23.4  
fastqc: fastqc/0.12.1    
fftw: fftw/3.3.10-ompi, fftw/3.3.10   
flex: flex/2.6.3, flex/2.6.4   
font-util: font-util/1.4.0   
freetype: freetype/2.11.1   
fribidi: fribidi/1.0.12   
g2c: g2c/1.7.0   
gaussian: gaussian/16.AVX2.b01   
gcc: gcc/11.4.0, gcc/13.2.0, gcc/14.2.0   
gcloud: gcloud/521.0.0   
gdal: gdal/3.7.3   
gdbm: gdbm/1.23_x86_64, gdbm/1.23_zen4   
gdk-pixbuf: gdk-pixbuf/2.42.10   
geos: geos/3.12.0   
gettext: gettext/0.22.3_x86_64, gettext/0.22.3_zen4   
giflib: giflib/5.2.1   
git: git/2.42.0   
git-lfs: git-lfs/3.3.0   
glib: glib/2.78.0   
glproto: glproto/1.4.17   
gmake: gmake/4.4.1_x86_64, gmake/4.4.1_zen4   
gmp: gmp/6.2.1_x86_64, gmp/6.2.1_zen4   
gnupg: gnupg/2.4.3   
go: go/1.21.3   
go-bootstrap: go-bootstrap/1.17.13   
go-md2man: go-md2man/2.0.2   
gobject-introspection: gobject-introspection/1.76.1   
graphite2: graphite2/1.3.14   
gsl: gsl/2.7.1   
gsutil: gsutil/491.0.0   
guppy-gpu: guppy-gpu/6.5.7   
harfbuzz: harfbuzz/7.3.0   
hdf5: hdf5/1.10.11__hl_True__fortran_False-ompi, ...    
help2man: help2man/1.49.3   
hisat-genotype: hisat-genotype/1.3.3   
hisat2: hisat2/2.2.1   
htslib: htslib/1.20   
hypre: hypre/2.29.0-ompi   
icu4c: icu4c/67.1   
idl: idl/9.0   
interproscan: interproscan/5.63-95.0   
intltool: intltool/0.51.0   
iq-tree: iq-tree/2.3.6   
jasper: jasper/1.900.1, jasper/3.0.3   
json-glib: json-glib/1.6.6   
julia: julia/1.10.3, julia/1.11.6   
kbproto: kbproto/1.0.7   
kentutils: kentutils/1.04.0   
keyutils: keyutils/1.6.1   
krb5: krb5/1.20.1   
lcms: lcms/2.13.1   
libbsd: libbsd/0.11.7   
libffi: libffi/3.4.4, libffi/3.4.6   
libfontenc: libfontenc/1.1.7   
libgcrypt: libgcrypt/1.10.2   
libgd: libgd/2.3.3   
libgeotiff: libgeotiff/1.7.1   
libgit2: libgit2/1.7.0   
libiconv: libiconv/1.17_x86_64, libiconv/1.17_zen4   
libidn2: libidn2/2.3.4   
libjpeg-turbo: libjpeg-turbo/3.0.0     
libpng: libpng/1.6.39.  
libsigsegv: libsigsegv/2.14_x86_64, libsigsegv/2.14_zen4   
libslirp: libslirp/4.7.0   
libtiff: libtiff/4.5.1   
libtool: libtool/2.4.7_x86_64, libtool/2.4.7_zen4   
libunistring: libunistring/1.1   
libunwind: libunwind/1.6.2   
libx11: libx11/1.8.4   
libxau: libxau/1.0.8   
libxcb: libxcb/1.14   
libxcrypt: libxcrypt/4.4.35   
libxdmcp: libxdmcp/1.1.4   
libxext: libxext/1.3.3   
libxfixes: libxfixes/5.0.2   
libxfont: libxfont/1.5.4   
libxft: libxft/2.3.2   
libxi: libxi/1.7.6   
libxkbcommon: libxkbcommon/1.5.0   
libxkbfile: libxkbfile/1.0.9   
libxml2: libxml2/2.10.3_x86_64, libxml2/2.10.3_zen4   
libxmu: libxmu/1.1.4   
libxpm: libxpm/3.5.12   
libxrandr: libxrandr/1.5.3   
libxrender: libxrender/0.9.10     
libxscrnsaver: libxscrnsaver/1.2.2   
libxt: libxt/1.1.5   
libxtst: libxtst/1.2.2   
lizard: lizard/1.0   
lzo: lzo/2.10   
m4: m4/1.4.19_x86_64, m4/1.4.19_zen4   
mafft: mafft/7.526   
matlab: matlab/2025b   
mgard: mgard/2023-03-31   
miniconda3: miniconda3/24.3.0   
mpc: mpc/1.3.1_x86_64, mpc/1.3.1_zen4   
mpfr: mpfr/4.2.0_x86_64, mpfr/4.2.0_zen4   
multiqc: multiqc/1.24.1   
muscle: muscle/5.2   
ncurses: ncurses/6.4_x86_64, ncurses/6.4_zen4   
nextflow: nextflow/23.10.0, nextflow/23.10.1   
ninja: ninja/1.11.1   
npth: npth/1.6   
nvhpc: nvhpc/24.3, nvhpc/25.7   
nvhpc-byo-compiler: nvhpc-byo-compiler/24.3, nvhpc-byo-compiler/25.7   
nvhpc-hpcx: nvhpc-hpcx/24.3, nvhpc-hpcx/25.7   
nvhpc-hpcx-2.20-cuda12: nvhpc-hpcx-2.20-cuda12/25.7   
nvhpc-hpcx-cuda12: nvhpc-hpcx-cuda12/24.3, nvhpc-hpcx-cuda12/25.7   
nvhpc-nompi: nvhpc-nompi/24.3, nvhpc-nompi/25.7   
nvhpc-openmpi3: nvhpc-openmpi3/24.3   
nvhpc-sdk: nvhpc-sdk/24.3, nvhpc-sdk/25.7   
oneapi: oneapi/2024.1.0, oneapi/2024.2.1   
openblas: openblas/0.3.24   
pango: pango/1.50.13   
parallel-netcdf: parallel-netcdf/1.12.3-ompi   
paraview: paraview/5.12.0   
parmetis: parmetis/4.0.3-ompi   
pcre: pcre/8.45   
pcre2: pcre2/10.42   
perl: perl/5.38.0_x86_64, perl/5.38.0_zen4   
perl-clone: perl-clone/0.46   
perl-data-dumper: perl-data-dumper/2.173     
perl-encode-locale: perl-encode-locale/1.05   
perl-extutils-config: perl-extutils-config/0.008   
perl-file-listing: perl-file-listing/6.04   
perl-html-parser: perl-html-parser/3.72   
perl-http-message: perl-http-message/6.44    
perl-http-negotiate: perl-http-negotiate/6.01     
perl-io-html: perl-io-html/1.004     
perl-libwww-perl: perl-libwww-perl/6.68     
perl-lwp-mediatypes: perl-lwp-mediatypes/6.02     
perl-module-build: perl-module-build/0.4232     
perl-net-http: perl-net-http/6.22     
perl-uri: perl-uri/5.08     
perl-www-robotrules: perl-www-robotrules/6.02   
perl-xml-parser: perl-xml-parser/2.46   
petsc: petsc/3.20.1-ompi   
picard: picard/3.2.0   
pigz: pigz/2.7_x86_64, pigz/2.7_zen4   
pinentry: pinentry/1.2.1   
pixman: pixman/0.42.2   
pkgconf: pkgconf/1.9.5_x86_64, pkgconf/1.9.5_zen4   
podman: podman/4.5.1    
proj: proj/9.2.1   
protobuf: protobuf/3.21.12   
py-cython: py-cython/0.29.36, py-cython/3.0.4   
py-mako: py-mako/1.2.4   
py-markupsafe: py-markupsafe/2.1.3   
py-mpi4py: py-mpi4py/3.1.4-ompi   
py-numpy: py-numpy/1.26.1   
py-packaging: py-packaging/23.1   
py-pip: py-pip/23.1.2   
py-pyproject-metadata: py-pyproject-metadata/0.7.1   
py-setuptools: py-setuptools/68.0.0   
py-tomli: py-tomli/2.0.1   
pycharm: pycharm/2024.2.4   
python: python/3.10.6, python/3.12.0   
python2: python2/2.7.18   
qiime2-amplicon: qiime2-amplicon/2024.5   
qiime2-metagenome: qiime2-metagenome/2024.5   
qperf: qperf/0.4.11   
qt: qt/5.15.11   
r: r/4.4.0   
r-class: r-class/7.3-21   
r-classint: r-classint/0.4-9   
r-dbi: r-dbi/1.1.3    
r-e1071: r-e1071/1.7-13   
r-kernsmooth: r-kernsmooth/2.23-20   
r-magrittr: r-magrittr/2.0.3   
r-mass: r-mass/7.3-59   
r-proxy: r-proxy/0.4-27   
r-rcpp: r-rcpp/1.0.10   
r-s2: r-s2/1.1.2   
r-units: r-units/0.8-1        
r-wk: r-wk/0.7.2   
randrproto: randrproto/1.5.0   
rclone: rclone/1.63.1   
rdma-core: rdma-core/41.0     
re2c: re2c/2.2   
readline: readline/8.2_x86_64, readline/8.2_zen4    
recordproto: recordproto/1.14.2   
regtools: regtools/1.0.0   
renderproto: renderproto/0.11.1     
rseqc: rseqc/5.0.3   
rstudio: rstudio/2024.04.1, rstudio/2024.04.2   
ruby: ruby/3.1.0   
rust: rust/1.75.0   
rust-bootstrap: rust-bootstrap/1.75.0   
samtools: samtools/1.20   
shared-mime-info: shared-mime-info/1.10   
silver-searcher: silver-searcher/2.2.0   
singularity: singularity/4.1.0   
slirp4netns: slirp4netns/1.2.0   
slurm: slurm/latest   
snappy: snappy/1.1.10   
sonnet: sonnet/19.52.2025    
spades: spades/4.0.0   
sqlite: sqlite/3.43.2   
sratoolkit: sratoolkit/3.1.1   
stress-ng: stress-ng/0.17.08   
superlu-dist: superlu-dist/8.1.2-ompi    
swig: swig/4.1.1   
tcl: tcl/8.6.12   
texinfo: texinfo/7.0.3_x86_64, texinfo/7.0.3_zen4   
trimmomatic: trimmomatic/0.39   
udunits: udunits/2.2.28   
vcftools: vcftools/0.1.17   
visual-studio-code: visual-studio-code/1.94.2   
voropp: voropp/0.4.6   
vsearch: vsearch/2.22.1   
wannier90: wannier90/3.1.0-ompi, wannier90/3.1.0   
xcb-proto: xcb-proto/1.15.2   
xcb-util: xcb-util/0.4.1   
xextproto: xextproto/7.3.0   
xproto: xproto/7.0.31   
yaml-cpp: yaml-cpp/0.7.0   
zfp: zfp/0.5.5   
zlib: zlib/1.3   
zlib-ng: zlib-ng/2.1.4_x86_64, zlib-ng/2.1.4_zen4   
zoltan: zoltan/3.901-ompi   
zstd: zstd/1.5.5_x86_64__programs_False, zstd/1.5     
5_x86_64__programs_True, ...     
----------------------------------------------------------------------------   
To learn more about a package execute:   
$ module spider Foo   
where "Foo" is the name of a module.   
To find detailed information about a particular package you   
must specify the version if there is more than one version:   
$ module spider Foo/11.1   
----------------------------------------------------------------------------   

If you expended the section, you may notice the list of possible modules available on Medicinebow is very long and there are probably a large number of them that you're not concerned with. If you're wondering how to search for a specific package by name, continue to the next section.

Search for a Specific Module

To search for specific packages and/or versions, you can supply the names/arguments to the command:
module spider samtools

Ex: module spider miniconda3

Running the module spider miniconda3 command on Medicinebow and possible output:
[arccuser1@mblog1 ~]$ module spider miniconda3    

----------------------------------------------------------------------------   
miniconda3: miniconda3/24.3.0    
----------------------------------------------------------------------------      
You will need to load all module(s) on any one of the lines below before the "miniconda3/24.3.0" module is available to load.       

  arcc/1.0       

Help:       
  The minimalist bootstrap toolset for conda and Python3.        

If there is only one version, the output will contain information regarding which compilers are required to be loaded before the package can be loaded as well as provide a brief segment on the help of the module. If there are multiple versions available, the output contains which versions are available and instructions to get more information on the individual version.

Find out how to load a Specific Version of a Module

To get information regarding a specific version of the package, include the version as part of the argument in the command: module spider samtools/1.6

For example, when specifying all apps you want to load the general process is:
1. Find versions
2. Find a version’s dependencies.
3. Check what is already loaded and what is missing.
4. Load required (missing) dependencies.
5. Load application

There are opportunities to use regular expressions to search for modules. See output from module help command described below for more information.

Get a list of all available LMOD commands

To get a full list of all available LMOD commands, use a module --help

Ex: module --help

Running the module --help command on Medicinebow and possible output:
[arccuser1@mblog1 ~]$ module --help  
Usage: module [options] sub-command [args ...]      

Options:  
-h -? -H --help                   This help message     
-s availStyle --style=availStyle  Site controlled avail style: grouped  
                                    (default: grouped)   
--regression_testing              Lmod regression testing   
-D                                Program tracing written to stderr   
--debug=dbglvl                    Program tracing written to stderr (where
                                    dbglvl is a number 1,2,3)   
--pin_versions=pinVersions        When doing a restore use specified   
                                    version, do not follow defaults   
-d --default                      List default modules only when used with
                                    avail   
-q --quiet                        Do not print out warnings  
--expert                          Expert mode   
-t --terse                        Write out in machine readable format for  
                                    commands: list, avail, spider, savelist  
--initial_load                    loading Lmod for first time in a user   
                                    shell    
--latest                          Load latest (ignore default)  
--ignore_cache                    Treat the cache file(s) as out-of-date  
--novice                          Turn off expert and quiet flag  
--raw                             Print modulefile in raw output when used 
                                    with show  
-w twidth --width=twidth          Use this as max term width 
-v --version                      Print version info and quit 
-r --regexp                       use regular expression match 
--gitversion                      Dump git version in a machine readable 
                                    way and quit 
--dumpversion                     Dump version in a machine readable way 
                                    and quit 
--check_syntax --checkSyntax      Checking module command syntax: do not 
                                    load 
--config                          Report Lmod Configuration 
--config_json                     Report Lmod Configuration in json format
--mt                              Report Module Table State 
--timer                           report run times 
--force                           force removal of a sticky module or save 
                                    an empty collection 
--redirect                        Send the output of list, avail, spider
                                    to stdout (not stderr)  
--no_redirect                     Force output of list, avail and spider
                                    to stderr  
--show_hidden                     Avail and spider will report hidden
                                    modules  
--spider_timeout=timeout          a timeout for spider  
-T --trace                           
--nx --no_extensions               
--loc --location                  Just print the file location when using
                                    show  


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)  
try-load | try-add  module [...]  Add module(s), do not complain if not
                                    found 
del | unload        module [...]  Remove module(s), do not complain if not
                                    found 
swap | sw | switch  m1 m2         unload m1 and load m2 
purge                             unload all modules 
refresh                           reload aliases from current list of
                                    modules. 
update                            reload all currently loaded modules. 

Listing / Searching sub-commands: 
--------------------------------- 
list                              List loaded modules 
list                s1 s2 ...     List loaded modules that match the
                                    pattern 
avail | av                        List available modules 
avail | av          string        List available modules that contain
                                    "string". 
overview | ov                     List all available modules by short
                                    names with number of versions 
overview | ov       string        List available modules by short names
                                    with number of versions that contain
                                    "string" 
spider                            List all possible modules 
spider              module        List all possible version of that module
                                    file 
spider              string        List all module that contain the
                                    "string". 
spider              name/version  Detailed information about that version
                                    of the module. 
whatis              module        Print whatis information about module 
keyword | key       string        Search all name and whatis that contain
                                    "string". 

Searching with Lmod: 
-------------------- 
All searching (spider, list, avail, keyword) support regular expressions: 


-r spider           '^p'          Finds all the modules that start with 
                                    `p' or `P'  
-r spider           mpi           Finds all modules that have "mpi" in 
                                    their name.    
-r spider           'mpi$         Finds all modules that end with "mpi" in
                                    their name.     

Handling a collection of modules:      
--------------------------------          
save | s                          Save the current list of modules to a
                                    user defined "default" collection.      
save | s            name          Save the current list of modules to
                                    "name" collection.        
reset                             The same as "restore system"   
restore | r                       Restore modules from the user's.     
                                    "default" or system default.      
restore | r         name          Restore modules from "name" collection.      
restore             system        Restore module state to system defaults.      
savelist                          List of saved collections.      
describe | mcc      name          Describe the contents of a module
                                    collection.      
disable             name          Disable (i.e. remove) a collection.      

Miscellaneous sub-commands:         
---------------------------        
is-loaded           modulefile    return a true status if module is loaded.   
is-avail            modulefile    return a true status if module can be 
                                    loaded.   
show                modulefile    show the commands in the module file.   
use [-a]            path          Prepend or Append path to MODULEPATH.    
unuse               path          remove path from MODULEPATH.   
tablelist                         output list of active modules as a lua
                                    table.      

Important Environment Variables:       
--------------------------------      
LMOD_COLORIZE                     If defined to be "YES" then Lmod prints  
                                    properties and warning in color.     

    --------------------------------------------------------------------------    

Lmod Web Sites         

Documentation:    http://lmod.readthedocs.org      
GitHub:           https://github.com/TACC/Lmod     
SourceForge:      https://lmod.sf.net   
TACC Homepage:    https://www.tacc.utexas.edu/research-development/tacc-projects/lmod   

To report a bug please read http://lmod.readthedocs.io/en/latest/075_bug_reporting.html    
    --------------------------------------------------------------------------    



Modules based on Lua: Version 8.7  2022-04-16 13:49 -05:00   
    by Robert McLay mclay@tacc.utexas.edu.   

What modules are available

Module avail

Additionally, using the avail subcommand will show a table of available modules that are capable of being loaded into the current environment.

$ module avail

Loading and Unloading Modules

$ module load intel

To remove the software from the environment, using the unload subcommand will remove the module from the environment. If the module specified isn't loaded, this becomes a no-op (no operation).

$ module unload intel 

It is important to note that when loading modules that are dependent on a compiler and the compiler module is unloaded, Lmod will deactivate the dependent modules until the correct compiler is loaded or that an appropriate compiler is loaded that has alternative versions of the software available.

Module Collections

Module collections are a great method to keep certain software stacks in order and switch between them regularly and quickly. They allow for all modules to be loaded, then saved, and recalled later for use.

To save a module collection:

$ module save
By default, this is will save the loaded modules as the default collection. You can optionally supply a name to the command to give a custom name and have many collections available:

$ module save NAME 

Swapping between collections requires the restore subcommand is used. Without any additional arguments, the module system will load your default collection. If there is no default collection defined, the system default collection will be loaded. Use a NAME as an argument to load a specific collection.

$ module restore 
$ module restore NAME 
A special condition to load the system defined collection is done with the reset subcommand allowing a fresh start of configured modules. Note, this doesn't take into account what is inserted into shell startup files (i.e., .bashrc, .cshrc, etc.)

$ module reset 
or optionally:

$ module restore system
To query the system and determine which module collections have been created, use the savelist subcommand.

$ module savelist 
It's important to use names that are memorable, but that doesn't necessarily describe all the contents of the collection. To list which modules are part of the collection, use the describe subcommand with an optional argument to list contents of a certain NAME collection.

$ module describe 
$ module describe NAME 

To disable a module collection that is no longer needed, use the disable subcommand.

$ module disable NAME 

Automatically Loading Modules

Some core modules are automatically loaded when logging in. On MedicineBow and GannettPeak, these automatically-loaded modules do not include a compiler module such as gcc or intel that start the hierarchy for the organization of other modules, since for different users, different choices of default compiler would make sense. However, a user can customize the automatically-loaded modules by adding module load commands to the .bashrc file in their home directory.

Examples

To automatically load one of the compilers when logging in, append the following lines to your .bashrc file:

For gcc

module load gcc/<version>

Module shorthand with ml

Lmod provides a shorthand interface to the modules command as ml. The command is quite powerful and allows quick access to the modules system. The default action of ml is to list the loaded modules. Providing a module as an argument will load the module.

$ ml rclone
Modules can quickly be unloaded as well by supplying a nearly identical command, but with the - operator before the argument:

 $ ml -rclone
Querying the system of available modules is easy:

$ ml av 
$ ml spider

The ml command is very useful and should be explored.