Modules

From Grid5000
Revision as of 09:34, 5 April 2023 by Pringot (talk | contribs) (Pringot moved page Environment modules to Modules: On décide de passer sur le nom Modules)
Jump to navigation Jump to search
Note.png Note

This page is actively maintained by the Grid'5000 team. If you encounter problems, please report them (see the Support page). Additionally, as it is a wiki page, you are free to make minor corrections yourself if needed. If you would like to suggest a more fundamental change, please contact the Grid'5000 team.

Grid'5000 provides a set of software (mainly scientific-related) using Environment modules, thanks to the module command line tool.

They are available from Grid5000 frontends or cluster's nodes (only on debianXX-big and debianXX-nfs environment if deployment is used).

The modules command

General usage

The module system is designed to load software and make it available by modifying environment (such as your PATH variable).

To get started, list available software using:

$ module avail
----------------------------------------- /grid5000/spack/share/spack/modules/linux-debian10-x86_64 ------------------------------------------
  aocc/3.1.0_gcc-8.3.0                           hsa-rocr-dev/4.2.0_gcc-8.3.0               rocm-dbgapi/4.2.0_gcc-8.3.0
  atmi/4.2.0_gcc-8.3.0                           hsa-rocr-dev/4.3.1_gcc-8.3.0        (D)    rocm-dbgapi/4.3.1_gcc-8.3.0     (D)
  binutils/2.32_gcc-8.3.0                        hwloc/2.5.0_gcc-8.3.0               (D)    rocm-opencl/4.2.0_gcc-8.3.0
  boost/1.73.0_gcc-8.3.0                  (D)    libevent/2.1.12_gcc-8.3.0                  rocm-opencl/4.3.1_gcc-8.3.0     (D)
  clingo/master_gcc-8.3.0                        llvm-amdgpu/4.2.0_gcc-8.3.0                rocm-smi-lib/4.2.0_gcc-8.3.0
  cuda/10.2.89_gcc-8.3.0                         llvm-amdgpu/4.3.1_gcc-8.3.0         (D)    rocm-smi-lib/4.3.1_gcc-8.3.0    (D)
  cuda/11.0.2_gcc-8.3.0                          miopen-hip/4.2.0_gcc-8.3.0                 rocminfo/4.2.0_gcc-8.3.0
  cuda/11.3.1_gcc-8.3.0                          miopen-hip/4.3.1_gcc-8.3.0          (D)    rocminfo/4.3.1_gcc-8.3.0        (D)
  cuda/11.4.0_gcc-8.3.0                   (D)    miopen-opencl/4.2.0_gcc-8.3.0              rocprofiler-dev/4.2.0_gcc-8.3.0
  cudnn/7.6.5.32-10.1-linux-x64_gcc-8.3.0        miopen-opencl/4.3.1_gcc-8.3.0       (D)    rocprofiler-dev/4.3.1_gcc-8.3.0 (D)
  cudnn/8.2.4.15-11.4_gcc-8.3.0           (D)    mivisionx/4.2.0_gcc-8.3.0                  rocrand/4.2.0_gcc-8.3.0
  gcc/8.3.0_gcc-8.3.0                            namd3-cuda/3.0alpha9_gcc-8.3.0             rocrand/4.3.1_gcc-8.3.0         (D)
  gcc/11.1.0_gcc-8.3.0                    (D)    opa-psm2/11.2.173_gcc-8.3.0                rocsolver/4.2.0_gcc-8.3.0
  hip/4.2.0_gcc-8.3.0                            openblas/0.3.9_gcc-8.3.0            (D)    rocsolver/4.3.1_gcc-8.3.0       (D)
  hip/4.3.1_gcc-8.3.0                     (D)    openmpi/4.1.1_gcc-8.3.0             (D)    rocsparse/4.2.0_gcc-8.3.0
  hipblas/4.2.0_gcc-8.3.0                        papi/5.7.0_gcc-8.3.0                (D)    rocsparse/4.3.1_gcc-8.3.0       (D)
  hipblas/4.3.1_gcc-8.3.0                 (D)    python/3.8.11_gcc-8.3.0                    rocthrust/4.2.0_gcc-8.3.0
  hipcub/4.2.0_gcc-8.3.0                         rccl/4.2.0_gcc-8.3.0                       rocthrust/4.3.1_gcc-8.3.0       (D)
  hipcub/4.3.1_gcc-8.3.0                  (D)    rccl/4.3.1_gcc-8.3.0                (D)    roctracer-dev/4.2.0_gcc-8.3.0
  hipfft/4.2.0_gcc-8.3.0                         rocblas/4.2.0_gcc-8.3.0                    roctracer-dev/4.3.1_gcc-8.3.0   (D)
  hipfft/4.3.1_gcc-8.3.0                  (D)    rocblas/4.3.1_gcc-8.3.0             (D)    singularity/3.5.2_gcc-8.3.0
  hipfort/4.2.0_gcc-8.3.0                        rocfft/4.2.0_gcc-8.3.0                     singularity/3.7.2_gcc-8.3.0
  hipfort/4.3.1_gcc-8.3.0                 (D)    rocfft/4.3.1_gcc-8.3.0              (D)    singularity/3.8.3_gcc-8.3.0     (D)
  hipify-clang/4.2.0_gcc-8.3.0                   rocm-bandwidth-test/4.2.0_gcc-8.3.0        ucx/1.11.2_gcc-8.3.0
  hipify-clang/4.3.1_gcc-8.3.0            (D)    rocm-bandwidth-test/4.3.1_gcc-8.3.0 (D)    vmd/1.9.4_gcc-8.3.0
  hipsparse/4.2.0_gcc-8.3.0                      rocm-cmake/4.2.0_gcc-8.3.0
  hipsparse/4.3.1_gcc-8.3.0               (D)    rocm-cmake/4.3.1_gcc-8.3.0          (D)
 Where:
  D:  Default Module
Note.png Note

If you need additional software to be installed, feel free to contact Grid5000 support team and we can look into it.

To load something into your environment use the load command:

$ module load gcc
$ gcc --version
gcc (Spack GCC) 11.1.0

By default, module loads the latest version available of a software (sorted by lexicographical order). You can also specify the version you need:

$ module load gcc/8.3.0_gcc-8.3.0
$ gcc --version
gcc (Spack GCC) 8.3.0

You can also find out more information about the package using whatis or show commands:

$ module whatis gcc
$ module show gcc

If you want to unload one or all the currently loaded modules, you can use:

$ module unload gcc
$ module purge

The full documentation of module command is available at: http://modules.sourceforge.net/

Using modules in jobs

The module command is not a real executable, but a shell function.

If it is not available from your shell (it might be the case if you use zsh), ensure that /etc/profile.d/lmod.sh is sourced.

In addition, module must be executed in an actual shell to work: a simple oarsub "module load gcc" will fail, you must use either:

Terminal.png fnancy:
oarsub 'bash -l -c "module load gcc; gcc --version"'

or alternatively:

Terminal.png fnancy:
oarsub ". /etc/profile; module load gcc; gcc --version"

Packages that require connection to license server

Some packages available with module are licensed and require a connection to a license server (e.g. the Intel tools). If your institution provides a license server for this software, you may forward the connection to that license server from the node where the software will be used.

For instance, to use Intel compilers from an Inria institute network (or when using Inria's VPN), you can use jetons.inria.fr license server by forwarding connections to ports 29030 and 34430 from your node using an SSH tunnel. Intel compilers must be configured to use localhost:29030 as the license server for connections to be forwarded in the tunnel. For instance, use the following commands:

# Assuming that your connecting from a network where jetons.inria.fr is available 
laptop: ssh -R 29030:jetons.inria.fr:29030 -R 34430:jetons.inria.fr:34430 <your_node>.g5k
node: module load intel-parallel-studio
node: export INTEL_LICENSE_FILE=29030@127.0.0.1
node: icc -v

Sharing modules between users

Modules can be shared between users by using a group storage.

Note.png Note

This documentation assume that you already know what is a group storage, and that you already have one for storing your modules. If it's not the case, check the Group Storage Documentation.

Put the modules in a dedicated folder of the group storage, so that the modules are reachable by any user belonging to the group storage.

Terminal.png access:
rsync modules-dir/ /srv/my-storage@storage_fqdn/modules-dir

After adding the directory to the MODULEPATH environment variable, the modules inside this directory will be loadable by other users of the group. This can be done by using one of the two following commands.

Terminal.png node:
module use /srv/my-storage@storage_fqdn/modules-dir

or

Terminal.png node:
export MODULEPATH=/srv/my-storage@storage_fqdn/modules-dir:$MODULEPATH


Finally, the modules can be loaded.

Terminal.png node:
module load my-personal-module