2015-06-16 37 views
1

所以,我需要将计算密集型工作(深度神经网络训练)提交到一个扭矩集群,这个集群会占用计算时间,而且我需要每几分钟交换几个大浮点数组因为节点需要在最新版本的神经网络上工作以训练它。群集中的扭矩工作之间的消息传递

我想知道是否有任何良好的沟通选择,至少要告诉每个活跃的工作姐妹工作'ips,所以它可以连接到他们通过tcp。节点无法访问互联网,我们无法在作业提交服务器上运行守护进程。

,我看到的唯一的选择是:

  • 一些消息传递转矩选择(我是相当小白在转矩)
  • 使用的文件进行沟通的非常容易出错的选择,这我恨。
  • 一种查询服务器上活动节点ips的方法。
+1

这个问题非常广泛(可能与观点相符)!我认为你应该看看消息传递接口(MPI)。这是集群通信的标准化方式,并得到Torque的很好支持。它适用于C/C++和Fortran(可能还有其他)。不需要重新发明轮子。 –

+0

传统的MPI在这里没有帮助。他需要TCP或MPI的连接 - 接受语义。 – Jeff

+0

这对Open MPI来说绝对是可能的。你必须运行全局可达的(通过TCP/IP)名称服务器('orte-server')或启动一个“主”作业,并让它的“mpiexec”作用,然后为每个实例提供名称服务器的URI 'mpiexec'。然后作业可以利用'MPI_Publish_name' /'MPI_Lookup_name'和'MPI_Comm_connect'找到彼此并建立通信。 Torque不提供interjob通信机制,或者至少不在API中公开这些机制。 –

回答

0

根据集群的体系结构,在集群上的节点之间交换信息的方式有很多种。 Torque是资源管理器,因此如果使用批处理脚本将作业提交到群集,则有几个环境变量应该能够为您提供作业中使用的节点的主机名或IP地址。

查找IP地址和/或主机名的确切语法将取决于与群集上的转矩一起使用的调度程序/工作负载管理器。此链接有关于PBS Works工作负载管理器的文档。

节点之间的并行通信可以通过多种方式实现,部分取决于群集中可用的硬件。使用MPI是在集群上使用并行代码的最常用方法之一,许多实现都支持Infiniband等多种高性能结构/互连系统。对不同类型的并行性的一些有用的介绍可以参见here

作为MPI的替代方案,可以使用远程直接内存访问(RDMA)来传递和访问节点之间的信息。如果集群具有Infiniband网络适配器,那么查看来自供应商的IB-Verbs API将是在节点之间传递数据的附加选项。