Skip to content

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.0.5.2
$ module whatis openmpi/4.0.5.2

# Preverite vse možnosti s `tab`
$ module load openmpi/<tab>

Nalaganje izbranega modula (Default Open MPI, različica 4.0.5.2).

  • Prevedi C/C++ kodo z openmpi/4.0.5.2 (npr. mpicc, mpic++, mpiCC in mpicxx)
  • Prevedi Fortran kodo z openmpi/gnu/4.0.5.2 (npr. C/C++ prevajalniki, mpifort, mpif70, mpif77 in mpif90)
  • Prevedi Intel kodo z openmpi/intel/4.0.5.2 (eg. C/C++ prevajalniki, Fortran prevajalniki in mpirun)
$ module load openmpi/4.0.5.2
$ module load openmpi/gnu/4.0.5.2
$ module load openmpi/intel/4.0.5.2
$ modiule load oneapi/compiler/lates

Ko naložite modul Open MPI, bodo na voljo ustrezni ukazi za izvajanje vaših MPI programov.

$ mpirun ./my_application

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 (4.0.5.2, je že 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:

srun --mpi=list

Priporočamo uporabo pmix (npr. prevajalnik GNU). Primer SBATCH skripte:

#!/bin/bash
#SBATCH --jobname=multinode-srun-test
#SBATCH --nodes=2
#SBATVH --ntasks=4
#SBATCH --ntasks-per-node=2
#SBATCH --time=00:15:00
#SBATCH --output %j.output
#SBATCH --partition=cpu

srun --mpi=pmix ./mpibench 

Za Intel, uporabite pmi2 in izvozite spremenljivko I_MPI_PMI_LIBRARY.

export I_MPI_PMI_LIBRARY=/usr/lib64/slurm/libslurm_pmi.so
srun --mpi=pmi2 ./mpibench

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.