C++ 无法在两台以上的计算机上运行OpenMPI
在尝试运行中的第一个示例时,我无法运行两台以上的计算机。具体而言,这似乎运行良好:C++ 无法在两台以上的计算机上运行OpenMPI,c++,openmpi,boost-mpi,C++,Openmpi,Boost Mpi,在尝试运行中的第一个示例时,我无法运行两台以上的计算机。具体而言,这似乎运行良好: mpirun -hostfile hostnames -np 4 boost1 主机名中的每个主机名为slots=2 max\u slots=2。但是,当我将进程数增加到5时,它只是挂起。我已将插槽数/最大插槽数减少到1,当我超过2台机器时,结果相同。在节点上,这将显示在作业列表中: <user> Ss orted --daemonize -mca ess env -mca orte_ess_job
mpirun -hostfile hostnames -np 4 boost1
主机名中的每个主机名为slots=2 max\u slots=2
。但是,当我将进程数增加到5时,它只是挂起。我已将插槽数
/最大插槽数
减少到1,当我超过2台机器时,结果相同。在节点上,这将显示在作业列表中:
<user> Ss orted --daemonize -mca ess env -mca orte_ess_jobid 388497408 \
-mca orte_ess_vpid 2 -mca orte_ess_num_procs 3 -hnp-uri \
388497408.0;tcp://<node_ip>:48823
群集设置为可在NFS安装的驱动器上访问的mpi
和boost
libs。我是否在使用NFS时遇到了死锁?或者,还有别的事情吗
更新:说清楚,我正在运行的boost程序是
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>
namespace mpi = boost::mpi;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
std::cout << "I am process " << world.rank() << " of " << world.size()
<< "." << std::endl;
return 0;
}
它在具有多个进程的单台计算机上运行良好,这包括对任何节点进行sshing并运行。每个计算节点都与通过NFS从远程机器装载的工作目录和mpi/boost目录相同。从文件服务器运行boost程序时(与节点相同,boost/mpi是本地的除外),我能够在两个远程节点上运行。但是,对于“hello world”,运行命令mpirun-H node1,node2-np 12./helloI get
[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)
[[2771,1],]\
[btl\U tcp\U端点。c:638:mca\U btl\U tcp\U端点\U完成\U连接]\
连接()失败:没有到主机的路由(113)
而所有的“Hello World”都被打印出来并挂在最后。但是,从远程节点上的计算节点运行时的行为有所不同
当从node2运行时,“Hello world”和boost代码都与mpirun-H node1-np 12一起挂起。/Hello,反之亦然。(挂起的意义与上面相同:orted正在远程机器上运行,但不进行通信。)
这种行为不同于在文件服务器上运行(其中mpi LIB是本地的)和在计算节点上运行,这表明我可能遇到了NFS死锁。这是合理的结论吗?假设是这种情况,如何配置mpi以允许静态链接它?此外,我不知道如何处理从文件服务器运行时出现的错误,有什么想法吗 我的第一个建议是简化:
- 您能否构建标准MPI“hello,world”示例
- 你能在本地主机上运行几次吗
- 您可以通过ssh在另一台主机上执行吗
- 路径相同吗
mpirun -H host1,host2,host3 -n 12 ./helloworld
我们应该穿越。整理好这些基础知识后,请尝试Boost教程。。。并确保您计划在所有主机上运行Boost和MPI库。答案很简单:通过ssh打开经过身份验证的MPI,然后打开节点之间的tcp/ip套接字。计算节点上的防火墙设置为只接受彼此的ssh连接,而不是任意连接。因此,在更新iptables之后,helloworld在所有节点上都像champ一样运行
编辑:应该指出,文件服务器的防火墙允许任意连接,因此,在其上运行的mpi程序的行为与在计算节点上运行的mpi程序的行为不同。考虑使用参数--mca btl_tcp_(如果包含eth0)使节点仅使用eth0接口,并阻止OpenMPI确定哪一个是最佳网络。如果排除eth0请记住为您的特定接口替换eth0 My/etc/hosts包含如下行: 10.1.2.13节点13 10.1.3.13节点13 ib 当我启动mpirun时,选择了TCP网络,节点使用TCP网络,但是,在一段时间(20秒)后,OpenMPI发现IPs 10.1.3.XXX并尝试使用它们,这导致了错误消息
我希望能有所帮助@Dirk:谢谢你的建议。我用这些观察结果更新了我的问题。
[<node name>][[2771,1],<process #>] \
[btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] \
connect() to <node-ip> failed: No route to host (113)
mpirun -H host1,host2,host3 -n 12 ./helloworld