HPC için İleti Geçirme Arabirimi'ni ayarlama
Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Windows VM'leri ✔️ Esnek ölçek kümeleri ✔️ Tekdüzen ölçek kümeleri
İleti Geçirme Arabirimi (MPI), dağıtılmış bellek paralelleştirmesi için açık bir kitaplık ve defacto standardıdır. Yaygın olarak birçok HPC iş yükünde kullanılır. RDMA özellikli HB serisi ve N serisi VM'lerdeki HPC iş yükleri, düşük gecikme süresi ve yüksek bant genişliğine sahip InfiniBand ağı üzerinden iletişim kurmak için MPI kullanabilir.
- Azure'da SR-IOV özellikli VM boyutları, Mellanox OFED ile neredeyse tüm MPI türlerinin kullanılmasına olanak sağlar.
- SR-IOV özellikli olmayan VM'lerde, desteklenen MPI uygulamaları VM'ler arasında iletişim kurmak için Microsoft Ağ Doğrudan (ND) arabirimini kullanır. Bu nedenle yalnızca Microsoft MPI (MS-MPI) 2012 R2 veya üstü ve Intel MPI 5.x sürümleri desteklenir. Intel MPI çalışma zamanı kitaplığının sonraki sürümleri (2017, 2018) Azure RDMA sürücüleriyle uyumlu olabilir veya olmayabilir.
SR-IOV özellikli RDMA özellikli VM'ler için Ubuntu-HPC VM görüntüleri ve AlmaLinux-HPC VM görüntüleri uygundur. Bu VM görüntüleri, RDMA ve yaygın olarak kullanılan çeşitli MPI kitaplıkları ve bilimsel bilgi işlem paketleri için OFED sürücüleriyle iyileştirilmiş ve önceden yüklenmiş olarak gelir ve kullanmaya başlamanın en kolay yoludur.
Buradaki örnekler RHEL için olsa da, adımlar geneldir ve Ubuntu (18.04, 20.04, 22.04) ve SLES (12 SP4 ve 15 SP4) gibi uyumlu herhangi bir Linux işletim sistemi için kullanılabilir. Diğer dağıtımlarda diğer MPI uygulamalarını ayarlamaya yönelik diğer örnekler azhpc-images deposundadır.
Not
SR-IOV özellikli VM'lerde belirli MPI kitaplıklarıyla (Platform MPI gibi) MPI işlerini çalıştırmak, yalıtım ve güvenlik için bir kiracı genelinde bölüm anahtarlarının (p anahtarları) ayarlanmasını gerektirebilir. p-key değerlerini belirleme ve bu MPI kitaplığıyla bir MPI işi için doğru şekilde ayarlama hakkında ayrıntılı bilgi için Bölüm anahtarlarını bulma bölümündeki adımları izleyin.
Not
Aşağıdaki kod parçacıkları örnek olarak verilmiştir. Paketlerin en son kararlı sürümlerini kullanmanızı veya azhpc-images deposuna başvurmanızı öneririz.
MPI kitaplığı seçme
Bir HPC uygulaması belirli bir MPI kitaplığı önerirse, önce bu sürümü deneyin. Seçebileceğiniz MPI ile ilgili esnekliğiniz varsa ve en iyi performansı istiyorsanız HPC-X'i deneyin. Genel olarak HPC-X MPI, InfiniBand arabirimi için UCX çerçevesini kullanarak en iyi performansı gösterir ve tüm Mellanox InfiniBand donanım ve yazılım özelliklerinden yararlanır. Buna ek olarak, HPC-X ve OpenMPI ABI uyumlu olduğundan, OpenMPI ile oluşturulmuş HPC-X ile bir HPC uygulamasını dinamik olarak çalıştırabilirsiniz. Benzer şekilde, Intel MPI, MVAPICH ve MPICH ABI ile uyumludur.
Aşağıdaki şekilde popüler MPI kitaplıklarının mimarisi gösterilmektedir.
HPC-X
HPC-X yazılım araç seti UCX ve HCOLL içerir ve UCX'e karşı oluşturulabilir.
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
Aşağıdaki komut, HPC-X ve OpenMPI için önerilen bazı mpirun bağımsız değişkenlerini gösterir.
mpirun -n $NPROCS --hostfile $HOSTFILE --map-by ppr:$NUMBER_PROCESSES_PER_NUMA:numa:pe=$NUMBER_THREADS_PER_PROCESS -report-bindings $MPI_EXECUTABLE
konumu:
Parametre | Açıklama |
---|---|
NPROCS |
MPI işlemlerinin sayısını belirtir. Örneğin: -n 16 . |
$HOSTFILE |
MPI işlemlerinin çalıştığı konumu belirtmek için konak adını veya IP adresini içeren bir dosya belirtir. Örneğin: --hostfile hosts . |
$NUMBER_PROCESSES_PER_NUMA |
Her NUMA etki alanında çalışan MPI işlemlerinin sayısını belirtir. Örneğin, NUMA başına dört MPI işlemi belirtmek için kullanırsınız --map-by ppr:4:numa:pe=1 . |
$NUMBER_THREADS_PER_PROCESS |
MPI işlemi başına iş parçacığı sayısını belirtir. Örneğin, NUMA başına bir MPI işlemi ve dört iş parçacığı belirtmek için kullanırsınız --map-by ppr:1:numa:pe=4 . |
-report-bindings |
Çekirdeklerle eşlenen MPI işlemlerini yazdırır. Bu, MPI işlem sabitlemenizin doğru olduğunu doğrulamak için kullanışlıdır. |
$MPI_EXECUTABLE |
MPI kitaplıklarında yerleşik MPI yürütülebilir bağlantısını belirtir. MPI derleyici sarmalayıcıları bunu otomatik olarak yapar. Örneğin: mpicc veya mpif90 . |
OSU gecikme süresi mikrobenchmark'ını çalıştırma örneği aşağıdaki gibidir:
${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
MPI kollektiflerini iyileştirme
MPI Kolektif iletişim ilkelleri, grup iletişimi işlemlerini uygulamak için esnek, taşınabilir bir yol sunar. Bunlar çeşitli bilimsel paralel uygulamalarda yaygın olarak kullanılır ve genel uygulama performansı üzerinde önemli bir etkiye sahiptir. Toplu iletişim için HPC-X ve HCOLL kitaplığını kullanarak toplu iletişim performansını iyileştirmeye yönelik yapılandırma parametreleriyle ilgili ayrıntılar için TechCommunity makalesine bakın.
Örneğin, sıkı bir şekilde bağlanmış MPI uygulamanızın aşırı miktarda kolektif iletişim gerçekleştirdiğini düşünüyorsanız hiyerarşik kolektifleri (HCOLL) etkinleştirmeyi deneyebilirsiniz. Bu özellikleri etkinleştirmek için aşağıdaki parametreleri kullanın.
-mca coll_hcoll_enable 1 -x HCOLL_MAIN_IB=<MLX device>:<Port>
Not
HPC-X 2.7.4+ ile, MOFED'deki UCX sürümü ile HPC-X'teki UCX sürümü farklıysa LD_LIBRARY_PATH açıkça geçirmek gerekebilir.
OpenMPI
Yukarıda açıklandığı gibi UCX'i yükleyin. HCOLL, HPC-X yazılım araç setinin bir parçasıdır ve özel yükleme gerektirmez.
OpenMPI, depoda bulunan paketlerden yüklenebilir.
sudo yum install –y openmpi
UCX ile OpenMPI'nin en son ve kararlı sürümünü oluşturmanızı öneririz.
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
En iyi performans için ve hcoll
ile ucx
OpenMPI'yi çalıştırın. Ayrıca BKZ. HPC-X ile ilgili örnek.
${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
Yukarıda belirtildiği gibi bölüm anahtarınızı denetleyin.
Intel MPI
Intel MPI sürümünü seçtiğiniz sürümü indirin. Intel MPI 2019 sürümü, Open Fabrics Alliance (OFA) çerçevesinden Open Fabrics Arabirimleri (OFI) çerçevesine geçti ve şu anda libfabric'i destekliyor. InfiniBand desteği için iki sağlayıcı vardır: mlx ve fiiller. sürüme bağlı olarak I_MPI_FABRICS ortam değişkenini değiştirin.
- Intel MPI 2019 ve 2021: kullanın
I_MPI_FABRICS=shm:ofi
.I_MPI_OFI_PROVIDER=mlx
Sağlayıcımlx
UCX kullanır. Fiillerin kullanımının kararsız ve daha az performanslı olduğu bulunmuştur. Daha fazla ayrıntı için TechCommunity makalesine bakın. - Intel MPI 2018: use
I_MPI_FABRICS=shm:ofa
- Intel MPI 2016: use
I_MPI_DAPL_PROVIDER=ofa-v2-ib0
Intel MPI 2019 güncelleştirme 5+ için önerilen bazı mpirun bağımsız değişkenleri aşağıdadır.
export FI_PROVIDER=mlx
export I_MPI_DEBUG=5
export I_MPI_PIN_DOMAIN=numa
mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE
konumu:
Parametre | Açıklama |
---|---|
FI_PROVIDER |
Kullanılacak libfabric sağlayıcısını belirtir; bu, kullanılacak API'yi, protokolü ve ağı etkiler. fiiller başka bir seçenektir, ancak genellikle mlx size daha iyi performans sağlar. |
I_MPI_DEBUG |
İşlemlerin nereye sabitlendiği ve hangi protokol ve ağın kullanıldığı hakkında ayrıntılı bilgi sağlayabilecek ek hata ayıklama çıktısı düzeyini belirtir. |
I_MPI_PIN_DOMAIN |
İşlemlerinizi nasıl sabitlemek istediğinizi belirtir. Örneğin, çekirdeklere, yuvalara veya NUMA etki alanlarına sabitleyebilirsiniz. Bu örnekte, bu ortam değişkenini numa olarak ayarlarsınız; bu da işlemlerin NUMA düğüm etki alanlarına sabitlendiği anlamına gelir. |
MPI kollektiflerini iyileştirme
Özellikle kolektif işlemler önemli miktarda zaman alıyorsa deneyebileceğiniz başka seçenekler de vardır. Intel MPI 2019 güncelleştirme 5+, mlx sağlamayı destekler ve InfiniBand ile iletişim kurmak için UCX çerçevesini kullanır. Ayrıca HCOLL'i de destekler.
export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1
SR-IOV olmayan VM'ler
SR-IOV olmayan VM'ler için 5.x çalışma zamanı ücretsiz değerlendirme sürümünü indirme örneği aşağıdaki gibidir:
wget http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz
Yükleme adımları için bkz . Intel MPI Kitaplığı Yükleme Kılavuzu. İsteğe bağlı olarak, kök olmayan hata ayıklayıcı olmayan işlemler (Intel MPI'nin en son sürümleri için gereklidir) için ptrace'i etkinleştirmek isteyebilirsiniz.
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
SUSE Linux
SUSE Linux Enterprise Server VM görüntü sürümleri için - HPC için SLES 12 SP3, HPC için SLES 12 SP3 (Premium), HPC için SLES 12 SP1, HPC için SLES 12 SP1 (Premium), SLES 12 SP4 ve SLES 15 için RDMA sürücüleri yüklenir ve Intel MPI paketleri VM'ye dağıtılır. Aşağıdaki komutu çalıştırarak Intel MPI'yi yükleyin:
sudo rpm -v -i --nodeps /opt/intelMPI/intel_mpi_packages/*.rpm
MVAPICH
Aşağıda, MVAPICH2 oluşturma örneği verilmiştir. Aşağıda kullanılandan daha yeni sürümlerin kullanılabilebileceğini unutmayın.
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
OSU gecikme süresi mikrobenchmark'ını çalıştırma örneği aşağıdaki gibidir:
${INSTALL_PREFIX}/bin/mpirun_rsh -np 2 -hostfile ~/hostfile MV2_CPU_MAPPING=48 ./osu_latency
Aşağıdaki listede önerilen mpirun
birkaç bağımsız değişken bulunur.
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
konumu:
Parametre | Açıklama |
---|---|
MV2_CPU_BINDING_POLICY |
Hangi bağlama ilkesinin kullanılacağını belirtir. Bu ilke, işlemlerin çekirdek kimliklere nasıl sabitlendiğini etkiler. Bu durumda, öğesini belirtirsiniz scatter , bu nedenle işlemler NUMA etki alanları arasında eşit bir şekilde dağılır. |
MV2_CPU_BINDING_LEVEL |
İşlemlerin nereye sabitlenmiş olduğunu belirtir. Bu durumda, işlemlerin NUMA etki alanı birimlerine sabitlendiği anlamına gelen numanode olarak ayarlarsınız. |
MV2_SHOW_CPU_BINDING |
İşlemlerin sabitlendiği yerle ilgili hata ayıklama bilgilerini almak isteyip istemediğinizi belirtir. |
MV2_SHOW_HCA_BINDING |
Her işlemin hangi konak kanalı bağdaştırıcısını kullandığı hakkında hata ayıklama bilgileri almak isteyip istemediğinizi belirtir. |
Platform MPI'sı
Platform MPI Community Edition için gerekli paketleri yükleyin.
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
Yükleme işlemini izleyin.
MPICH
Yukarıda açıklandığı gibi UCX'i yükleyin. MPICH oluşturun.
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
MPICH çalıştırılıyor.
${INSTALL_PREFIX}/bin/mpiexec -n 2 -hostfile ~/hostfile -env UCX_IB_PKEY=0x0003 -bind-to hwthread ./osu_latency
Yukarıda belirtildiği gibi bölüm anahtarınızı denetleyin.
OSU MPI Karşılaştırmaları
OSU MPI Benchmarks ve untar'ı indirin.
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
Belirli bir MPI kitaplığını kullanarak Karşılaştırmalar oluşturun:
CC=<mpi-install-path/bin/mpicc>CXX=<mpi-install-path/bin/mpicxx> ./configure
make
MPI Karşılaştırmaları klasörün altındadır mpi/
.
Bölüm anahtarlarını bulma
Aynı kiracıdaki diğer VM'lerle (Kullanılabilirlik Kümesi veya Sanal Makine Ölçek Kümesi) iletişim kurmak için bölüm anahtarlarını (p anahtarları) keşfedin.
/sys/class/infiniband/mlx5_0/ports/1/pkeys/0
/sys/class/infiniband/mlx5_0/ports/1/pkeys/1
İkisinin büyük kısmı MPI ile kullanılması gereken kiracı anahtarıdır. Örnek: Aşağıdakiler p anahtarlarıysa, MPI ile 0x800b kullanılmalıdır.
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/0
0x800b
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/1
0x7fff
Not arabirimleri, HPC VM görüntülerinin içinde olarak mlx5_ib*
adlandırılır.
Ayrıca kiracı (Kullanılabilirlik Kümesi veya Sanal Makine Ölçek Kümesi) mevcut olduğu sürece PKEY'lerin aynı kaldığına da dikkat edin. Düğümler eklendiğinde/silindiğinde bile bu durum geçerlidir. Yeni kiracılar farklı PKEY'ler alır.
MPI için kullanıcı sınırlarını ayarlama
MPI için kullanıcı sınırları ayarlayın.
cat << EOF | sudo tee -a /etc/security/limits.conf
* hard memlock unlimited
* soft memlock unlimited
* hard nofile 65535
* soft nofile 65535
EOF
MPI için SSH anahtarlarını ayarlama
Bunu gerektiren MPI türleri için SSH anahtarlarını ayarlayın.
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
Yukarıdaki söz diziminde paylaşılan bir giriş dizini olduğu varsayılır; aksi halde .ssh
dizinin her düğüme kopyalanması gerekir.
Sonraki adımlar
- InfiniBand özellikli HB serisi ve N serisi VM'ler hakkında bilgi edinin.
- HBv3 serisine genel bakış ve HC serisine genel bakış'ı gözden geçirin.
- HB serisi VM'ler için en uygun MPI işlem yerleşimi makalesini okuyun.
- Azure compute Tech Community Bloglarında en son duyurular, HPC iş yükü örnekleri ve performans sonuçları hakkında bilgi edinin.
- Çalışan HPC iş yüklerinin daha yüksek düzeyde mimari görünümü için bkz . Azure'da Yüksek Performanslı Bilgi İşlem (HPC).