適用於:
✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集
訊息傳遞介面 (MPI)
為開放程式庫,也是分散式記憶體平行處理的業界標準。 該介面廣泛運用於許多 HPC 工作負載。 支援
HB 系列
和
N 系列
VM 的
RDMA
工作負載可以使用 MPI 透過低延遲和高頻寬 InfiniBand 網路進行通訊。
在 Azure 上啟用 SR-IOV 的 VM 大小,幾乎可搭配任何類型的 MPI 使用 Mellanox OFED。
在未啟用 SR-IOV 的 VM 上,支援的 MPI 實作則使用 Microsoft Network Direct (ND) 介面在 VM 之間通訊。 因此,僅支援 Microsoft MPI (MS-MPI) 2012 R2 以上版本和 Intel MPI 5.x 版本。 Intel MPI 執行階段程式庫的較新版本 (2017 和 2018) 可能與 Azure RDMA 驅動程式不相容。
若
支援 RDMA 的 VM
已啟用 SR-IOV,則適用
CentOS-HPC VM 映像
7.6 及更高版本。 這些 VM 映像會隨 RDMA 的 OFED 驅動程式最佳化並預先載入,最簡單的入門方式則是使用各種常用的 MPI 程式庫及科學運算套件。
此處雖為 RHEL/CentOS 範例,但屬於一般步驟,且可用於任何相容的 Linux 作業系統,例如 Ubuntu (16.04、18.04 19.04、20.04) 和 SLES (12 SP4 和 15)。 如需在其他發行版本上設定其他 MPI 實作的更多範例,請參閱
azhpc-images 存放庫
。
若在啟用 SR-IOV 的 VM 上以特定 MPI 程式庫 (如 Platform MPI) 執行 MPI 作業,則可能需要在租用戶之間設定分割區索引鍵 (p 索引鍵),以達到隔離及安全性。 如需了解判斷 p 索引鍵值、使用該 MPI 程式庫正確設定 MPI 作業值的詳細資料,請遵循
探索分割區索引鍵
區段中的步驟。
程式碼片段範例如下。 建議使用套件的最新穩定版本,或參考
azhpc-images 存放庫
。
選擇 MPI 程式庫
若 HPC 應用程式建議使用特定的 MPI 程式庫,請先嘗試使用該版本。 若 MPI 的選擇有彈性空間,且要取得最佳效能,可嘗試使用 HPC-X。 整體而言,為 InfiniBand 介面使用 UCX 架構時 HPC-X MPI 的執行效能最佳,且可充份善用 Mellanox InfiniBand 硬體與軟體功能。 此外,HPC-X 及 OpenMPI 也與 ABI 相容,因此您可使用 OpenMPI 所建置的 HPC-X,以動態方式執行 HPC 應用程式。 同樣地,Intel MPI、MVAPICH 及 MPICH 都可與 ABI 相容。
下圖說明常用 MPI 程式庫的架構。
整合通訊 X (UCX)
為 HPC 的通訊 API 架構。 該架構已對透過 InfiniBand 的 MPI 通訊進行最佳化,並適用於許多 MPI 實作狀況,例如 OpenMPI 和 MPICH。
wget https://github.com/openucx/ucx/releases/download/v1.4.0/ucx-1.4.0.tar.gz
tar -xvf ucx-1.4.0.tar.gz
cd ucx-1.4.0
./configure --prefix=<ucx-install-path>
make -j 8 && make install
近期 UCX 組建已修正問題:有多個 NIC 介面存在時,將會選擇適當的 InfiniBand 介面。 如需了解 VM 啟用加速網路時透過 InfiniBand 執行 MPI 的詳細資訊,請參閱 HPC 和 GPU VM 已知問題疑難排解。
HPC-X
HPC-X 軟體工具組包含 UCX 和 HCOLL,且可針對 UCX 建置。
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
下列命令說明 HPCX 與 OpenMPI 的幾個建議引數。
mpirun -n $NPROCS --hostfile $HOSTFILE --map-by ppr:$NUMBER_PROCESSES_PER_NUMA:numa:pe=$NUMBER_THREADS_PER_PROCESS -report-bindings $MPI_EXECUTABLE
Description
$NUMBER_PROCESSES_PER_NUMA
指定將在每個 NUMA 網域中執行的 MPI 處理序數目。 例如,若要為每個 NUMA 指定四個 MPI 處理序,可使用 --map-by ppr:4:numa:pe=1。
$NUMBER_THREADS_PER_PROCESS
指定每個 MPI 處理序的執行緒數目。 例如,若要為每個 NUMA 指定一個 MPI 處理序與四個執行緒,可使用 --map-by ppr:1:numa:pe=4。
-report-bindings
列印對應至核心的 MPI 處理序,如此有助於確認固定 MPI 處理序正確無誤。
$MPI_EXECUTABLE
指定在 MPI 程式庫中已建置連結的 MPI 可執行檔。 MPI 編譯器包裝函式會自動進行此作業。 例如:mpicc 或 mpif90。
執行 OSU 延遲微基準測試的範例如下:
${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 集合
「MPI 集合」通訊基本系列可為群組通訊作業提供一種可攜式、高彈性的實作方式。 這可廣泛用於各類科學平行應用程式,且對整體應用程式效能有重大影響。 請參閱 TechCommunity 一文,了解進行集合通訊時使用 HPC-X 和 HCOLL 程式庫的組態參數詳細資料,以最佳化集合通訊效能。
例如,若您懷疑緊密結合的 MPI 應用程式正在進行大量的集體通訊,可嘗試啟用階層集體 (HCOLL)。 若要啟用這些功能,請使用下列參數。
-mca coll_hcoll_enable 1 -x HCOLL_MAIN_IB=<MLX device>:<Port>
使用 HPC-X 2.7.4+ 時,若 MOFED 上的 UCX 版本與 HPC-X 的版本不同,則可能須明確傳遞 LD_LIBRARY_PATH。
OpenMPI
依上述安裝 UCX。 HCOLL 屬於 HPC-X 軟體工具組 的一部分,無須特殊安裝。
OpenMPI 可從存放庫的可用封裝進行安裝。
sudo yum install –y openmpi
建議使用 UCX 建置穩定的最新 OpenMPI 版本。
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
若要獲得最佳效能,請使用 ucx 和 hcoll 執行 OpenMPI。 另請參閱 HPC-X 範例。
${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
依上述檢查分割區索引鍵。
Intel MPI
下載您選擇的 Intel MPI 版本。 Intel MPI 2019 版本從 OpenFabrics Alliance (OFA) 架構切換為 OpenFabrics Interfaces (OFI) 架構,且目前支援 Libfabric。 InfiniBand 支援有兩個提供者:mlx 與 verbs。
視版本變更 I_MPI_FABRICS 環境變數。
Intel MPI 2019 和 2021:使用 I_MPI_FABRICS=shm:ofi、I_MPI_OFI_PROVIDER=mlx。 mlx 提供者使用 UCX。 使用 verbs 已證實不穩定且效能較低。 如需詳細資訊,請參閱 TechCommunity 一文。
Intel MPI 2018:使用 I_MPI_FABRICS=shm:ofa
Intel MPI 2016:使用 I_MPI_DAPL_PROVIDER=ofa-v2-ib0
Intel MPI 2019 Update 5+ 建議使用以下幾個 mpirun 引數。
export FI_PROVIDER=mlx
export I_MPI_DEBUG=5
export I_MPI_PIN_DOMAIN=numa
mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE
最佳化 MPI 集合
還有一些您可以嘗試的其他選項,特別是當集體運算耗用大量時間的情況時。 Intel MPI 2019 Update 5+ 支援提供者 MLX,同時使用 UCX 架構與 InfiniBand 進行通訊。 其也支援 HCOLL。
export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1
非 SR-IOV VM
針對非 SR-IOV VM,下載 5.x 執行階段免費評估版本的範例如下所示:
wget http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz
如需安裝步驟,請參閱 Intel MPI Library 安裝指南 \(英文\)。
此外,您也可能希望針對非根、非偵錯工具的處理序啟用 ptrace (Intel MPI 最新版本所需)。
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
SUSE Linux
針對 SUSE Linux Enterprise Server VM 映像版本 - SLES 12 SP3 for HPC、SLES 12 SP3 for HPC (進階版)、SLES 12 SP1 for HPC (進階版)、SLES 12 SP4 和 SLES 15:RDMA 驅動程式會安裝於 VM,且 Intel MPI 套件會散佈至 VM。 執行下列命令以安裝 Intel MPI:
sudo rpm -v -i --nodeps /opt/intelMPI/intel_mpi_packages/*.rpm
MVAPICH
以下為建置 MVAPICH2 的範例。 請注意,可能有比下列所用更新的版本。
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 延遲微基準測試的範例如下:
${INSTALL_PREFIX}/bin/mpirun_rsh -np 2 -hostfile ~/hostfile MV2_CPU_MAPPING=48 ./osu_latency
下列清單包含建議的數個 mpirun 引數。
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
安裝 Platform MPI Community Edition 的必要套件。
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
請遵循安裝流程。
下列命令範例示範如何使用 CentOS-HPC 7.6、7.8 和 8.1 VM 映像,在 HBv3 VM 上使用 Platform MPI 執行 MPI pingpong 和 allreduce。
/opt/ibm/platform_mpi/bin/mpirun -hostlist 10.0.0.8:1,10.0.0.9:1 -np 2 -e MPI_IB_PKEY=0x800a -ibv /home/jijos/mpi-benchmarks/IMB-MPI1 pingpong
/opt/ibm/platform_mpi/bin/mpirun -hostlist 10.0.0.8:120,10.0.0.9:120 -np 240 -e MPI_IB_PKEY=0x800a -ibv /home/jijos/mpi-benchmarks/IMB-MPI1 allreduce -npmin 240
MPICH \(英文\)
依上述安裝 UCX。 建置 MPICH。
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。
${INSTALL_PREFIX}/bin/mpiexec -n 2 -hostfile ~/hostfile -env UCX_IB_PKEY=0x0003 -bind-to hwthread ./osu_latency
依上述檢查分割區索引鍵。
OSU MPI 基準測試
下載 OSU MPI 基準測試並解壓縮。
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
使用特定 MPI 程式庫建置基準測試:
CC=<mpi-install-path/bin/mpicc>CXX=<mpi-install-path/bin/mpicxx> ./configure
MPI 基準位於 mpi/ 資料夾。
探索分割區索引鍵
探索分割區索引鍵 (p 索引鍵),以便與相同租用戶 (可用性設定組或虛擬機器擴展集) 中的其他 VM 通訊。
/sys/class/infiniband/mlx5_0/ports/1/pkeys/0
/sys/class/infiniband/mlx5_0/ports/1/pkeys/1
兩者其中較大的為租用戶金鑰,且應搭配使用 MPI。 範例:若下列為 p 索引鍵,則應搭配 MPI 使用 0x800b。
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/0
0x800b
cat /sys/class/infiniband/mlx5_0/ports/1/pkeys/1
0x7fff
使用預設 (0x7fff) 分割區索引鍵以外的資料分割。 UCX 必須清除 p 索引鍵的 MSB。 例如,將 0x800b 的 UCX_IB_PKEY 設為 0x000b。
另請注意,只要租用戶 (可用性設定組或虛擬機器擴展集) 存在,PKEY 便維持不變。 即使節點已新增/刪除也是如此。 新租用戶會取得不同的 PKEY。
設定 MPI 的使用者限制
設定 MPI 的使用者限制。
cat << EOF | sudo tee -a /etc/security/limits.conf
* hard memlock unlimited
* soft memlock unlimited
* hard nofile 65535
* soft nofile 65535
設定 MPI 的 SSH 金鑰
設定 MPI 類型所需的 SSH 金鑰。
ssh-keygen -f /home/$USER/.ssh/id_rsa -t rsa -N ''
cat << EOF > /home/$USER/.ssh/config
Host *
StrictHostKeyChecking no
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
上述語法會假設共用主目錄,否則 .ssh 目錄須複製至各節點。
瞭解 已啟用 InfiniBand的 HB 系列 和 N 系列 VM
檢閱 HBv3 系列概觀和 HC 系列概觀。
閱讀 HB 系列 VM 的 MPI 處理序最佳位置。
請參閱 Azure 計算技術社群部落格的最新公告、HPC 工作負載範例和效能結果。
如需執行中 HPC 工作負載較高階的架構檢視,請參閱 Azure 上的高效能運算 (HPC)。