【发布时间】:2015-06-16 16:35:43
【问题描述】:
因此,我需要将计算密集型作业(深度神经网络训练)提交到一个租用计算时间的扭矩集群,并且我需要在活动节点之间每隔几分钟交换几兆的大型浮点数组,因为节点需要使用最新版本的神经网络才能很好地训练它。
我想知道是否有任何好的通信选项,至少告诉每个活动作业其姐妹作业的 ips,以便它可以通过 tcp 连接到它们。节点无法访问互联网,我们不能让守护进程在作业提交服务器上工作。
我看到的唯一选项是:
- Torque 上的一些消息传递选项(我对扭矩相当陌生)
- 使用文件进行通信的非常容易出错的选项,我讨厌。
- 一种从服务器查询活动节点 ips 的方法。
【问题讨论】:
-
这个问题非常广泛(并且可能基于意见)!我认为您应该看一下消息传递接口(MPI)。这是一种标准化的集群通信方式,并且得到 Torque 的良好支持。它可用于 C/C++ 和 Fortran(可能还有其他)。无需重新发明轮子。
-
传统的 MPI 在这里没有帮助。他需要来自 TCP 或 MPI 的连接接受语义。
-
Open MPI 绝对可以做到这一点。您必须运行全局可访问(通过 TCP/IP)名称服务器 (
orte-server) 或启动“主”作业并让其mpiexec充当这样的角色,然后将名称服务器的 URI 提供给 @ 的每个实例987654323@。然后工作可以利用MPI_Publish_name/MPI_Lookup_name和MPI_Comm_connect找到彼此并建立通信。 Torque 不提供工作间通信机制,或者至少没有在其 API 中公开此类机制。