R:makeCluster(多核)中的错误:无法打开连接

Hel*_*Liu 4 parallel-processing r cluster-computing

我有以下问题.

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

- R中的并行化代码:

no_cores < - detectCores() - 1

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

- 错误......

socketConnection出错(master,port = port,blocking = TRUE,open ="a + b",:

无法打开连接

调用:... doTryCatch - > recvData - > makeSOCKmaster - > socketConnection

另外:警告信息:

在socketConnection中(master,port = port,blocking = TRUE,open ="a + b",:

localhost:11232无法打开

执行停止

反序列化错误(节点$ con):从连接读取错误

调用:... doTryCatch - > recvData - > recvData.SOCKnode - > unserialize

执行停止

反序列化错误(节点$ con):从连接读取错误

调用:... doTryCatch - > recvData - > recvData.SOCKnode - > unserialize

执行停止


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

谢谢,

Hel*_*Liu 7

最后,我解决了它.

该错误是由R中的连接的默认限制引起的.连接的默认值是128.这里,"连接"表示每个节点的核心数,这些核心在代码中使用.

而在代码中,错误发生在"cl < - makeCluster ........"这一行.

no_cores < - detectCores() - 1

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

这里,detectCores()将获得节点上的最大内核数.

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

无法打开连接

我尝试在large_memory节点上为核心运行作业设置核心数为120(最大核心数= 128).没有错误.代码效果很好.

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

谢谢!

  • 这是对的; 一个R会话可以随时打开的硬编码连接数;“ NCONNECTIONS = 128”,其中三个始终处于占用状态,因此最多可以有125个并行的PSOCK工作程序(假设您没有任何打开的文件或其他连接)。如果您愿意从源代码重建R,则可以手动增加此限制。我已成功尝试使用900。有关此问题的更多详细信息(“您并不孤单”),请参阅https://github.com/HenrikBengtsson/Wishlist-for-R/issues/28 (2认同)