hwloc + lstopo 无法在 Dual-CPU 机器上为 Open-MPI 生成拓扑

hwloc + lstopo Failing to Generate Topology on Dual-CPU Machine for Open-MPI

我一直在尝试使用 openmpi 2.1.1-8(预装在 Ubuntu 18.04) 但是它无法 运行 并出现以下错误:

mpirun: pci-common.c:125: hwloc_pci_compare_busids: Assertion `0' failed.

检查 pci-common.c 的源代码,您可以在 assert(0) 行之前找到一条注释,该注释说明通常情况下什么都不应该达到这一点,并将中止所有调试和非调试构建。尝试通过 lstopo(hwloc 中的程序)生成系统拓扑图也失败并出现类似错误。

我能够在本地编译较新版本的 hwloc(2.0.4 与预装的 1.11.9-1 相比),发现当我编译 hwloc 时我只能让 lstopo 生成拓扑图使用libpciaccess-dev 在预装的标准 libpciaccess0 之上。使用不同 pciaccess 库制作 hwloc 的摘要输出显示以下结果

Probe / display I/O devices: PCI(linux) LinuxIO GL

Probe / display I/O devices: PCI(pciaccess+linux) LinuxIO GL

前者使用 libpciaccess0 编译,后者使用 libpciaccess-dev 编译。同样,后者是唯一能够生成系统拓扑图的工具,我的印象是 openmpi 需要此信息才能正确分散系统上的作业。我目前不确定如何将这些版本更改强制执行到当前的 openmpi 包,或者是否需要完全从源代码编译。是否有更简单的方法来解决这个问题?

通过反复试验解决了问题。首先,通过以下方式从系统中清除 openmpi 的安装(如果通过 apt 安装):

sudo apt purge openmpi-bin
sudo apt purge openmpi-common

然后,从 https://www.open-mpi.org/software/hwloc/v1.11/ 下载 hwloc 1.11.13(超稳定)并解压到本地目录。进入hwloc目录,在命令行输入:

./configure
make
sudo make install

完成后,安装 libhwloc5,然后从 apt 安装 openmpi:

sudo apt-get install libhwloc5
sudo apt-get install openmpi-bin
sudo apt-get install openmpi-common

Open-MPI 现在应该 运行 如预期的那样,您应该能够通过 运行ning 'lstopo' 生成系统拓扑并确保 mpi 通过 运行ning 正常工作'mpirun' 没有错误。

希望这对以后遇到类似问题的人有所帮助!