De juiste MPI-bibliotheek selecteren
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.
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=1 u . |
$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=4 u . |
-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 | Description |
---|---|
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 numa in 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 | Description |
---|---|
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 scatter u 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 numanode in 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. |