3

我是使用 Microsoft Azure 进行科学计算的新手,在设置时遇到了一些问题。

我有一个跳转盒设置,它充当我想要使用的软件的许可证服务器,还有一个公共驱动器来存储所有软件。还设置了 6 个计算节点(16 个核心/节点),我可以毫无问题地从跳转盒“ssh”到计算节点。跳转盒和计算节点使用 CentOS 和 OpenMPI 1.10.3

我创建了一个脚本,该脚本存储在已安装的跳转盒驱动器上,我通过“clusRun.sh”在每个计算节点上运行该驱动器,它设置了特定于我运行的软件和 OpenMPI 的所有环境变量。希望这一切听起来都很好。

过去我在 Linux 集群上使用过这个软件很多,没有问题。作业是使用类似的命令提交的,例如:

mpirun -np XXX -hostfile XXX {软件路径}

其中 XXX 是处理器的数量和主机文件的路径

我在跳转框上运行这个命令,并且主机文件有一个每个计算节点的名称列表,每个计算节点名称在主机文件中的次数与我想要在节点上的核心相同。希望这是有道理的!跳转框节点上运行的作业没有进程,它仅用于启动作业。

当我尝试以这种方式运行作业时,我收到了许多错误,大多数似乎与 Infiniband 相关。以下是关键错误的简短列表:

"The /dev/hfi1_0 device failed to appear after 15.0 seconds: Connection timed out"

"The OpenFabrics (openib) BTL failed to initialize while trying to create an internal queue"

"OMPI source: btl_openib.c:324
 Function: ibv_create_srq()
 Error: Function not implemented (errno=38)
 Device: mlx4_0"

“至少一对 MPI 进程无法相互进行 MPI 通信。这意味着没有 Open MPI 设备表明它可以用于在这些进程之间进行通信”

是否有任何特定于 OpenMPI 的环境变量需要设置来定义任何 Infiniband 设置?我已经定义了常用的 MPI_BIN、LD_LIBRARY_PATH、PATH 等。我知道 IntelMPI 需要额外的变量。

Infiniband 应该是 A9 HPC 分配的一部分,但我不确定它是否需要任何特定设置。当我运行“ifconfig -a”时,没有特定于 Infiniband 的条目(我希望看到 ib0、ib1 等)。我只有 eth0、eth1 和 lo

我期待有人可能提供的任何建议。

亲切的问候!

4

1 回答 1

3

如daltskin (从已删除/隐藏的 Azure/azure-content-internal派生)在 https://github.com/daltskin/azure-content/页面上的“包含 azure.microsoft.com 文档中心上的文章的存储库”中所述blob/master/articles/virtual-machines/virtual-machines-a8-a9-a10-a11-specs.md#access-to-the-rdma-network “关于 A8、A9、A10 和 A11 计算密集型实例" - "从 Linux A8 和 A9 虚拟机访问"

目前,仅英特尔 MPI 库 5 支持 Azure Linux RDMA。

因此,带有 OpenMPI 1.10.3 的 CentOS 可能无法与 Azure 的这个虚拟化 RDMA 一起使用,因为 OpenMPI 1.10.3 不是“英特尔 MPI 库 5”。

在官方文档中,Azure 也将英特尔 MPI 列为启用 RDMA(使用 SLES 12 SP1 HPC VM): https ://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/rdma-cluster “设置建立一个 Linux RDMA 集群来运行 MPI 应用程序” - 2017-3-14

自定义虚拟机

在 SLES 12 SP1 HPC VM 中,我们建议您不要应用内核更新,这可能会导致 Linux RDMA 驱动程序出现问题。Intel MPI:通过运行以下命令在 SLES 12 SP1 HPC VM 上完成 Intel MPI 的安装:

 sudo rpm -v -i --nodeps /opt/intelMPI/intel_mpi_packages/*.rpm

如果要基于 Azure Marketplace 中基于 CentOS 的 HPC 映像之一而不是 SLES 12 for HPC 设置集群,请按照上一节中的一般步骤进行操作。预配和配置 VM 时请注意以下差异: Intel MPI 已安装在从基于 CentOS 的 HPC 映像预配的 VM 上。

因此,有 Azure 虚拟 RDMA (Infiniband) 的专有内核驱动程序,预装到 Azure 的 SLES 12 VM 映像和 Azure 的 CentOS VM 映像,还有专有的用户空间驱动程序(因为 Infiniband 通常使用内核绕过并与来自用于数据移动操作的用户空间)仅在英特尔 MPI 中。

尝试使用预安装的英特尔 MPI 重新编译您的应用程序,并使用英特尔 MPI 的 mpirun/mpiexec 启动它。说明仍在同一https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/rdma-cluster上:

配置英特尔 MPI 要在 Azure Linux RDMA 上运行 MPI 应用程序,您需要配置特定于英特尔 MPI 的某些环境变量。这是一个示例 Bash 脚本,用于配置运行应用程序所需的变量。mpivars.sh根据安装英特尔 MPI 的需要将路径更改为。

#!/bin/bash -x

# For a SLES 12 SP1 HPC cluster

source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh

# For a CentOS-based HPC cluster

# source /opt/intel/impi/5.1.3.181/bin64/mpivars.sh

export I_MPI_FABRICS=shm:dapl

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB
# Setting the variable to shm:dapl gives best performance for some applications
# If your application doesn’t take advantage of shared memory and MPI together, then set only dapl

export I_MPI_DAPL_PROVIDER=ofa-v2-ib0

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB

export I_MPI_DYNAMIC_CONNECTION=0

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB

# Command line to run the job

mpirun -n <number-of-cores> -ppn <core-per-node> -hostfile <hostfilename>  /path <path to the application exe> <arguments specific to the application>

#end
于 2017-04-27T23:41:19.453 回答