gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:46:00 24 4
gpt4 key购买 nike

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

这可能吗?

最佳答案

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

  • 您分别启动两个 MPI 作业。这显然是你所做的,所以这里没有什么新鲜事。
  • 其中一项作业使用 MPI_Open_port() 创建网络端口。 .此 MPI 调用返回唯一的端口名称,然后必须使用 MPI_Publish_name() 将其发布为众所周知的服务名称.一旦端口打开,就可以通过调用阻塞例程MPI_Comm_accept() 来接受客户端连接。 .该作业现在已成为服务器作业。
  • 另一个 MPI 作业,称为客户端作业,首先使用 MPI_Lookup_name() 从服务名称解析端口名称。 .一旦有了端口名称,它就可以调用 MPI_Comm_connect()为了连接到远程服务器。
  • 一次MPI_Comm_connect()与相应的 MPI_Comm_accept() 配对,这两个作业将在它们之间建立一个互通器,然后可以来回发送消息。

  • 一个复杂的细节是客户端作业如何在给定服务名称的情况下查找端口名称?这是 Open MPI 中文档较少的部分,但它非常简单:您必须提供 mpiexec用于使用 mpiexec 的 URI 启动客户端作业的命令服务器作业,它充当一种目录服务。为此,您应该使用 --report-uri - 启动服务器作业。使其将其 URI 打印到标准输出的参数:
    $ mpiexec --report-uri - <other arguments like -np> ./server ...

    它会给你一个长的 URI 1221656576.0;tcp://10.1.13.164:36351;tcp://192.168.221.41:36351 .现在您必须将此 URI 提供给客户端 mpiexec--ompi-server uri选项:
    $ mpiexec --ompi-server 1221656576.0;tcp://10.1.13.164:36351... ./client ...

    请注意,URI 包含节点上存在的所有已配置和启用的网络接口(interface)的地址,其中服务器的 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我给了一个类似的问题。

    关于openmpi - 是否可以在本地计算机和远程集群上运行 OpenMPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939757/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com