【问题标题】:Errors in makeCluster(multicore): cannot open the connectionmakeCluster(multicore) 中的错误:无法打开连接
【发布时间】:2017-10-09 14:00:16
【问题描述】:

我有以下问题。

为什么在标准节点(最大内核数 56)上提交作业时一切正常,但是当我向 large_memory 节点(最大内核数 128)提交相同的作业/代码时出现错误?

R 中的并行化代码:

> no_cores <- detectCores() - 1

> cl <- makeCluster(no_cores, outfile=paste0('./info_parallel.log'))

错误

Error in socketConnection(master, port = port, blocking = TRUE, open = "a+b",  :
  cannot open the connection

Calls: <Anonymous> ... doTryCatch -> recvData -> makeSOCKmaster -> 
  socketConnection

In addition: Warning message:

In socketConnection(master, port = port, blocking = TRUE, open = "a+b",  :
  localhost:11232 cannot be opened
Execution halted

Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted

Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode ->  unserialize
Execution halted

正如我所说,R 代码在标准节点上运行良好,所以我认为这是 large_memory 节点的问题。那会是什么?

【问题讨论】:

  • google搜索的很多答案都是以下答案:可能是计算节点和登录节点之间有防火墙,或者登录节点不允许连接到计算节点的11232端口. -- 我尝试从登录节点 ssh 到计算节点;然后直接在计算节点上运行 R 代码。或者设置连接到 11232 端口。但是还是报同样的错误。

标签: r parallel-processing cluster-computing


【解决方案1】:

终于解决了。

该错误是由 R 中的默认连接数限制引起的。连接数的默认值为 128。 这里的“连接数”是指每个节点的核数,在代码中会用到。

而在代码中,错误发生在“cl

no_cores

cl

这里,detectCores() 将获取节点上的最大核数。

在集群的标准节点中,每个节点的核数小于128,这就是R代码可以在标准节点上运行良好的原因;而在我的情况下, large_memory 分区中每个节点的核心数是 128。它默认达到核心的限制数量。所以错误显示为:

无法打开连接

我尝试将内核数设置为 120,以便在 large_memory 节点上运行作业(最大内核数 = 128)。没有错误。代码运行良好。

cl 120, outfile=paste0('./info_parallel.log'))

谢谢!

【讨论】:

  • 这是正确的;一个 R 会话可以随时打开硬编码的连接数; NCONNECTIONS=128 其中三个始终被占用,因此您最多可以拥有 125 个并行 PSOCK 工作程序(假设您没有任何打开的文件或其他连接)。如果您愿意从源代码重建 R,您可以手动增加此限制。我已经成功尝试了 900。有关此问题的更多详细信息(“你并不孤单”),请参阅 https://github.com/HenrikBengtsson/Wishlist-for-R/issues/28
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多