De juiste MPI-bibliotheek selecteren

Voltooid

HB120_v2, HB60 en HC44-SKU's ondersteunen InfiniBand-netwerkverbindingen. Omdat de PCI-express wordt gevirtualiseerd via SR-IOV-virtualisatie (single-root input/output), zijn alle populaire MPI-bibliotheken (HPCX, OpenMPI, Intel MPI, MVAPICH en MPICH) beschikbaar op deze HPC-VM's.

De huidige beperking voor een HPC-cluster dat kan communiceren via InfiniBand is 300 VM's. De volgende tabel bevat het maximum aantal parallelle processen dat wordt ondersteund in nauw gekoppelde MPI-toepassingen die communiceren via InfiniBand.

SKU Maximum aantal parallelle processen
HB120_v2 36.000 processen
HC44 13.200 processen
HB60 18.000 processen

Notitie

Deze limieten kunnen in de toekomst veranderen. Als u een nauw gekoppelde MPI-taak hebt waarvoor een hogere limiet is vereist, dient u een ondersteuningsaanvraag in. Het is mogelijk om de limieten voor uw situatie te verhogen.

Als een HPC-toepassing een bepaalde MPI-bibliotheek aanbeveelt, probeert u eerst die versie. Als u flexibiliteit hebt met betrekking tot welke MPI u kunt kiezen en u de beste prestaties wilt, kunt u HPCX proberen. Over het algemeen presteert de HPCX MPI het beste met behulp van het UCX-framework voor de InfiniBand-interface en profiteert van alle Mellanox InfiniBand-hardware- en softwaremogelijkheden.

In de volgende afbeelding worden de populaire MPI-bibliotheekarchitecturen vergeleken.

Diagram of popular MPI architectures.

HPCX en OpenMPI zijn compatibel met ABI, zodat u dynamisch een HPC-toepassing kunt uitvoeren met HPCX die is gebouwd met OpenMPI. Op dezelfde manier zijn Intel MPI, MVAPICH en MPICH compatibel met ABI.

Het wachtrijpaar 0 is niet toegankelijk voor de gast-VM om beveiligingsproblemen te voorkomen via hardwaretoegang op laag niveau. Dit mag geen effect hebben op HPC-toepassingen van eindgebruikers, maar het kan voorkomen dat sommige hulpprogramma's op laag niveau correct werken.

HPCX- en OpenMPI mpirun-argumenten

De volgende opdracht illustreert enkele aanbevolen mpirun argumenten voor HPCX en OpenMPI:

mpirun -n $NPROCS --hostfile $HOSTFILE --map-by ppr:$NUMBER_PROCESSES_PER_NUMA:numa:pe=$NUMBER_THREADS_PER_PROCESS -report-bindings $MPI_EXECUTABLE

In deze opdracht:

Parameter Description
$NPROCS Hiermee geeft u het aantal MPI-processen. Voorbeeld: -n 16.
$HOSTFILE Hiermee geeft u een bestand met de hostnaam of het IP-adres op om de locatie aan te geven waar de MPI-processen worden uitgevoerd. Voorbeeld: --hostfile hosts.
$NUMBER_PROCESSES_PER_NUMA Hiermee geeft u het aantal MPI-processen op dat in elk NUMA-domein wordt uitgevoerd. Als u bijvoorbeeld vier MPI-processen per NUMA wilt opgeven, gebruikt --map-by ppr:4:numa:pe=1u .
$NUMBER_THREADS_PER_PROCESS Hiermee geeft u het aantal threads per MPI-proces. Als u bijvoorbeeld één MPI-proces en vier threads per NUMA wilt opgeven, gebruikt --map-by ppr:1:numa:pe=4u .
-report-bindings Hiermee worden MPI-processen die zijn toegewezen aan kernen afgedrukt. Dit is handig om te controleren of het vastmaken van uw MPI-proces juist is.
$MPI_EXECUTABLE Hiermee geeft u het uitvoerbare MPI uitvoerbare koppeling in MPI-bibliotheken. MpI-compiler-wrappers doen dit automatisch. Bijvoorbeeld: mpicc of mpif90.

Als u vermoedt dat uw nauw gekoppelde MPI-toepassing een overmatige hoeveelheid collectieve communicatie uitvoert, kunt u proberen hiërarchische collectieven in te schakelen (HCOLL). Als u deze functies wilt inschakelen, gebruikt u de volgende parameters:

-mca coll_hcoll_enable 1 -x HCOLL_MAIN_IB=<MLX device>:<Port>

Intel MPI mpirun-argumenten

De Intel MPI 2019-release is overgeschakeld van het Open Fabrics Alliance-framework (OFA) naar het OFI-framework (Open Fabrics Interfaces) en ondersteunt momenteel libfabric. Er zijn twee providers voor InfiniBand-ondersteuning: mlx en werkwoorden. De provider mlx is de voorkeursprovider op HB- en HC-VM's.

Hier volgen enkele voorgestelde mpirun argumenten voor Intel MPI 2019 update 5+:

export FI_PROVIDER=mlx
export I_MPI_DEBUG=5
export I_MPI_PIN_DOMAIN=numa

mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE

In deze argumenten:

Parameters Beschrijving
FI_PROVIDER Hiermee geeft u op welke libfabric-provider moet worden gebruikt, wat van invloed is op de API, het protocol en het netwerk dat wordt gebruikt. verbs is een andere optie, maar over het algemeen mlx biedt u betere prestaties.
I_MPI_DEBUG Hiermee geeft u het niveau van extra foutopsporingsuitvoer op, die details kan bieden over waar processen zijn vastgemaakt en welk protocol en welk netwerk worden gebruikt.
I_MPI_PIN_DOMAIN Hiermee geeft u op hoe u uw processen wilt vastmaken. U kunt bijvoorbeeld vastmaken aan kernen, sockets of NUMA-domeinen. In dit voorbeeld stelt u deze omgevingsvariabele numain op , wat betekent dat processen worden vastgemaakt aan NUMA-knooppuntdomeinen.

Er zijn enkele andere opties die u kunt proberen, met name als collectieve bewerkingen een aanzienlijke hoeveelheid tijd in beslag neemt. Intel MPI 2019 update 5+ ondersteunt het bieden van mlx en maakt gebruik van het UCX-framework om te communiceren met InfiniBand. Het ondersteunt ook HCOLL.

export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1

MVAPICH mpirun-argumenten

De volgende lijst bevat verschillende aanbevolen mpirun argumenten:

export MV2_CPU_BINDING_POLICY=scatter
export MV2_CPU_BINDING_LEVEL=numanode
export MV2_SHOW_CPU_BINDING=1
export MV2_SHOW_HCA_BINDING=1

mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE

In deze argumenten:

Parameters Beschrijving
MV2_CPU_BINDING_POLICY Hiermee geeft u op welk bindingsbeleid moet worden gebruikt, wat van invloed is op de wijze waarop processen worden vastgemaakt aan kern-id's. In dit geval geeft scatteru op, zodat processen gelijkmatig worden verspreid over de NUMA-domeinen.
MV2_CPU_BINDING_LEVEL Hiermee geeft u op waar processen moeten worden vastgemaakt. In dit geval stelt u deze numanodein op , wat betekent dat processen worden vastgemaakt aan eenheden van NUMA-domeinen.
MV2_SHOW_CPU_BINDING Hiermee geeft u op of u foutopsporingsinformatie wilt ophalen over waar de processen zijn vastgemaakt.
MV2_SHOW_HCA_BINDING Hiermee geeft u op of u foutopsporingsinformatie wilt ophalen over welke hostkanaaladapter elk proces gebruikt.