因此,我通过将作业从 Ubuntu 机器发送到远程主机(也是 Ubuntu)来运行并行 c++ 程序,我在终端上使用的命令行如下:
mpirun -np 4 --host host1,host2 program.exe
然后终端上的下一行同时请求两个主机的密码:
noob@host1's password: noob@host2's password:
这给我带来了一些问题。有没有办法强制终端逐个请求我的密码?
答案1
我不知道是否有办法强制终端按顺序询问,但无论如何,假设您通过连接ssh
,更好的解决方案是设置无密码访问。
在你的机器上创建一个公共 ssh 密钥:
ssh-keygen -t rsa
系统将要求您输入密码,然后第一的每次登录后运行任何 ssh 命令的时间。这意味着对于多个
ssh
或scp
命令,您只需输入一次(不是每个主机一次,而是每个登录会话一次)。不过,您可以将其留空以实现完全无密码访问。生成公钥后,将其复制到远程计算机:
ssh-copy-id -i ~/.ssh/id_rsa.pub noob@host1 ssh-copy-id -i ~/.ssh/id_rsa.pub noob@host2
如果需要对许多主机执行此操作,请创建一个主机名或 IP 文件(每行一个),然后使用 shell 循环运行复制它们:
while read ip; do ssh-copy-id -i ~/.ssh/id_rsa.pub noob@$ip done < IPlistfile.txt
在此步骤中,您必须手动输入每个 IP 的密码,但完成此操作后,您应该能够在无需密码的情况下启动您的作业。
如果这不起作用,我们将需要更多有关该程序如何连接到远程主机的详细信息。
答案2
如果您正在使用 MPICH1,您可以通过此方法获得帮助。
而不是写作主机1,主机2在 -np 4 之后,您可以将主机添加到“机器.linux“此目标中的文件:
home/user/mpich1/share
*如果你没有在主目录中安装 mpich,请参考你安装 mpich 的位置
并打开“机器.linux“文件。清除文件内容和所需核心数的主机类型信息:
host1:4
host2:2
host3:2
现在您只需使用 mpirun 即可:
mpirun -np 4 program.exe