是否可以在本地计算机和远程群集上运行OpenMPI?

时间:2013-04-11 02:35:46

标签: openmpi

我有一组需要执行集群的计算操作(可能像512 MPI进程)。现在,我让群集上的根节点打开一个套接字并在计算操作之间将数据传输到我的本地计算机,但我想知道是否可以创建两个MPI组,其中一个组是我的本地组机器,另一个是远程集群,并使用MPI命令在它们之间发送数据。

这可能吗?

2 个答案:

答案 0 :(得分:4)

是的,只要群集节点和您的计算机之间存在网络路径,就有可能。 MPI标准提供了抽象机制,而Open MPI提供了一种非常简单的方法来使事情发挥作用。您必须查看标准的流程创建和管理部分(MPI-2.2的第10章),特别是建立通信小节(MPI的第10.4节) 2.2)。基本上步骤是:

  1. 您可以单独启动两个MPI作业。这显然是你做的,所以这里没什么新鲜的。
  2. 其中一个作业使用MPI_Open_port()创建网络端口。此MPI调用返回一个唯一的端口名称,然后必须使用MPI_Publish_name()将其作为已知的服务名称发布。打开端口后,可以通过调用阻塞例程MPI_Comm_accept()来接受客户端连接。这项工作现已成为服务器工作。
  3. 另一个MPI作业(称为客户端作业)首先使用MPI_Lookup_name()从服务名称解析端口名称。一旦它具有端口名称,它就可以调用MPI_Comm_connect()以连接到远程服务器。
  4. 一旦MPI_Comm_connect()与相应的MPI_Comm_accept()配对,两个作业都会在它们之间建立一个互通,然后可以来回发送消息。
  5. 一个错综复杂的细节是客户端作业如何在给定服务名称的情况下查找端口名称?这是Open MPI中记录较少的部分,但它非常简单:您必须提供用于启动客户端作业的mpiexec命令,其中包含服务器作业的mpiexec的URI,它充当一种目录服务。为此,您应该使用--report-uri -参数启动服务器作业,以使其将URI打印到标准输出:

    $ mpiexec --report-uri - <other arguments like -np> ./server ...
    

    它将为您提供1221656576.0;tcp://10.1.13.164:36351;tcp://192.168.221.41:36351形式的长URI。现在,您必须使用mpiexec选项将此URI提供给客户端--ompi-server uri

    $ mpiexec --ompi-server 1221656576.0;tcp://10.1.13.164:36351... ./client ...
    

    请注意,URI包含节点上存在的所有已配置和已启用的网络接口的地址,其中服务器的mpiexec已启动。您应该确保客户端能够至少访问其中一个。还要确保在启用的BTL组件列表中具有TCP BTL组件,否则不会有消息流动。默认情况下,TCP BTL通常处于启用状态,但在某些InfiniBand安装中,通过设置环境变量OMPI_MCA_btl的相应值或默认的Open MPI MCA配置文件,可以显式禁用它。可以使用--mca选项覆盖MCA参数,例如:

    $ mpiexec --mca btl self,sm,openib,tcp --report-uri - ...
    

    另请参阅the answer我给出的类似问题。

答案 1 :(得分:0)

是的,如果有可用的TCP / IP连接,它应该只是开箱即用(MPI在随机的高TCP端口进行通信 - 如果TCP用作传输层)。尝试将您的计算机添加到您提供给mpirun的主机文件中。如果这不起作用,您可以使用不需要mpirun的{​​{3}}直接连接到您的计算机。