配置 MPI 主机文件以使用多个用户身份

Posted

技术标签:

【中文标题】配置 MPI 主机文件以使用多个用户身份【英文标题】:Configure MPI hostsfile to use multiple user identities 【发布时间】:2011-09-24 23:43:29 【问题描述】:

我想在不同的机器上运行一个带有 mpirun 的程序(所有带有 Open Mpi 1.5 的 linux 机器)。

现在我有可以使用username A 登录的机器,以及可以使用username B 登录的另一组机器。所有机器都可以通过 ssh 访问,但我不知道如何实现这一点。

我的主机文件是这样的:

localhost          #username local

machine_set_A_1    #username A
machine_set_A_2    #username A
...

machine_set_B_1    #username B
machine_set_B_2    #username B
...

有没有可能做到这一点。谢谢。

【问题讨论】:

所有使用 Open Mpi 1.5 的 linux 机器,问题已更新 【参考方案1】:

OpenSSH 客户端支持按主机配置,类似于以下内容:

Host machine_set_A_1 machine_set_A_2 ...
User username_A

Host machine_set_B_1 machine_set_B_2 ...
User username_B

Host 指令将以下所有声明(直到下一个 Host 指令)限制为仅适用于与该指令后给出的任何模式匹配的主机名连接。

SSH 客户端配置文件通常位于/etc/ssh/ssh_config(系统范围的配置)和~/.ssh/config(用户特定的配置;那里的指令覆盖系统配置中的指令)。

ssh_config(5) 的手册页包含有关可用关键字的更多信息以及有关支持哪些模式的更多信息(使用类似 Host *.groupA.uni.edu 的内容,如果适用,可以节省一些输入)。

【讨论】:

@JonathanDursi,您的答案适用于更一般的情况,因为包装器还可以做其他不同的事情,而不是简单地指定正确的用户名(例如,提供与 SGE 之类的集成)。你不应该删除它。 回想起来,这似乎是 hack-y,但如果您认为它在某些其他情况下可能有用,我将取消删除。【参考方案2】:

我能想到的唯一方法是为您的进程启动器创建一个包装器,为某些人执行 ssh user1@hostname,为其他人执行 user2@hostname。您可以通过

设置进程启动器 ssh 代理
mpirun -mca orte_rsh_agent "/path/to/mysshwrapper" -machinefile machines.txt -np 4 ./subarray

然后您必须将适当的用户名参数注入到来自包装器的 ssh 调用中。

当然,您还必须设置 ssh 密钥,以便您登录其他用户名帐户时无需密码。

【讨论】:

可以创建一个 SSH 客户端配置文件,并使用 Host 关键字指定不同的主机配置。对于每个主机,可以使用User 关键字指定登录用户名。应该比创建包装脚本简单一些。 @HristoIliev 是的,这在简单性和实用性方面都是一个更好的答案(即使在 mpirun 之外它也可能很有帮助)。您应该将其发布为正确的答案,而不是对此发表评论,以便获得应有的知名度。【参考方案3】:

试图为我自己的问题找到解决方案,我刚刚找到了类似的东西(http://wiki.mpich.org/mpich/index.php/Using_the_Hydra_Process_Manager)。它可能对你有帮助,但这是给 MPICH 的。

在具有不同用户名的机器上使用 Hydra

Hydra 仅支持在某些启动器上使用不同的用户名(例如 ssh 和 rsh)。为此,主机文件应包含“user=”条目。

一个例子

shell$ cat hosts

       donner  user=foo
       foo     user=bar
       shakey  user=bar

编辑

OpenMPI请参考:http://www.open-mpi.org/faq/?category=rsh#rhosts-file

【讨论】:

【参考方案4】:

通常,您只需在要运行 mpi 作业的每台机器上安装 mpi。然后在您的 mipexec 调用中,您将指定用于标识具有 mpi 的主机/机器的机器文件。 mpi smpd/daemon 将在每台主机上为您启动作业。

例子:

 mpiexec -f machinefile -n 32 a.out

机器文件如下:

 host1.some.place:16
 host2.some.place:16

这意味着两台主机各有 16 个核心。

参考:

mpich2 documentation

【讨论】:

它如何知道使用哪个用户来在机器上执行命令?我的问题是我有不同的用户!

以上是关于配置 MPI 主机文件以使用多个用户身份的主要内容,如果未能解决你的问题,请参考以下文章

MPI 本地局域网运行多机配置,同时运行多个程序;

IDX10803:无法创建以获取配置

C#:加载漫游配置文件并以用户身份执行程序

nginx配置虚拟主机

sudo

验证远程主机以运行 ms-mpi 进程