尝试运行boost::mpi tutorial中的第一个示例时,我无法运行两台以上的计算机。具体来说,这似乎运行良好:
mpirun -hostfile hostnames -np 4 boost1
主机名中的每个主机名为<node_name> slots=2 max_slots=2
。但是,当我将进程数增加到5时,它就会挂起。当我超过2台机器时,我将slots
/ max_slots
的数量减少为1,结果相同。在节点上,它显示在作业列表中:
<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
另外,当我杀了它时,我收到了这条消息:
node2- daemon did not report back when launched
node3- daemon did not report back when launched
设置群集时,可以在NFS挂载的驱动器上访问mpi
和boost
库。我是否因为NFS而陷入僵局?或者,还有其他事情发生了吗?
更新:要清楚,我正在运行的提升程序是
#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;
}
来自@Dirk Eddelbuettel的recommendations,我编译并运行了mpi示例hello_c.c
,如下所示
#include <stdio.h>
#include "mpi.h"
int main(int argc, char* argv[])
{
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("Hello, world, I am %d of %d\n", rank, size);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}
它在具有多个进程的单台机器上运行良好,这包括sshing到任何节点并运行。每个计算节点与通过NFS从远程计算机挂载的工作和mpi / boost目录相同。当从文件服务器运行boost程序时(与boost / mpi除外的节点相同),我可以在两个远程节点上运行。但是,对于“hello world”,运行命令mpirun -H node1,node2 -np 12 ./hello
我得到了
[<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)
而所有的“Hello World”都被打印出来并且最后会挂起。但是,从远程节点上的计算节点运行时的行为会有所不同。
从node2运行时,“Hello world”和boost代码都会挂起mpirun -H node1 -np 12 ./hello
,反之亦然。 (挂起与上面相同的意思:ort正在远程计算机上运行,但没有回传。)
行为不同于在mpi lib本地的文件服务器上运行而不是在计算节点上运行这一事实表明我可能遇到了NFS死锁。这是一个合理的结论吗?假设是这种情况,我如何配置mpi以允许我静态链接它?另外,我不知道从文件服务器运行时我得到的错误是什么,有什么想法吗?
答案 0 :(得分:5)
编辑:应该指出文件服务器的防火墙允许任意连接,因此运行mpi程序的行为与仅在计算节点上运行的行为不同。
答案 1 :(得分:2)
我的第一个建议是简化:
ssh
如果是,那么
mpirun -H host1,host2,host3 -n 12 ./helloworld
应该穿越。完成这些基础知识后,请尝试使用Boost教程...并确保在计划运行的所有主机上都有Boost和MPI库。
答案 2 :(得分:2)
考虑使用参数 - mca btl_tcp_if_include eth0 使节点仅使用eth0接口并阻止OpenMPI确定哪个是最佳网络。还有 - mca btl_tcp_if_exclude eth0 请记住为您的特定界面替换 eth0 。
我的/ etc / hosts包含这样的行:
10.1.2.13 node13
...
10.1.3.13 node13-ib
当我启动mpirun时,选择了TCP网络并且节点使用了TCP网络,但是,经过一段时间(20秒),OpenMPI发现了IP 10.1.3.XXX并试图使用它们,这导致了错误消息
我希望它有所帮助