A Message Passing Interface beállítása HPC-hez
A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek ✔️ Windows rendszerű virtuális gépek Rugalmas méretezési ✔️ csoportok ✔️ Egységes méretezési csoportok
Az Üzenetátadó felület (MPI) egy nyitott kódtár és defacto szabvány az elosztott memória párhuzamosításához. Gyakran használják számos HPC-számítási feladatban. Az RDMA-képes HB-sorozatú és N sorozatú virtuális gépek HPC számítási feladatai MPI használatával kommunikálhatnak az alacsony késés és a nagy sávszélességű InfiniBand hálózaton keresztül.
- Az SR-IOV-kompatibilis virtuálisgép-méretek az Azure-ban szinte bármilyen MPI-verzió használatát lehetővé teszik a Mellanox OFED használatával.
- A nem SR-IOV-kompatibilis virtuális gépeken a támogatott MPI-implementációk a Microsoft Network Direct (ND) felületet használják a virtuális gépek közötti kommunikációhoz. Ezért csak a Microsoft MPI (MS-MPI) 2012 R2 vagy újabb verziók és az Intel MPI 5.x verziók támogatottak. Az Intel MPI-futtatókörnyezeti kódtár későbbi verziói (2017, 2018) esetleg nem kompatibilisek az Azure RDMA-illesztőprogramokkal.
Az SR-IOV-kompatibilis RDMA-kompatibilis virtuális gépek esetében az Ubuntu-HPC virtuálisgép-rendszerképek és az AlmaLinux-HPC virtuálisgép-rendszerképek alkalmasak. Ezek a virtuálisgép-rendszerképek optimalizálva és előre betöltve vannak az RDMA-hoz készült OFED illesztőprogramokkal, valamint különböző gyakran használt MPI-kódtárakkal és tudományos számítástechnikai csomagokkal, és a legegyszerűbb módja az első lépéseknek.
Bár az alábbi példák az RHEL-hez tartoznak, a lépések általánosak, és bármilyen kompatibilis Linux operációs rendszerhez használhatók, például az Ubuntu (18.04, 20.04, 22.04) és az SLES (12 SP4 és 15 SP4). További példák más MPI-implementációk beállítására más disztribúciókra az azhpc-images adattárban található.
Megjegyzés
Ha MPI-feladatokat futtat az SR-IOV-kompatibilis virtuális gépeken bizonyos MPI-kódtárakkal (például a platform MPI-vel), szükség lehet partíciókulcsok (p-kulcsok) beállítására egy bérlőn az elkülönítés és a biztonság érdekében. A partíciókulcsok felderítése szakaszban található lépéseket követve állapítsa meg a p-kulcs értékeit, és helyesen állítsa be őket egy MPI-feladathoz az adott MPI-kódtárban.
Megjegyzés
Az alábbi kódrészletek példák. Javasoljuk, hogy használja a csomagok legújabb stabil verzióit, vagy hivatkozik az azhpc-images adattárra.
Ha egy HPC-alkalmazás egy adott MPI-kódtárat javasol, először próbálja ki ezt a verziót. Ha rugalmasan dönti el, hogy melyik MPI-t választhatja, és a legjobb teljesítményt szeretné, próbálja ki a HPC-X-t. Összességében a HPC-X MPI a legjobb teljesítményt nyújtja az InfiniBand interfész UCX-keretrendszerének használatával, és kihasználja a Mellanox InfiniBand összes hardver- és szoftverképességét. Emellett a HPC-X és az OpenMPI ABI-kompatibilisek, így dinamikusan futtathat egy HPC-alkalmazást az OpenMPI-vel készült HPC-X használatával. Hasonlóképpen az Intel MPI, az MVAPICH és az MPICH is ABI-kompatibilis.
Az alábbi ábra a népszerű MPI-kódtárak architektúráit mutatja be.
A HPC-X szoftvereszközkészlet UCX-et és HCOLL-t tartalmaz, és az UCX-hez készült.
HPCX_VERSION="v2.6.0"
HPCX_DOWNLOAD_URL=https://azhpcstor.blob.core.windows.net/azhpc-images-store/hpcx-v2.6.0-gcc-MLNX_OFED_LINUX-5.0-1.0.0.0-redhat7.7-x86_64.tbz
wget --retry-connrefused --tries=3 --waitretry=5 $HPCX_DOWNLOAD_URL
tar -xvf hpcx-${HPCX_VERSION}-gcc-MLNX_OFED_LINUX-5.0-1.0.0.0-redhat7.7-x86_64.tbz
mv hpcx-${HPCX_VERSION}-gcc-MLNX_OFED_LINUX-5.0-1.0.0.0-redhat7.7-x86_64 ${INSTALL_PREFIX}
HPCX_PATH=${INSTALL_PREFIX}/hpcx-${HPCX_VERSION}-gcc-MLNX_OFED_LINUX-5.0-1.0.0.0-redhat7.7-x86_64
Az alábbi parancs néhány ajánlott mpirun argumentumot mutat be a HPC-X és az OpenMPI esetében.
mpirun -n $NPROCS --hostfile $HOSTFILE --map-by ppr:$NUMBER_PROCESSES_PER_NUMA:numa:pe=$NUMBER_THREADS_PER_PROCESS -report-bindings $MPI_EXECUTABLE
ahol:
Paraméter | Leírás |
---|---|
NPROCS |
Az MPI-folyamatok számát adja meg. Például: -n 16 |
$HOSTFILE |
Megadja a gazdagépnevet vagy IP-címet tartalmazó fájlt, amely jelzi az MPI-folyamatok futtatásának helyét. Például: --hostfile hosts |
$NUMBER_PROCESSES_PER_NUMA |
Az egyes NUMA-tartományokban futó MPI-folyamatok számát adja meg. Ha például NUMA-nként négy MPI-folyamatot szeretne megadni, akkor a következőt kell használnia --map-by ppr:4:numa:pe=1 : |
$NUMBER_THREADS_PER_PROCESS |
Az MPI-folyamatonkénti szálak számát adja meg. Ha például egy MPI-folyamatot és négy szálat szeretne megadni NUMA-nként, akkor a következőt kell használnia --map-by ppr:1:numa:pe=4 : |
-report-bindings |
Az MPI-folyamatok magokra való leképezését nyomtatja ki, ami hasznos annak ellenőrzéséhez, hogy az MPI-folyamat rögzítése helyes-e. |
$MPI_EXECUTABLE |
Az MPI-kódtárakban végrehajtható, beépített MPI-csatolást adja meg. Az MPI-fordítóburkolók ezt automatikusan elvégzik. Például: mpicc vagy mpif90 . |
Az OSU késési mikrobenchjel futtatására az alábbi példa látható:
${HPCX_PATH}mpirun -np 2 --map-by ppr:2:node -x UCX_TLS=rc ${HPCX_PATH}/ompi/tests/osu-micro-benchmarks-5.3.2/osu_latency
Az MPI kollektív kommunikációs primitívjei rugalmas, hordozható módot kínálnak a csoportkommunikációs műveletek implementálásához. Széles körben használják őket különböző tudományos párhuzamos alkalmazásokban, és jelentős hatással vannak az alkalmazások általános teljesítményére. A közös kommunikációs teljesítményt a HPC-X és a HCOLL kódtárral közös kommunikációra optimalizáló konfigurációs paraméterekkel kapcsolatos részletekért tekintse meg a TechCommunity cikket .
Ha például azt gyanítja, hogy a szorosan összekapcsolt MPI-alkalmazás túlzott mennyiségű kollektív kommunikációt végez, megpróbálhatja engedélyezni a hierarchikus kollektívákat (HCOLL). A funkciók engedélyezéséhez használja az alábbi paramétereket.
-mca coll_hcoll_enable 1 -x HCOLL_MAIN_IB=<MLX device>:<Port>
Megjegyzés
A HPC-X 2.7.4+ esetén előfordulhat, hogy explicit módon át kell adni LD_LIBRARY_PATH, ha az MOFED UCX-verziója és a HPC-X-ben eltérő.
Telepítse az UCX-et a fent leírtak szerint. A HCOLL a HPC-X szoftvereszközkészlet része, és nem igényel speciális telepítést.
Az OpenMPI az adattárban elérhető csomagokból telepíthető.
sudo yum install –y openmpi
Javasoljuk, hogy az OpenMPI és az UCX legújabb, stabil kiadását hozzon létre.
OMPI_VERSION="4.0.3"
OMPI_DOWNLOAD_URL=https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-${OMPI_VERSION}.tar.gz
wget --retry-connrefused --tries=3 --waitretry=5 $OMPI_DOWNLOAD_URL
tar -xvf openmpi-${OMPI_VERSION}.tar.gz
cd openmpi-${OMPI_VERSION}
./configure --prefix=${INSTALL_PREFIX}/openmpi-${OMPI_VERSION} --with-ucx=${UCX_PATH} --with-hcoll=${HCOLL_PATH} --enable-mpirun-prefix-by-default --with-platform=contrib/platform/mellanox/optimized && make -j$(nproc) && make install
Az optimális teljesítmény érdekében futtassa az OpenMPI-t és hcoll
a ucx
. Lásd a HPC-X-et tartalmazó példát is.
${INSTALL_PREFIX}/bin/mpirun -np 2 --map-by node --hostfile ~/hostfile -mca pml ucx --mca btl ^vader,tcp,openib -x UCX_NET_DEVICES=mlx5_0:1 -x UCX_IB_PKEY=0x0003 ./osu_latency
Ellenőrizze a partíciókulcsot a fent említett módon.
Töltse le az Intel MPI választott verzióját. Az Intel MPI 2019 kiadás az Open Fabrics Alliance (OFA) keretrendszerről az Open Fabrics Interfaces (OFI) keretrendszerre váltott, és jelenleg a libfabric-t támogatja. Az InfiniBand két szolgáltatót támogat: mlx és ige. Módosítsa a I_MPI_FABRICS környezeti változót a verziótól függően.
- Intel MPI 2019 és 2021: use
I_MPI_FABRICS=shm:ofi
,I_MPI_OFI_PROVIDER=mlx
. Amlx
szolgáltató az UCX-et használja. Az igék használata instabilnak és kevésbé teljesíthetőnek bizonyult. További részletekért tekintse meg a TechCommunity cikket . - Intel MPI 2018: használat
I_MPI_FABRICS=shm:ofa
- Intel MPI 2016: használat
I_MPI_DAPL_PROVIDER=ofa-v2-ib0
Íme néhány javasolt mpirun argumentum az Intel MPI 2019 5+-os frissítéséhez.
export FI_PROVIDER=mlx
export I_MPI_DEBUG=5
export I_MPI_PIN_DOMAIN=numa
mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE
ahol:
Paraméter | Leírás |
---|---|
FI_PROVIDER |
Megadja, hogy melyik könyvtárszolgáltatót használja, amely hatással lesz a használt API-ra, protokollra és hálózatra. az ige egy másik lehetőség, de általában az mlx jobb teljesítményt nyújt. |
I_MPI_DEBUG |
Megadja az extra hibakeresési kimenet szintjét, amely részletesen be tudja nyújtani, hogy hol vannak rögzítve a folyamatok, és hogy melyik protokollt és hálózatot használja a rendszer. |
I_MPI_PIN_DOMAIN |
Meghatározza, hogyan szeretné rögzíteni a folyamatokat. Rögzíthet például magokat, szoftvercsatornákat vagy NUMA-tartományokat. Ebben a példában ezt a környezeti változót numa értékre állítja, ami azt jelenti, hogy a folyamatok NUMA-csomóponttartományokhoz lesznek rögzítve. |
Vannak más lehetőségek is, amelyeket kipróbálhat, különösen akkor, ha a kollektív műveletek jelentős időt igényelnek. Az Intel MPI 2019 5+ frissítése támogatja a provide mlx szolgáltatást, és az UCX-keretrendszer használatával kommunikál az InfiniBanddel. A HCOLL-t is támogatja.
export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1
Nem SR-IOV rendszerű virtuális gépek esetén az 5.x futtatókörnyezet ingyenes próbaverziójának letöltésére a következő példa látható:
wget http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz
A telepítési lépésekért tekintse meg az Intel MPI-kódtár telepítési útmutatóját. Szükség esetén engedélyezheti a ptrace-t a nem gyökérszintű, nem hibakereső folyamatokhoz (ez az Intel MPI legújabb verzióihoz szükséges).
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
A SUSE Linux Enterprise Server virtuálisgép-rendszerképeinek verziói – SLES 12 SP3 a HPC-hez, SLES 12 SP3 a HPC-hez (Prémium), SLES 12 SP1 a HPC-hez, SLES 12 SP1 a HPC -hez (Prémium), SLES 12 SP4 és SLES 15, az RDMA-illesztőprogramok telepítve vannak, és az Intel MPI-csomagok a virtuális gépen vannak elosztva. Telepítse az Intel MPI-t a következő parancs futtatásával:
sudo rpm -v -i --nodeps /opt/intelMPI/intel_mpi_packages/*.rpm
Az alábbi példa a MVAPICH2 építésére mutat be. Vegye figyelembe, hogy az alábbinál újabb verziók érhetők el.
wget http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.3.tar.gz
tar -xv mvapich2-2.3.tar.gz
cd mvapich2-2.3
./configure --prefix=${INSTALL_PREFIX}
make -j 8 && make install
Az OSU késési mikrobenchjel futtatására az alábbi példa látható:
${INSTALL_PREFIX}/bin/mpirun_rsh -np 2 -hostfile ~/hostfile MV2_CPU_MAPPING=48 ./osu_latency
Az alábbi lista számos ajánlott mpirun
argumentumot tartalmaz.
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
ahol:
Paraméter | Leírás |
---|---|
MV2_CPU_BINDING_POLICY |
Meghatározza a használni kívánt kötési szabályzatot, amely befolyásolja a folyamatok alapvető azonosítókhoz való rögzítését. Ebben az esetben meg kell adnia scatter , hogy a folyamatok egyenletesen el legyenek szórva a NUMA-tartományok között. |
MV2_CPU_BINDING_LEVEL |
Meghatározza a folyamatok rögzítésének helyét. Ebben az esetben numanode értékre állítja, ami azt jelenti, hogy a folyamatok NUMA-tartományok egységeihez vannak rögzítve. |
MV2_SHOW_CPU_BINDING |
Megadja, hogy szeretne-e hibakeresési információkat kapni arról, hogy hol vannak rögzítve a folyamatok. |
MV2_SHOW_HCA_BINDING |
Megadja, hogy szeretne-e hibakeresési információkat kapni arról, hogy az egyes folyamatok melyik gazdagépcsatorna-adaptert használják. |
Telepítse a szükséges csomagokat a platform MPI Community Edition kiadásához.
sudo yum install libstdc++.i686
sudo yum install glibc.i686
Download platform MPI at https://www.ibm.com/developerworks/downloads/im/mpi/index.html
sudo ./platform_mpi-09.01.04.03r-ce.bin
Kövesse a telepítési folyamatot.
Telepítse az UCX-et a fent leírtak szerint. MPICH létrehozása.
wget https://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz
tar -xvf mpich-3.3.tar.gz
cd mpich-3.3
./configure --with-ucx=${UCX_PATH} --prefix=${INSTALL_PREFIX} --with-device=ch4:ucx
make -j 8 && make install
Futtassa az MPICH-t.
${INSTALL_PREFIX}/bin/mpiexec -n 2 -hostfile ~/hostfile -env UCX_IB_PKEY=0x0003 -bind-to hwthread ./osu_latency
Ellenőrizze a partíciókulcsot a fent említett módon.
Töltse le az OSU MPI-teljesítményteszteket , és törölje az elemet.
wget http://mvapich.cse.ohio-state.edu/download/mvapich/osu-micro-benchmarks-5.5.tar.gz
tar –xvf osu-micro-benchmarks-5.5.tar.gz
cd osu-micro-benchmarks-5.5
Teljesítménymutatók készítése egy adott MPI-kódtár használatával:
CC=<mpi-install-path/bin/mpicc>CXX=<mpi-install-path/bin/mpicxx> ./configure
make
Az MPI-teljesítménytesztek mappában mpi/
vannak.
Felderítheti a partíciókulcsokat (p-kulcsokat) az azonos bérlőn belüli más virtuális gépekkel (rendelkezésre állási csoport vagy virtuálisgép-méretezési csoport) való kommunikációhoz.
/sys/class/infiniband/mlx5_0/ports/1/pkeys/0
/sys/class/infiniband/mlx5_0/ports/1/pkeys/1
A kettő közül a nagyobb az MPI-vel használni kívánt bérlőkulcs. Példa: Ha a p-billentyűk a következők, 0x800b kell használni az MPI-vel.
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/0
0x800b
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/1
0x7fff
A megjegyzésillesztők neve mlx5_ib*
HPC virtuálisgép-rendszerképeken belül található.
Azt is vegye figyelembe, hogy amíg a bérlő (rendelkezésre állási csoport vagy virtuálisgép-méretezési csoport) létezik, a PKEY-k változatlanok maradnak. Ez akkor is igaz, ha csomópontokat adnak hozzá/törölnek. Az új bérlők különböző PKEY-ket kapnak.
Állítsa be az MPI felhasználói korlátait.
cat << EOF | sudo tee -a /etc/security/limits.conf
* hard memlock unlimited
* soft memlock unlimited
* hard nofile 65535
* soft nofile 65535
EOF
Állítson be SSH-kulcsokat a szükséges MPI-típusokhoz.
ssh-keygen -f /home/$USER/.ssh/id_rsa -t rsa -N ''
cat << EOF > /home/$USER/.ssh/config
Host *
StrictHostKeyChecking no
EOF
cat /home/$USER/.ssh/id_rsa.pub >> /home/$USER/.ssh/authorized_keys
chmod 600 /home/$USER/.ssh/authorized_keys
chmod 644 /home/$USER/.ssh/config
A fenti szintaxis egy megosztott kezdőkönyvtárat feltételez, máskülönben .ssh
a címtárat minden csomópontra át kell másolni.
- Ismerje meg az InfiniBand által engedélyezett HB- és N-sorozatú virtuális gépeket.
- Tekintse át a HBv3-sorozatok áttekintését és a HC-sorozatok áttekintését.
- Olvassa el a HB sorozatú virtuális gépek optimális MPI-folyamatelhelyezését.
- Az Azure Compute Tech Community blogjaiban tájékozódhat a legújabb bejelentésekről, a HPC számítási feladatokra vonatkozó példáiról és teljesítményeredményeiről.
- A HPC-számítási feladatok futtatásának magasabb szintű architekturális nézetét az Azure nagy teljesítményű számítástechnika (HPC) című témakörben tekintheti meg.