====== 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.