linux - 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 包实施这些版本更改,或者是否需要完全从源代码编译。是否有可能更简单的方法来解决这个问题?
解决方案
通过反复试验解决了问题。首先,通过以下方式从系统中清除 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 正常工作而不会出错。
希望这对以后遇到类似问题的人有所帮助!
推荐阅读
- c# - 即使抛出异常,Unity 单元测试也会成功
- angular - 无法使用 ng 命令以角度添加 ng-bootstrap
- angularjs - 在Angular中触发click事件后如何防止另一个事件侦听器(mouseout)
- django - 如何最小化 django 搜索查询?
- java - Kubernetes SharedInformer 使用和定义
- node.js - 插入特定集合时的 Strapi.io 触发器
- servicestack - ServiceStack SharpScript 未来
- python - 我的 Python 如何在不设置 PATH 的情况下指向 Python3?
- python - 创建类似俄罗斯方块的块的最有效方法
- android - 运行 react-native run-android 时出错