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
- Prevedi kodo z OneAPI MPI
oneapi/mpi/latest
Intel OneAPI MPI
Po nadgradnji gruče (OS, Kernel, Mellanox OFED Drivers,..) priporočamo uporabo zadnje različice, ali verzijo večjo od 2021.6.0
.
Priporočena različica:
$ module load OpenMPI/4.1.5-GCC-12.3.0
Najdite starejše različice:
$ 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_v3 ./mpiBench
Primer Intel OneAPI 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
module load oneapi/mpi/2021.6.0
srun --mpi=pmix_v3 ./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 ./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.