我想在不同的机器上运行一个带有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
...
是否有可能实现这一目标。谢谢。
答案 0 :(得分:3)
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
之类的内容,如果适用,可以节省一些输入内容。)
答案 1 :(得分:2)
我能想到的唯一方法就是为你的进程启动器创建一个包装器来为某些人创建ssh user1 @ hostname,为其他人创建user2 @ hostname。您可以通过
设置进程启动器ssh代理mpirun -mca orte_rsh_agent "/path/to/mysshwrapper" -machinefile machines.txt -np 4 ./subarray
然后你必须在你的包装器调用ssh中注入适当的用户名参数。
您当然还必须设置ssh密钥,以便您登录其他用户名帐户时无密码。
答案 2 :(得分:2)
试图找到解决我自己问题的方法我刚刚发现了类似的问题(在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
答案 3 :(得分:-1)
通常,您只需在要运行mpi作业的每台计算机上安装mpi。然后在您的mipexec调用中,您将指定标识具有mpi的主机/机器的机器文件。 mpi smpd / daemon将在每台主机上为您启动作业。
示例:
mpiexec -f machinefile -n 32 a.out
机器文件如下:
host1.some.place:16
host2.some.place:16
这意味着两台主机各有16个核心。
参考: