MPI
Implementacija standarda MPI (angl. Message Passing Interface) je pomemben del gruče HPC Vega. Velika večina programske opreme, ki mora komunicirati med vozlišči, uporablja MPI. Čeprav to ni edini način komunikacije med procesi, je edini, za katerega nudimo standardno implementacijo, ki se lahko uporablja tako za pretvarjanje kot za izvajanje programske opreme. Druge, bolj specializirane, implementacije programske opreme so običajno vgrajene v programsko opremo, ki jih uporablja.
Več informacij o MPI najdete na naslednji lokaciji:
Obstaja več implementacij stadarda MPI. Na HPC Vega uporabljamo Open MPI.
Open MPI na HPC Vega je na voljo kot modul. Iskanje in prikaz želenega modula:
$ module keyword openmpi/4.1.2.1
# Preverite vse možnosti s `tab`
$ module load openmpi/<tab>
Nalaganje izbranega modula (Default Open MPI, različica 4.1.2.1).
- Prevedi C/C++ kodo z
openmpi
(npr. mpicc, mpic++, mpiCC in mpicxx) - Prevedi Fortran kodo z
openmpi/gnu
(npr. C/C++ prevajalniki, mpifort, mpif70, mpif77 in mpif90) - Prevedi kodo z OneAPI prevajalnikom (uporabljena različica latest je: 2022.0.2):
oneapi/compiler/latest
$ module load openmpi/4.1.2.1
$ module load openmpi/gnu/4.1.2.1
$ module load oneapi/compiler/latest
Najdite starejše verzije:
$ module spider openmpi
Ko naložite modul Open MPI, bodo na voljo ustrezni ukazi za izvajanje vaših MPI programov.
$ mpirun ./program
Posli na posameznem vozlišču
Na gruči Vega lahko uporabite poljubno različico (npr. module cvmfs, ki so vpeti na /cvmfs in na voljo prek modulov ali sistemskega modula Open MPI).
Posli na več vozliščih
HPC Vega uporablja Infiniband, zato je treba za uspešno izvedbo posla pravilno nastaviti okolje.
Sistemski modul Open MPI je privzeto ustrezno nastavljen. btl
je privzeto onemogočen, zato UCX
uporabi pravilen vmesnik (ib0).
V primeru, da uporabite katero koli drugo verzijo, ki ni ustrezno prevedena in nastavljena, je treba izbrati pravilen vmesnik (ib0). Primer je na voljo v nadaljevanju.
Uporaba srun
Preverite podprte API vmesnike. Priporočamo uporabo pmix
.
srun --mpi=list
Primer SBATCH skripte:
#!/bin/bash
#SBATCH --jobname=multinode-srun-test
#SBATCH --nodes=2
#SBATVH --ntasks=4
#SBATCH --ntasks-per-node=2
#SBATCH --time=00:10:00
#SBATCH --output %j.output
#SBATCH --partition=cpu
srun --mpi=pmix ./mpiBench
Za Intel, izvozite spremenljivko I_MPI_PMI_LIBRARY
in naložite OneAPI modul, ter kodo prevedite z OneAPI prevajalnikom ustrezne različice.
Example of SBATCH script:
#!/bin/bash
#SBATCH --jobname=multinode-srun-test
#SBATCH --nodes=2
#SBATVH --ntasks=4
#SBATCH --ntasks-per-node=2
#SBATCH --time=00:10:00
#SBATCH --output %j.output
#SBATCH --partition=cpu
export I_MPI_PMI_LIBRARY=/usr/lib64/libpmi2.so
module load oneapi/mpi/2021.5.1
srun --mpi=pmix ./mpiBench-Intel
Uporaba mpirun
:
Open MPI, verzija 3.x
$ mpirun -mca btl_tcp_if_include ib0 ./mpibench
Open MPI, verzija pred 4.0.3
Omogočite ucx
in onemogočite btl
.
Primer SBATCH skripte:
#!/bin/bash
#SBATCH --job-name=multinode-mpirun-test
#SBATCH --nodes=2
#SBATVH --ntasks=4
#SBATCH --ntasks-per-node=2
#SBATCH --time=00:15:00
#SBATCH --output %j.output
#SBATCH --partition=cpu
module load OpenMPI/4.0.3-GCC-9.3.0
mpirun -mca pml ucx -mca btl ^uct,tcp,openib,vader --bind-to core:overload-allowed ./mpibench
mpibench
najdete na:
- Izvorna koda: mpiBench
- Prevedena koda:
/ceph/hpc/software/mpibench
Za več informacij o večnitnih, večjedrnih in drugih poslih z Open MPI, Open MP, hybrid so na voljo na: povezavi.