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