Agregar módulos manualmente en OpenHPC
La estructura del directorio de OpenHPC para elementos públicamente visibles es
/opt/ohpc/pub/
├── apps # aplicaciones para usuarios
│ ├── lammps
│ └── wrf
├── compiler # compiladores sin OneAPI
│ └── gcc
├── doc
│ └── contrib
├── examples # ejemplos genéricos
│ ├── ganglia
│ ├── mpi
│ ├── nagios
│ ├── network
│ ├── openpbs
│ ├── slurm
│ └── udev
├── libs # librerías
│ ├── charliecloud
│ ├── gnu12
│ ├── gnu9
│ ├── hwloc
│ ├── intel
│ ├── lenovo
│ ├── papi
│ ├── singularity
│ ├── wrf_libs
│ └── wrf_libs2
├── moduledeps # módulos *que dependen de otros módulos*
│ ├── gnu
│ ├── gnu12 # módulos que dependen solo de gnu12
│ ├── gnu12-impi # módulos que dependen de gnu12 e IntelMPI
│ ├── gnu12-mpich
│ ├── gnu12-mvapich2
│ ├── gnu12-openmpi4
│ ├── gnu9
│ ├── gnu9-mpich
│ ├── gnu9-mvapich2
│ ├── gnu9-openmpi4
│ ├── intel # módulos que dependen de los compiladores de intel
│ ├── intel-impi
│ ├── intel-mpich
│ ├── intel-mvapich2
│ ├── intel-openmpi4 # módulos compilados con intel y OpenMPI
│ └── oneapi # módulos de OneAPI, dependen de intel
├── modulefiles #módulos que no dependen de otros módulos
│ ├── charliecloud
│ ├── cmake
│ ├── gnu -> gnu12
│ ├── gnu12
│ ├── gnu9
│ ├── hwloc
│ ├── intel
│ ├── libfabric
│ ├── papi
│ ├── pmix
│ ├── prun
│ ├── singularity
│ ├── ucx
│ └── wrf
├── mpi # implementaciones de MPI, libfabric y UCX
│ ├── libfabric
│ ├── mpich-ofi-gnu12-ohpc
│ ├── mpich-ofi-gnu9-ohpc
│ ├── mpich-ofi-intel-ohpc
│ ├── mvapich2-gnu12
│ ├── mvapich2-gnu9
│ ├── mvapich2-intel
│ ├── openmpi4-gnu12
│ ├── openmpi4-gnu9
│ ├── openmpi4-intel
│ └── ucx-ohpc
└── utils # cosas que en cualquier sistema razonable vienen con el OS, pero que es útil para ajustar la versión
├── autotools
├── cmake
└── prun
Lo clave sería la diferencia entre modulefiles y moduledeps, esencialmente lo que está compilado con intel o gnu12 (con o sin MPI) va a ir en una de las carpetas de moduledeps, dependiendo si solo se compiló con ese módulo o en combinación con una implementación de MPI.
Este directorio se monta automáticamente en los nodos de login snmgt01 y snmgt02 (y de cómputo, por otro mecanismo), aparentemente solo del headnode 1 mmgt01:
$ cat /etc/auto.ohpc * -nfsvers=4 172.28.253.1:/opt/ohpc/pub/&
Los cambios en el mmgt01 también se ven reflejados en mmgt02, aunque no me termina de quedar claro el mecanismo y no probé si funciona a la inversa.
Entonces, para poder incorporar un software nuevo al sistema de módulos, primero hay que poner el software compilado en /opt/ohpc/pub/apps:
[admin@mmgt01] sudo mkdir /opt/ohpc/pub/apps/lammps [admin@mmgt01] sudo cp -rv 2024-ocl-most/ /opt/ohpc/pub/apps/lammps/ # pongo un identificador para la versión específica
Después hay que poner un módulo en el lugar de moduledeps correspondiente, en este caso intel-openmpi4:
sudo mkdir /opt/ohpc/pub/moduledeps/intel-openmpi4/lammps sudo cp modules/lammps/2024-Aug-opencl /opt/ohpc/pub/moduledeps/intel-openmpi4/lammps/
Esto solo habilita el módulo si se cargan los módulos intel y openmpi4, por las dudas también incluyo la dependencia en el modulefile:
#%Module1.0##################################################################### module-whatis "Name : lammps" module-whatis "Version : 29Aug2024" module-whatis "Target : sapphire-rapids" module-whatis "Short description : LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel Simulator." depends-on intel/2023.2.1 depends-on openmpi4/4.1.6 setenv OMPI_MCA_pml ucx prepend-path PATH /opt/ohpc/pub/apps/lammps/2024-ocl-most/build
(pongo la versión por si cambia el default, fuerzo a que use UCX para que aproveche Infiniband, puede que no sea necesario o incluso que traiga problemas)
Con esto puedo cargar el módulo solo si primero cargo intel y openmpi4, o hago module spider lammps. Para hacerlo más visible al usuario, creo un módulo que lo haga automáticamente.
sudo mkdir /opt/ohpc/pub/modulefiles/lammps sudo cp modules/lammps/2024-Aug-opencl-loader /opt/ohpc/pub/modulefiles/lammps/2024-Aug-opencl
El módulo contiene lo siguiente
#%Module1.0##################################################################### module-whatis "Name : lammps" module-whatis "Version : Aug2024" module-whatis "Target : sapphire-rapids" module-whatis "Short description : LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel Simulator." module load intel/2023.2.1 openmpi4/4.1.6 lammps/2024-Aug-opencl
si está cargado el módulo de gnu12 va a quejarse, hay que hacer un module purge (no lo hago desde el módulo porque puede romper flujos de trabajo). Idealmente gnu12 no se cargaría por defecto.
