是否可以将 Linux OpenMPI v1.6.5 配置为在单个节点上使用多个工作目录?

计算科学 mpi
2021-12-05 21:50:45

我正在翻新的 PowerEdge 机架服务器上运行一些量子化学计算,该服务器具有双四核 Xeon、16GB RAM 和单个 500GB SATA HDD。操作系统是香草 Debian Wheezy。对于我正在运行的一种计算类型,我认为我的磁盘 I/O 受限,因此我安装了一个备用的 160GB 硬盘来缓解瓶颈。

不过,为了使用额外的驱动器,我需要能够告诉 OpenMPI 使用多个工作目录。我知道--wdir命令行标志存在,但文档使它看起来只接受一个值。我没有成功地尝试了一个 hacky 解决方法:

  1. 创建新用户scratch
  2. 将新的 160GB 驱动器安装为/home/scratch/
  3. 当 SSH-ing 到服务器的内部地址时设置/home/bskinn/.ssh/config为默认用户,以及bskinn当 SSH-ing 到服务器的内部地址时localhost默认为用户scratch192.168.x.x
  4. 创建适当的 RSA SSH 密钥,添加到/home/bskinn/.ssh/authorized_keys/home/scratch/.ssh/authorized_keys,并 SSH-ing 到每个以获取存储的主机信息以供自动接受
  5. 添加localhost192.168.x.x到我的ompi_hosts文件并传递给 OMPI--hostfile /home/bskinn/ompi_hosts

如果我ssh localhost以 身份登录bskinn,并且ssh 192.168.x.x以 身份登录scratch,就像我想要的那样。然而,虽然 OpenMPI 没有抛出任何错误,但它似乎只是忽略了该ompi_hosts文件并只是在本地运行所有进程。

那么:有没有办法让 OpenMPI 1.6.5 使用多个工作目录?

附录:我正在运行 ORCA 计算。ORCA作为预编译的静态链接二进制文件分发。特别是,OMPI 调用被硬编码到所述二进制文件中,我无法访问。因此,我无法截获传递给 OMPI 的命令,除非通过一些技巧,我重新定位 ORCA 二进制文件并用 shell 脚本替换它们。这似乎比它的价值多得多。

ORCA 确实提供了通过任何我想要的 OMPI 环境变量的能力;我只对这种复杂程度的解决方案真正感兴趣。

这是来自SuperUser的交叉帖子——我在那里赢得了 Tumbleweed 徽章(是吗?),所以我猜这不是一个适合它的地方。我没有代表来迁移它,所以如果以这种方式重新发布不受欢迎,我们深表歉意。

2个回答

与其启动可执行文件,不如启动一个脚本,将目录更改为您想要的目录,然后执行您的程序?OpenMPI$OMPI_COMM_WORLD_RANK在环境中设置等于任务将在代码内的 MPI_COMM_WORLD 中获得的排名,因此您可以执行类似的操作

foo.sh:

#!/bin/bash
total_tasks=100 # Or whatever
if [ $OMPI_COMM_WORLD -lt $($total_tasks/2) ]; then
  cd /home/scratch
fi
exec /path/to/my/chemistry/code arg1 arg2 arg3

然后,如果您使 foo.sh 可执行(chmod +x foo.sh)和 mpirun 或 mpiexec(或其他) foo.sh,它应该将前半部分的工作目录放在 /home/scratch 和后半部分当您执行 mpirun/exec 时,无论您身在何处。

如果您有源代码,您也可以将其修补到您的化学程序中。

最后,如果这两个驱动器连接到同一个控制器,您可能会或可能不会获得任何额外的带宽。您是否尝试过分析您的应用程序?它是什么代码?您是否以非核心模式运行它?

如果您没有源代码并且根本无法修改 mpirun/mpiexec 命令行,那么您可能很难按照您尝试的方式做事。如果可以,您应该分析您的运行并验证 I/O 实际上是您的问题。如果是这样,仅迁移到单个 SSD 可能足以让您取得一些进步,但跨驱动器拆分可能更具挑战性,除非您有足够的空间(控制器端口和物理空间)来构建 2-3 个驱动器条带化 RAID 阵列( RAID 0)。几乎可以肯定,这种方式比尝试在不同的挂载点上显式条带化要好。如果您没有足够的空间容纳 3-4 个驱动器,但您确实有空间容纳两个驱动器,您可能需要彻底擦除并重新安装带有 RAID 0 系统分区的系统,以便将所有东西都安装上。

*鉴于更新和请求,我添加了这个额外的答案。