【问题标题】:How do I compile MPI applications on Microsoft Azure (for using RDMA)?如何在 Microsoft Azure 上编译 MPI 应用程序(用于使用 RDMA)?
【发布时间】:2017-10-17 17:50:09
【问题描述】:

我在 Microsoft Azure 上设置了几个支持 RDMA 的 H16R 实例,Intel pingpong 测试运行良好:

mpirun -hosts <host1>,<host2> -ppn 1 -n 2 -env I_MPI_FABRICS=dapl -env I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -env I_MPI_DYNAMIC_CONNECTION=0 IMB-MPI1 pingpong

但是,当我想编译 MPI 应用程序(例如 LAMMPS)时会出现问题。尽管这些 H16R 实例使用英特尔 MPI 进行通信,但微软似乎并未在其 HPC CentOS 7.1 映像中包含英特尔编译器。

所以我安装了 OpenMPI 并使用 mpic++ 编译了 LAMMPS;但是,OpenMPI 的 mpirun 抱怨并且不会运行任何东西。

我真的需要为此任务购买英特尔编译器吗?有没有办法在这些虚拟机上使用 OpenMPI?这对于个人项目来说相当昂贵。

【问题讨论】:

  • 我能够让 LAMMPS 使用 infiniband 在 azure 上工作,但我必须使用 Intel Parallel Studio Cluster 版本。获得适当的许可证需要花费数百万美元,但您最多可以免费注册 1 个月的试用期。请注意,我必须在几个地方调整 lammps 生成文件。

标签: azure mpi intel openmpi hpc


【解决方案1】:

您不需要英特尔编译器即可使用英特尔 MPI。它也适用于 GCC。 IMPI 提供 Intel 特定的编译器封装器(mpiiccmpiicpcmpiifort)和通用编译器封装器(mpiccmpicxxmpif90 等)后者适用于任何兼容的编译器。

为了将mpicxx 用于 LAMMPS,您必须通过在命令行参数中提供它来告诉包装器使用 GCC:

$ mpicxx -cxx=g++ ...

或通过设置I_MPI_CXX 环境变量:

$ export I_MPI_CXX=g++
$ mpicxx ...

这同样适用于 C 和 Fortran 包装器。在不带任何参数的情况下运行它们,您将获得可用于提供实际编译器名称的选项列表。

至于使用替代的 MPI 实现,Azure 提供的虚拟 InfiniBand 适配器似乎缺乏对共享接收队列的支持,并且 Open MPI 不会以其默认配置运行。您可以尝试使用以下mpiexec 选项运行:

--mca btl_openib_receive_queues P,128,256,192,128:P,2048,1024,1008,64:P,12288,1024,1008,64:P‌​,65536,1024,1008,64

这会将所有共享接收队列重新配置为私有队列。我不知道它是否真的有效 - 我无权访问 Azure HPC 实例,这一切都基于来自 this question 的错误消息(不幸的是,OP 没有回应我的询问上述论点是否使 Open MPI 工作)

【讨论】:

  • 这些安装在哪里?默认情况下,它们不在我的 PATH 中,并且执行 find / -name "mpiicc" 也不会显示任何内容。有我应该安装的软件包吗?
  • 在我们的集群上,包装器位于/opt/intel/impi/5.1.3.181/bin64/。根据the documentation,这也是在基于 CentOS 的 VM 上找到 IMPI 的地方。
  • IMPI 目录存在,但是,编译器包装器不存在(仅mpirunmpivars.sh 等)我想它们已从 Azure 提供的 CentOS 7.1 HPC 映像中删除.
  • 听起来只提供了允许运行预编译可执行文件的英特尔 MPI 运行时组件。与 SLES 实例一样,检查是否存在包含 RPM 包的 /opt/intelMPI/intel_mpi_packages/ 目录。如果是这样,也许开发版本就在那里。
猜你喜欢
  • 2017-05-05
  • 2012-03-07
  • 1970-01-01
  • 2017-01-23
  • 2014-06-03
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多