首页 > 解决方案 > hwloc + lstopo 无法在 Open-MPI 的双 CPU 机器上生成拓扑

问题描述

我一直在尝试设置一个双 CPU 工作站(Dell Precision 7820)来使用 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 相比),并发现当我使用 libpciaccess-dev 编译 hwloc 时,我只能让 lstopo 生成拓扑图。预装的标准 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 包实施这些版本更改,或者是否需要完全从源代码编译。是否有可能更简单的方法来解决这个问题?

标签: linuxshared-librariesopenmpiapt

解决方案


通过反复试验解决了问题。首先,通过以下方式从系统中清除 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

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

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

Open-MPI 现在应该按预期运行,您应该能够通过运行“lstopo”生成系统拓扑,并通过运行“mpirun”确保 mpi 正常工作而不会出错。

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


推荐阅读