我正在尝试使用 OpenMPI 设置一个由四个节点组成的集群(全部运行 Fedora 22)。
在主节点上,我创建了一个无密码密钥 (~/.ssh/id_dsa) 并将 ~/.ssh/id_dsa.pub 复制到三个从节点的 ~/.ssh/authorized_keys 中。因此,从主节点,我可以运行ssh slave1
、ssh slave2
、 或ssh slave3
并成功进入相应的节点,而无需输入密码。同样适用于ssh master
.
但是,当我尝试使用mpirun
.这是我运行的命令:
/usr/lib64/openmpi/bin/mpirun -np 32 --hostfile .mpi_hostfile ./testprogram
这是输出的第一位:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
ORTE was unable to reliably start one or more daemons.
当我随后运行 时ssh slave3
,我看到消息“自上次成功登录以来,有 2 次登录尝试失败。”因此,mpirun
尝试进行的ssh 身份验证似乎由于某种原因失败了。
有什么想法为什么我可以使用 进行无密码、基于密钥的身份验证ssh
,但使用 却不行mpirun
?
作为记录,以下是以下内容.mpi_hostfile
:
# Host file for OpenMPI
# Master node, slots = num cores
localhost slots=8
# Slaves
slave1 slots=8
slave2 slots=8
slave3 slots=8
答案1
这可能是因为 Open MPI 默认使用基于树的启动方案。例如,从调用 mpirun 的机器 ssh 到slave1,然后从slave1 ssh 到slave2,...等等。
看http://blogs.cisco.com/performance/tree-based-launch-in-open-mpi和http://blogs.cisco.com/performance/tree-based-launch-in-open-mpi-part-2更多细节。