【问题标题】:How to communicate between nodes of a cluster?集群节点之间如何通信?
【发布时间】:2019-03-18 16:51:39
【问题描述】:

这不是关于特定集群环境的问题,而是关于在集群上的多个节点上分发软件的一般情况。

据我了解,大多数 HPC 集群都使用某种工作负载管理器将作业分配到多个节点。根据我有限的研究,Slurm 似乎是一种流行的选择,但其他人也在使用。

如果您想运行n 独立任务,我可以看到这很有用。但是,如果您想运行相互通信的任务怎么办?

如果我正在开发一个跨两台或多台机器的应用程序,我可以设计一个简单的协议(或使用现有协议)并通过 TCP/IP 之类的方式发送/接收消息。如果事情变得非常复杂,设计一个简单的消息总线或消息集线器来容纳两台以上的机器不会太难。

首先,在 HPC 集群中使用 TCP 是否明智,还是出于性能原因通常不使用它?

其次,在非集群环境中,我事先知道所涉及机器的 IP 地址,但在集群上,我将决定将我的软件部署在哪些物理机器上的决定权交给了 Slurm 等工作负载管理器。那么我怎样才能“连接”节点呢? MPI是如何做到这一点的,还是不使用TCP/IP来允许节点间的通信?

很抱歉,如果这个问题对 StackOverflow 来说有点开放式,我很乐意将它移到其他地方,如果有更合适的地方来问这些问题。

【问题讨论】:

    标签: mpi hpc slurm


    【解决方案1】:

    如果我正在开发的应用程序分为两个或多个 我可以设计一个简单的协议(或使用现有的 一)并通过诸如 TCP/IP 之类的方式发送/接收消息

    于是出现了MPI,所以不是每个人都会重新发明轮子(轮子是几千小时的工程时间,它不是你的基本战车轮子,它已经走过了一些非常颠簸的道路......)。
    但最终这就是 MPI 所做的(如果您希望通过 TCP 进行通信,请参阅 OpenMPI TCP

    首先,在 HPC 集群中使用 TCP 是否明智? 通常出于性能原因不使用?

    它们是 TCP 以外的其他通信方式(共享内存、Myrinet、OpenFabrics 通信……)OpenMPI FAQ)。在 HPC 中,它们是市场上一些与 互连 相关的解决方案(查看 Top 500

    那么我怎样才能“连接”节点呢? MPI 是如何实现这一点的,或者是 不使用 TCP/IP 来允许节点之间的通信?

    接线由工作负载管理器管理(您可以查看slurm configurationloadleveler)。 MPI 只会从该上下文“继承”,因为在 HPC 上下文中您停止使用 mpirun,但更可能的是 srunrunjob(而不是执行类似 Specify the machines running program using MPI 的操作)

    【讨论】:

    • 感谢您的回复。我查看了您链接到的文档,并专门阅读了有关在 Slurm 中运行作业的信息。我可以想象“连接”节点的一种方法是使用srun-w 标志来指定在哪些节点上运行可执行文件。这样我就可以将节点列表(作为一个简单的主机名数组)作为参数传递给每个可执行文件的main 函数。 @NPE 当您说工作负载管理器进行“接线”时,这就是您所说的那种事情吗?还是有更复杂的方法来做到这一点? (我说的是使用 TCP btw 制作自己的通讯,而不是使用 MPI)
    • 不,没有更复杂的方法。当人们交流时,他们必须知道彼此的地址(除非他们在同一个房间……多核)与机器相同..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多