在两个群集节点上运行MPI程序时发生的问题

问题描述 投票:1回答:1

我有一个非常简单的MPI程序:

  int my_rank;
  int my_new_rank;
  int size;

  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
  MPI_Comm_size(MPI_COMM_WORLD, &size);


  if (my_rank == 0 || my_rank == 18 || my_rank == 36){
    char hostbuffer[256];
    gethostname(hostbuffer, sizeof(hostbuffer));
    printf("Hostname: %s\n", hostbuffer);
  }
  MPI_Finalize();

我正在具有两个节点的群集上运行它。我有一个生成文件,并使用mpicc命令生成了cannon.run可执行文件。我使用以下命令运行它:

time mpirun --mca btl ^openib -n 64 -hostfile ../second_machinefile ./cannon.run

在second_machinefile中,我具有这两个节点的名称。更加棘手的问题是,当我从一个节点运行该命令时,它会正常执行,但是当我从另一个节点运行该命令时,会出现错误:

Primary job  terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
--------------------------------------------------------------------------
*** Process received signal ***
Signal: Segmentation fault (11)
Signal code: Address not mapped (1)
Failing at address: 0x30

尝试调整GDB之后,我得到了回溯:

#0  0x00007ffff646e936 in ?? ()
   from /usr/lib/x86_64-linux-gnu/pmix/lib/pmix/mca_gds_ds21.so
#1  0x00007ffff6449733 in pmix_common_dstor_init ()
   from /lib/x86_64-linux-gnu/libmca_common_dstore.so.1
#2  0x00007ffff646e5b4 in ?? ()
   from /usr/lib/x86_64-linux-gnu/pmix/lib/pmix/mca_gds_ds21.so
#3  0x00007ffff659e46e in pmix_gds_base_select ()
   from /lib/x86_64-linux-gnu/libpmix.so.2
#4  0x00007ffff655688d in pmix_rte_init ()
   from /lib/x86_64-linux-gnu/libpmix.so.2
#5  0x00007ffff6512d7c in PMIx_Init () from /lib/x86_64-linux-gnu/libpmix.so.2
#6  0x00007ffff660afe4 in ext2x_client_init ()
   from /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/mca_pmix_ext2x.so
#7  0x00007ffff72e1656 in ?? ()
   from /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/mca_ess_pmi.so
#8  0x00007ffff7a9d11a in orte_init ()
   from /lib/x86_64-linux-gnu/libopen-rte.so.40
#9  0x00007ffff7d6de62 in ompi_mpi_init ()
   from /lib/x86_64-linux-gnu/libmpi.so.40
#10 0x00007ffff7d9c17e in PMPI_Init () from /lib/x86_64-linux-gnu/libmpi.so.40
#11 0x00005555555551d6 in main ()

老实说,我不完全了解。

我的主要困惑是,该程序已从machine_1正确执行,它正确连接到machine_2,并且两台计算机上的进程都已初始化。但是,当我尝试从machine_2执行相同的命令时,它无法连接machine_1。如果我也仅在machine_2上运行该程序,并且减少了进程数,因此它可以在一台计算机上运行,​​则该程序也可以正常运行。

我做错什么了吗?还是我可以尝试更好地理解问题的原因?

c mpi cluster-computing openmpi
1个回答
0
投票

这确实是Open PMIx中的错误,已在https://github.com/openpmix/openpmix/pull/1580中解决

同时,一种解决方法是将gds/ds21组件列入黑名单:

  • 一种选择是

export PMIX_MCA_gds=^ds21

调用mpirun之前

  • 另一个选择是添加以下行
gds = ^ds21

<pmix_prefix>/etc/pmix-mca-params.conf中的PMIx配置文件>

© www.soinside.com 2019 - 2024. All rights reserved.