Gids voor het opzetten van OpenMPI: compileren, SSH, Slurm en prestatieverificatie
AI_Manager
Het opzetten van OpenMPI is meer dan alleen het kopiëren van uitvoerbare bestanden naar alle nodes. Het vereist het op elkaar afstemmen van compilers, Open MPI-versies, runtime-bibliotheken, netwerktransportlagen en scheduler-integratie, gevolgd door stapsgewijze verificatie van kleine programma’s tot aan communicatieprestaties.
Deze gids voor het opzetten van OpenMPI behandelt vanuit operationeel perspectief de keuze tussen distributiepakketten en officiële tarballs, wrapper-compilers, uitvoering via niet-beheerde SSH, mpirun binnen Slurm-allocaties, PMIx/PRRTE, CPU-binding en UCX-verificatie.

OpenMPI opzetten: keuze van uitvoeringsmodel
| Omgeving | Aanbevolen uitvoering | Vereisten |
|---|---|---|
| Ontwikkeling op een enkele host | mpirun -n | Lokale bibliotheken en slots |
| Niet-beheerd kleinschalig cluster | mpirun + hostfile | SSH, identieke paden en verificatie van host-keys |
| Slurm-beheerd cluster | mpirun binnen een allocatie | Build met Slurm/PMIx-integratie en resourcebeleid |
Op een operationeel Slurm-cluster mag u niet omzeilen door verbinding te maken met rekennodes via willekeurige hostfiles en SSH. Uitvoering buiten de scheduler-allocatie verstoort de isolatie van CPU, geheugen en GPU, evenals de Slurm-accounting.
OpenMPI opzetten: distributiepakketten versus broncode-builds
Distributiepakketten zijn eenvoudig te updaten en beheren qua afhankelijkheden, maar de versie en ondersteuning voor UCX/PMIx-functies voldoen mogelijk niet aan uw vereisten. Controleer eerst de pakketinformatie en bouw alleen een officiële Open MPI-release-tarball in een aparte prefix als de functies ontoereikend zijn. Door GitHub automatisch gegenereerde broncode-archieven zijn geen vervanging voor officiële release-tarballs.
dnf info openmpi openmpi-devel
rpm -q openmpi openmpi-devel
module avail 2>&1 | grep -i mpi
Verificatie van officiële tarballs en build in een aparte prefix
sha256sum -c openmpi-X.Y.Z.tar.bz2.sha256
tar -xjf openmpi-X.Y.Z.tar.bz2
cd openmpi-X.Y.Z
./configure --prefix=/opt/openmpi/X.Y.Z --with-slurm --with-pmix --with-ucx
make -j"$(nproc)"
make check
sudo make install
Controleer of de functies die in de samenvatting van configure werden aangevraagd, daadwerkelijk zijn gevonden. Als de paden naar UCX of PMIx verschillen en u vertrouwt op automatische detectie, kunnen verschillende knooppunten verbinding maken met verschillende bibliotheken. Voor productieomgevingen is het beter om te distribueren via hetzelfde RPM-pakket voor een betere reproduceerbaarheid.
/opt/openmpi/X.Y.Z/bin/ompi_info --version
/opt/openmpi/X.Y.Z/bin/ompi_info --all | grep -Ei 'slurm|pmix|prrte|ucx'
ldd /opt/openmpi/X.Y.Z/bin/mpirun
OpenMPI-opbouw: Omgevingsmodules en knooppuntconsistentie
Voor een OpenMPI-omgeving is het niet voldoende om alleen de PATH aan te passen. De headers en bibliotheken waarnaar de wrapper-compiler verwijst, evenals de paden voor libmpi en plug-ins tijdens runtime, moeten op alle knooppunten identiek zijn.
export PATH=/opt/openmpi/X.Y.Z/bin:$PATH
export LD_LIBRARY_PATH=/opt/openmpi/X.Y.Z/lib:$LD_LIBRARY_PATH
which mpicc
which mpirun
mpicc --showme:command
mpicc --showme:compile
mpicc --showme:link
ompi_info --version
for host in node01 node02 node03 node04; do
ssh "$host" '/opt/openmpi/X.Y.Z/bin/ompi_info --version'
done
Het gebruik van omgevingsmodules verbetert het schakelen tussen versies en de reproduceerbaarheid. Modulebestanden koppelen de PATH en bibliotheekpaden aan slechts één versie-prefix, en de versie wordt expliciet geladen in het taakscript.
Een minimaal MPI-programma bouwen met de wrapper-compiler
mpicc en mpicxx zijn geen onafhankelijke compilers, maar wrappers die de benodigde MPI-opties toevoegen aan de geselecteerde C/C++ compiler. Stel de paden voor headers en bibliotheken niet handmatig samen met een standaard gcc.
#include <mpi.h>
#include <stdio.h>
int main(int argc, char **argv) {
int rank, size, name_len;
char name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Get_processor_name(name, &name_len);
printf("rank=%d size=%d host=%s\n", rank, size, name);
MPI_Finalize();
return 0;
}
mpicc -O2 -Wall -Wextra hello_mpi.c -o hello_mpi
ldd ./hello_mpi | grep -E 'libmpi|open-rte|pmix'
mpirun -n 4 ./hello_mpi
Voer Open MPI niet uit als root. Gebruik zelfs binnen containers speciale gebruikers zonder privileges en resourcebeperkingen van de scheduler; maak van omwegen die root-uitvoering forceren geen operationele standaard.
SSH-uitvoering in niet-beheerde clusters
Gebruik een hostfile alleen in experimentele clusters zonder scheduler. Uitvoerbare bestanden en dynamische bibliotheken moeten op alle knooppunten op hetzelfde absolute pad staan, en SSH-sleutelauthenticatie en host-key-verificatie moeten vooraf zijn voltooid.
node01 slots=8
node02 slots=8
mpirun --hostfile hosts.txt --map-by ppr:4:node --bind-to core ./hello_mpi
Voer niet impliciet meer ranks uit dan er slots beschikbaar zijn. Oversubscription kan bewust worden gebruikt bij ontwikkelingstests, maar het kan de prestatieresultaten in productie vertekenen en leiden tot geheugendruk.
OpenMPI-opbouw: mpirun gebruiken binnen Slurm-toewijzingen
Voor de Open MPI 5-serie wordt het gebruik van mpirun aanbevolen, zelfs in een Slurm-omgeving. mpirun binnen een toewijzing leest de knooppunt- en taakinformatie die door Slurm is verstrekt, waardoor het niet nodig is om hostfile, –host of -n opnieuw op te geven.
#!/usr/bin/env bash
#SBATCH --job-name=mpi-smoke
#SBATCH --partition=compute
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=1
#SBATCH --time=00:05:00
#SBATCH --output=mpi-%j.out
set -euo pipefail
module purge
module load openmpi/X.Y.Z
echo "nodes=${SLURM_JOB_NODELIST} tasks=${SLURM_NTASKS}"
mpirun --bind-to core --map-by slot ./hello_mpi
JOB_ID=$(sbatch --parsable mpi-smoke.sbatch)
squeue --job "$JOB_ID"
sacct --jobs "$JOB_ID" --format=JobID,State,Elapsed,AllocCPUS,ExitCode
cat "mpi-${JOB_ID}.out"
Directe uitvoering van srun kiezen na verificatie van PMIx-ondersteuning
Directe uitvoering van srun is mogelijk, maar Slurm en Open MPI moeten zijn gebouwd met een compatibele PMIx. Controleer eerst de ondersteunde plug-ins en leg in de documentatie vast of de standaard voor de site mpirun of srun is.
srun --mpi=list
ompi_info --all | grep -Ei 'pmix|slurm'
srun --mpi=pmix ./hello_mpi
OpenMPI-opbouw: Verificatie van TCP/UCX en CPU-binding
Op Ethernet kan TCP worden gekozen, terwijl voor InfiniBand of RoCE vaak UCX wordt geselecteerd. Controleer de door Open MPI gedetecteerde configuratie, de status van de NIC, de MTU en de rechten voor RDMA-apparaten voordat u de transportlaag dwingend oplegt.
ompi_info --param pml all
ompi_info --param btl all
ompi_info --param osc all
ucx_info -d
ibv_devinfo
ip -br link
mpirun --report-bindings --display-map --bind-to core --map-by slot ./hello_mpi
Voor knooppunten met hyperthreading, NUMA en GPU’s moeten het map-by- en bind-to-beleid worden gebenchmarkt op basis van de specifieke kenmerken van de applicatie. Ga er niet vanuit dat meer ranks altijd sneller zijn en overschrijd het aantal fysieke cores niet.
Functies en prestaties afzonderlijk testen
- Controleer de initialisatie en beëindiging met 2 tot 4 ranks op een enkel knooppunt.
- Controleer de naamomzetting en het starten van processen met een hello-programma op twee knooppunten.
- Registreer de latentie en bandbreedte met een kleine ping-pong-benchmark.
- Meet CPU-, geheugen-, netwerkgebruik en schaalbaarheid met de werkelijke invoer van de applicatie.
- Controleer of er geen processen achterblijven bij knooppunt- of NIC-storingen en bij het annuleren van taken.
mpirun -n 2 osu_latency
mpirun -n 2 osu_bw
sstat --jobs "${SLURM_JOB_ID}.batch" --format=JobID,AveCPU,MaxRSS,AveRSS
OpenMPI-opbouw: Probleemoplossing
mpirun --version
mpicc --showme
ompi_info --version
ldd ./hello_mpi
env | grep -E '^(PATH|LD_LIBRARY_PATH|OPAL|OMPI|PMIX|PRTE|SLURM)'
scontrol show job "$SLURM_JOB_ID"
hostnamectl --static
getent hosts node01
- Als de libmpi-versies verschillen, ruim dan de module en LD_LIBRARY_PATH op en herdistribueer dezelfde build.
- Controleer bij mislukte externe opstartpogingen de host-key, niet-interactieve SSH, identieke paden en de firewall.
- Verwijder de opties hostfile en –host als Slurm-taken naar knooppunten buiten de toewijzing gaan.
- Controleer bij UCX-fouten de apparaten, stuurprogramma’s, MTU, geheugenvergrendeling en de rechten voor containerapparaten.
- Meet prestatieverlies in samenhang met CPU-binding, NUMA, oversubscription en het communicatiepatroon van de applicatie.
Officiële documentatie en gerelateerde artikelen
- Open MPI officiële Quick Start
- Open MPI officiële installatiegids voor broncode
- Open MPI 5 en Slurm-uitvoering
- Slurm-opbouw en beheer van MUNGE en accounting
- SSH-sleutelauthenticatie en host-key-verificatie
De voltooiingscriteria voor een OpenMPI-installatie bestaan niet uit slechts één keer een hello-programma uitvoeren, maar uit een staat waarin dezelfde build, naleving van scheduler-resources, binding, transportlaag, Slurm-accounting en werkelijke prestaties reproduceerbaar zijn. Leg versies, modules, compilatieopties en benchmarkresultaten vast in de taakgeschiedenis om de situatie voor en na een upgrade te kunnen vergelijken.