Module System
A large number of popular software packages are installed on Palmetto and can be used without any setup or configuration. These include:
- Compilers (such as
gcc
, Intel) - Libraries (such as OpenMPI, HDF5, Boost)
- Programming languages (such as Python, MATLAB, R)
- Scientific applications (such as LAMMPS, ANSYS)
- Others (e.g., Git, )
Module Commands
These packages are available as modules on Palmetto. The following commands can be used to inspect, activate and deactivate modules:
Command | Purpose |
---|---|
module avail | List all packages available (on current system) |
module spider package | List all packages with package in the name |
module load package/version | Add a package to your current shell environment |
module list | List packages you have loaded |
module rm package/version | Remove a currently loaded package |
module purge | Remove all currently loaded packages |
Example usage of module spider
module spider
For example, to see what versions of Matlab are installed, you can use the command:
$ module spider matlab
------------------------------------
matlab:
------------------------------------
Versions:
matlab/2022a
matlab/2023a
matlab/2023b
Example usage of module load
module load
To load the GCC (v12.3.0) and OpenMPI (v4.1.6) modules, you can use the command:
module load gcc/12.3.0 openmpi/4.1.6
Then, check the version of gcc
:
$ gcc --version
gcc (GCC) 12.3.0
Copyright (C) 2013 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.
Example usage of module list
module list
To view all the modules you have loaded:
$ module list
Currently Loaded Modules:
1) gcc/12.3.0 2) openmpi/4.1.6
Optimized Modules
On Palmetto 2, we have introduced a new module system that provides optimized software packages based on compute node architecture. This ensures that users can access software that is tailored to the specific capabilities of the node they are working on, resulting in improved performance and efficiency.
The corresponding compiler module must be loaded first before you will see
optimized modules appear in module avail
.
Below is a list of compilers for each platform that have optimized modules:
Platform | Corresponding Compiler Module |
---|---|
AMD | aocc |
NVIDIA | cuda |
Users cannot load two packages that are optimized for different architectures simultaneously.
Example of accessing AMD CPU optimized modules
For nodes equipped with AMD CPUs, the following steps should be taken:
-
Load the AOCC compiler from the core modules:
module load aocc/4.1.0
-
Check the available optimized packages for AMD CPU nodes:
module avail
This command will display all the packages that are optimized for AMD CPU nodes.
Example of loading CUDA optimized version of OpenMPI
-
Load the CUDA module:
module load cuda/12.3.0
-
Check the CUDA modules:
module avail
-
Load the CUDA Aware OpenMPI module:
module load openmpi/5.0.1
Example of output from module avail
with optimized modules
module avail
with optimized modulesOnce you have loaded the compiler, you will see a new heading for the optimized
modules in module avail
:
$ module avail
------------------------------ AOCC (AMD) Modules ------------------------------
example_program/2.3
--------------------------------- Core Modules ---------------------------------
example_program/2.3
another_one/1.2
------------------------- Commercial/External Modules --------------------------
paid_calculator/4.4
Module Dependencies
Some modules when loaded, implicitly load other modules as well. If you use some modules to compile/install some software, then you will probably have to load them when running that software as well, otherwise you may see errors about missing libraries/headers. Modules do not remain loaded when you log out and log back in, i.e., they are active only for the current session - so you will need to load them for every session.
As an exercise, examine the environment variables PATH, LIBRARY_PATH, etc., before and after loading some module:
echo $PATH
module add anaconda3/2023.09-0
echo $PATH
You can also look at the module files in /software/ModuleFiles
to understand
what happens when you add a module.