This version (2024/10/24 10:28) is a draft.
Approvals: 0/1
Approvals: 0/1
Software management
- Article written by Markus Stöhr (VSC Team) <html><br></html>(last update 2017-10-09 by ms).
Considerations
- Find a suitable location and directory structure for serveral versions of the same library/code
- Manage the user environment to be able to access the correct version automatically
- Manage different software stacks, e.g. use different compiler(-version) or different library versions to build another library (–> 1.)
Location of compiled software
mountpoint └── processor architecture │ └── glibc (C-library) of OS │ └── processor type │ └──program name │ └──program version
/opt/sw └── x86_64 │ └── glibc-2.17 │ └── ivybridge-ep │ └──hdf5 │ └──1.8.18-MPI
Details of hdf5/1.8.18-MPI
tree -d -L 5 /opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5/1.8.18-MPI
/opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5/1.8.18-MPI ├── gcc │ └── 5.3 │ └── intel-mpi │ └── 5 │ ├── bin │ ├── include │ ├── lib │ └── share └── intel ├── 15 │ └── intel-mpi │ └── 5 │ ├── bin │ ├── include │ ├── lib │ └── share ├── 16 │ └── intel-mpi │ └── 5 │ ├── bin │ ├── include │ ├── lib │ └── share └── 17 └── intel-mpi └── 2017 ├── bin ├── include ├── lib └── share
Software used for compiling is reflected in the directory structure
Environment Modules
- environment: global variables available to current and all sub-shells (‘env’/ ‘set’ )
- module: all modifications (set and prepend to variables) in the user environment necessary for using a piece of software
- handles additional software, which is not installed to default system paths
- makes different versions of one piece of software available
- prerequisites: loading a module may require loading other modules before
module avail
- shows available modules.
- searches paths given by
MODULEPATH
- own modules can be added by extending
MODULEPATH
- If multiple modules with the same name/version are present in different directories, the first found by
MODULEPATH
will be used.
- two parts:
- software name (directory)
- version (file with definitions)
ls /opt/sw/Modules/Libraries/hdf5 1.6.10 1.8.14 1.8.14-SERIAL 1.8.18 1.8.18-SERIAL 1.8.12 1.8.14-MPI 1.8.16 1.8.18-MPI
module load <modulename>
[markus@l33 ~]$ module load hdf5/1.8.18-MPI You are not meeting the prereq of this module. Currently loaded modules: None The following modules combinations can be loaded: (1): module load intel/15 intel-mpi/5 hdf5/1.8.18-MPI (2): module load intel/16 intel-mpi/5 hdf5/1.8.18-MPI (3): module load gcc/5.3 intel-mpi/5 hdf5/1.8.18-MPI (4): module load intel/17 intel-mpi/2017 hdf5/1.8.18-MPI
Do copy and paste:
module load intel/16 intel-mpi/5 hdf5/1.8.18-MPI
module list
- list currently loaded modules
module purge
- remove all loaded modules;
- recommended in job scripts before loading any modules (reproducibility)
module remove <modulename> <modulename> ...
- removes a list of modules
module show <modulename>
- shows the variables added to your environment by a module
module show hdf5/1.8.18-MPI /opt/sw/Modules/Libraries/hdf5/1.8.18-MPI: conflict hdf5 setenv VSC_HDF5_ROOT /opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5/1.8.18-MPI/intel/16/intel-mpi/5 prepend-path CPATH $VSC_HDF5_ROOT/include prepend-path INCLUDE $VSC_HDF5_ROOT/include setenv VSC_HDF5_INCLUDE $VSC_HDF5_ROOT/include prepend-path LD_LIBRARY_PATH $VSC_HDF5_ROOT/lib prepend-path LIBRARY_PATH $VSC_HDF5_ROOT/lib setenv VSC_HDF5_LIB $VSC_HDF5_ROOT/lib prepend-path PATH $VSC_HDF5_ROOT/bin setenv VSC_HDF5_BIN $VSC_HDF5_ROOT/bin setenv VSC_HDF5_VERSION_MAJOR 1 setenv VSC_HDF5_VERSION_MINOR 8 setenv VSC_HDF5_VERSION_MICRO 18-MPI setenv VSC_HDF5_VERSION 1.8 -------------------------------------------------------------------
Exercises
- look at your user environment:
env env |grep PATH echo $PATH |tr ':' '\n' echo $LD_LIBRARY_PATH |tr ':' '\n' echo $MODULEPATH |tr ':' '\n'
- inspect the contents of the directories in MODULEPATH
- look at directory structure of installed software, e.g.:
tree -d /opt/sw/x86_64/glibc-2.17/ivybridge-ep/hdf5
- try the module commands
module avail module load hdf5/1.8.18-MPI #follow instructions in shell! module list module show hdf5/1.8.18-MPI module purge
- compare
PATH
andLD_LIBRARY_PATH
before and after loading a module
Adding own gnuplot module
- setup your own modules directory and a directory for gnuplot
mkdir ${HOME}/mymodules mkdir ${HOME}/mymodules/gnuplot
- prepend own module directory to
MODULEPATH
:
export MODULEPATH=${HOME}/mymodules:$MODULEPATH
- create module file:
${HOME}/mymodules/gnuplot/5.0.5
:
#%Module set inst_base $env(HOME)/mysoftware/gnuplot/5.0.5 prepend-path PATH $inst_base/bin prepend-path LD_LIBRARY_PATH $inst_base/lib append-path CPATH $inst_base/include setenv MYVAR test1234
Exercises
- check how module is loaded by default VSC-3 modules
module avail 2>&1 | less #search for gnuplot; use '/' within less for searching module load gnuplot/5.0.5 module show gnuplot/5.0.5
- create own module environment as described on previous slide, create a directory within your training sub-folder
- check again, how the module is loaded.
Simple example
eg. from HDF5:
EXAMPLE=$VSC_HDF5_ROOT/share/hdf5_examples/c/ph5example.c
Compile using Intel C Compiler (file):
module purge module load intel/16 \ intel-mpi/5 hdf5/1.8.18-MPI cp $EXAMPLE . mpiicc -lhdf5 ph5example.c -o ph5example
Compile using Gnu C Compiler (file):
module purge module load gcc/5.3 \ intel-mpi/5 hdf5/1.8.18-MPI cp $EXAMPLE . mpicc -lhdf5 ph5example.c -o ph5example
If needed add e.g. include directory explicitly:
mpiicc -I$VSC_HDF5_INCLUDE -lhdf5 ph5example.c -o ph5example
Compiler names
Hint:
- mpiifort
- mpifort
- mpicc
- mpiicc