選取正確的 MPI 程式庫

已完成

HB120_v2、HB60 與 HC44 SKU 都支援 InfiniBand 網路互連。 因為 PCI Express 透過單一根目錄輸入/輸出 (SR-IOV) 虛擬化進行虛擬,所以所有熱門的 MPI 程式庫 (HPCX、OpenMPI、Intel MPI、MVAPICH 與 MPICH) 都可在這些 HPC VM 上使用。

目前可透過 InfiniBand 進行通訊的 HPC 叢集數目上限為 300 部 VM。 下表列出平行處理序 (受利用 InfiniBand 進行通訊的緊密結合之 MPI 應用程式的支援) 數目上限。

SKU 平行處理序上限
HB120_v2 36,000 個處理序
HC44 13,200 個處理序
HB60 18,000 個處理序

注意

這些限制未來可能會有所變動。 若您有緊密結合的 MPI 作業,需要較高的限制,請提交支援要求。 可能可以針對您的情況,提高限制。

若 HPC 應用程式建議使用特定的 MPI 程式庫,請先嘗試使用該版本。 若您對於選擇哪個 MPI 有些許的彈性,而且想要獲取最佳效能,請嘗試使用 HPCX。 整體來說,為 InfiniBand 介面使用 UCX 架構,同時利用所有 Mellanox InfiniBand 硬體與軟體功能的情況下,HPCX MPI 的執行效能最佳。

下圖比較熱門的 MPI 程式庫架構。

熱門 MPI 結構的圖表。

HPCX 及 OpenMPI 可與 ABI 相容,因此您可以使用 OpenMPI 所建置的 HPCX,以動態方式執行 HPC 應用程式。 同樣地,Intel MPI、MVAPICH 及 MPICH 都可與 ABI 相容。

客體 VM 無法存取成對的佇列組 0,以避免透過低層級硬體存取,而發生任何安全性弱點。 如此並不會對終端使用者的 HPC 應用程式造成任何影響,但可能會導致某些低層級的工具無法正常運作。

HPCX 與 OpenMPI 的 mpirun 引數

下列命令說明對 HPCX 與 OpenMPI 建議的一些 mpirun 引數:

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

在該命令中:

參數 描述
$NPROCS 指定 MPI 處理序的數目。 例如: -n 16
$HOSTFILE 指定包含主機名稱或 IP 位址的檔案,以指出 MPI 流程執行的位置。 例如: --hostfile hosts
$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 編譯器包裝函式會自動進行此作業。 例如:mpiccmpif90

若您懷疑緊密結合的 MPI 應用程式正在進行大量的集體通訊,可嘗試啟用階層集體 (HCOLL)。 若要啟用這些功能,請使用下列參數:

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

Intel MPI mpirun 引數

Intel MPI 2019 版本從 OpenFabrics Alliance (OFA) 架構切換為 OpenFabrics Interfaces (OFI) 架構,且目前支援 Libfabric。 InfiniBand 支援有兩個提供者:mlx 與 verbs。 對 HB 與 HC VM 來說,較適合使用提供者 mlx。

以下是為 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

在這些引數中:

參數 描述
FI_PROVIDER 指定要使用的 libfabric 提供者,其會影響使用的 API、通訊協定與網路。 verbs 是另一個選項,但通常 mlx 的效能較佳。
I_MPI_DEBUG 指定額外的偵錯輸出層級,如此可提供有關處理序固定之處的詳細資料,以及使用的通訊協定與網路。
I_MPI_PIN_DOMAIN 指定應該如何固定您的處理序。 例如,可以固定到核心、通訊端或 NUMA 網域。 在此範例中,您會將此環境變數設定為 numa,這表示處理序會固定至 NUMA 節點網域。

還有一些您可以嘗試的其他選項,特別是當集體運算耗用大量時間的情況時。 Intel MPI 2019 Update 5+ 支援提供者 MLX,同時使用 UCX 架構與 InfiniBand 進行通訊。 其也支援 HCOLL。

export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1

MVAPICH mpirun 引數

下列清單包含建議的數個 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

在這些引數中:

參數 描述
MV2_CPU_BINDING_POLICY 指定要使用的繫結原則,其會影響如何將處理序固定至核心識別碼。 在此情況下,您指定了 scatter,讓流程在 NUMA 網域之間平均散佈。
MV2_CPU_BINDING_LEVEL 指定要固定處理序的位置。 在此情況下,您將其設定為 numanode,這表示處理序會固定至 NUMA 網域的單位。
MV2_SHOW_CPU_BINDING 指定是否要取得有關處理序固定位置的偵錯資訊。
MV2_SHOW_HCA_BINDING 指定是否要取得每個處理序所使用之主機通道介面卡的相關偵錯資訊。