使用 mpi4py 主机密钥验证失败

Host key verification failed using mpi4py

我正在 Arch Linux ARM 中使用 mpi4py (1.3.1) 和 openmpi (1.8.6-1) 构建 MPI 应用程序(在 Raspberry Pi 集群上,更具体地说) .我已经 运行 我的程序在 3 个节点(4 个进程)上成功运行,当尝试添加一个新节点时,会发生以下情况:

Host key verification failed.
--------------------------------------------------------------------------
ORTE was unable to reliably start one or more daemons.
This usually is caused by:

* not finding the required libraries and/or binaries on
  one or more nodes. Please check your PATH and LD_LIBRARY_PATH
  settings, or configure OMPI with --enable-orterun-prefix-by-default

* lack of authority to execute on one or more specified nodes.
  Please verify your allocation and authorities.

* the inability to write startup files into /tmp (--tmpdir/orte_tmpdir_base).
Please check with your sys admin to determine the correct location to use.

*  compilation of the orted with dynamic libraries when static are required
  (e.g., on Cray). Please check your configure cmd line and consider using
  one of the contrib/platform definitions for your system type.

* an inability to create a connection back to mpirun due to a
  lack of common network interfaces and/or no route found between
  them. Please check network connectivity (including firewalls
  and network routing requirements).

有趣的是,ssh 密钥很好,因为我使用的是相同的节点(我可以删除主机文件的任何条目,添加新节点,它会起作用,所以我很确定问题不在于配置错误的 ssh 设置。它只在我使用 5 个进程时发生)。

这可能是某种库中的错误吗?

这是我的主机文件

192.168.1.26 slots=2
192.168.1.188 slots=1
#192.168.1.202 slots=1 If uncommented and run with -np 5, it will raise the error
192.168.1.100 slots=1

提前致谢!

我在 Linux x86_64 迷你集群 运行 Fedora 22 和 OpenMPI 1.8 上遇到了同样的问题。我可以通过 SSH 从我的启动机器连接到我的 5 台机器中的任何一台,但是当我尝试使用 3 个或更多节点启动 MPI 时,它会给我一个身份验证错误。和你一样,3 似乎是一个神奇的数字,事实证明它是。 OpenMPI 使用基于树的启动,因此当您有两个以上的节点时,一个或多个中间节点正在执行 ssh。就我而言,我没有使用无密码设置。我在已添加到我的密钥链中的启动机器上有一个 SSH 身份。它能够启动前两个节点,因为我的钥匙链中有经过身份验证的身份。然后这些节点中的每一个都尝试启动更多节点并且这些节点没有验证该密钥(我需要在每个节点上添加它)。

所以解决方案似乎是转向无密码 SSH 身份设置,但您显然必须小心操作。我在我的启动机器上创建了一个特定的身份(密钥对)。我将密钥添加到我要使用的节点上的授权密钥(这很容易,因为它们都使用 NFS,但如果需要,您可以手动分发一次密钥)。然后我修改了我的 SSH 配置以在尝试访问我的节点机器时使用该无密码身份。我的 ~/.ssh/config 看起来像:

Host node0
    HostName node0
    IdentityFile ~/.ssh/passwordless_rsa
Host node1
    HostName node1
    IdentityFile ~/.ssh/passwordless_rsa
...

我确定有一些方法可以针对带有通配符的 N 个节点进行缩放。或者您可以考虑在系统 ssh 配置文件中更改系统级别的默认身份文件(我敢打赌那里有类似的选项)。

成功了。现在我可以在没有任何身份验证问题的情况下启动所有 5 个节点。我认为的缺陷是启动节点会启动所有其他节点,但这种基于树的启动意味着您需要链接登录,而您不能使用密码验证身份来做到这一点,因为您永远没有机会对其进行身份验证。

拥有无密码密钥仍然让我感到害怕,因此为了在连接到开放网络的这些节点上保持额外的安全,我更改了 sshd 配置(系统级别)以限制除我之外的任何人的登录启动节点。