R并行makeCluster()在Mac上无限期挂起

时间:2018-09-10 19:42:51

标签: r macos parallel-processing firewall r-future

当我尝试在Mac上的R中使用parallel软件包时遇到了一些问题。

这是并行程序包正常工作的方式。

cl = makeCluster(2) # Using 2-core parallel as an example
# Your parallel code
stopCluster(cl)

运行此代码时,cl = makeCluster(2) 无限地挂起。我试图解决它,但是失败了。我还提到了其他一些帖子。可能的原因包括内存不足,安装错误等。当我重新启动会话,重新安装R时,它们似乎不是问题所在,但问题仍然存在。

我想问题出在R尝试连接内核时。这是我发现的。我使用了future软件包来查看连接核心的具体过程。随附的是代码及其返回。

cl <- future::makeClusterPSOCK(2, verbose = TRUE)
  

工人:[n = 2]“本地主机”,“本地主机”   基本端口:11303   创建2个节点中的1个...   -设置节点   在'localhost'上启动工作程序#1:'/Library/Frameworks/R.framework/Resources/bin/Rscript'-默认包=数据集,utils,grDevices,图形,统计信息,方法-e'parallel :::。slaveRSOCK ()'MASTER = localhost PORT = 11303 OUT = / dev / null TIMEOUT = 2592000 XDR = TRUE
  等待“本地主机”上的工作人员#1重新连接

问题是本地主机永不回连接...

以下是我的会话信息。我希望这有帮助。

  

R版本3.5.1(2018-07-02)。
  平台:x86_64-apple-darwin15.6.0(64位)。
  运行于:macOS High Sierra 10.13.6。

     

Matrix产品:默认。
  BLAS:/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib。
  LAPACK:/Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

     

语言环境:
  [1] en_US.UTF-8 / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US.UTF-8

     

附加的基本软件包:
  [1]统计图形grDevices utils数据集方法基础

     

通过名称空间(未附加)加载:
  [1]编译器_3.5.1并行_3.5.1工具_3.5.1监听v_0.7.0代码工具_0.2-15摘要_0.6.16
  [7] globals_0.12.2 future_1.9.0

有趣的是,相同的代码可以在我的旧Mac机器上运行(相同的OS,但硬件更旧)。我不知道这里发生了什么。任何帮助表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:1)

  

许多潜在的原因包括内存不足,安装错误等。当我重新启动会话,重新安装R时,这似乎不是问题所在。

正确的,这里不应该涉及那些类型的问题。您显示的调用使用R的基本内置功能(大多数来自“并行”包),并且涉及的内存使用很少。

  

我想问题出在R尝试连接内核时。 [...]

parallel:makeCluster(2)future::makeClusterPSOCK(2)都启动工作程序(使用parallel:::.slaveRSOCK()),这些工作程序是在后台运行的独立R会话。主会话和这些工作程序通过套接字进行通信。因此,是的,可能是您的防火墙出现问题,导致R无法打开这些端口。 (我不知道要解决此问题的macOS足够多)

通过设置outfile = NULL,您还将获得有关工人端发生的情况的信息。这是它工作时的样子:

> cl <- future::makeClusterPSOCK(1, outfile = NULL, verbose = TRUE)
Workers: [n = 1] ‘localhost’
Base port: 11306
Creating node 1 of 1 ...
- setting up node
Starting worker #1 on ‘localhost’: '/usr/lib/R/bin/Rscript' --default-packages=datasets,utils,grDevices,graphics,stats,methods -e 'parallel:::.slaveRSOCK()' MASTER=localhost PORT=11306 OUT= TIMEOUT=2592000 XDR=TRUE
Waiting for worker #1 on ‘localhost’ to connect back
starting worker pid=7608 on localhost:11306 at 14:46:57.827
Connection with worker #1 on ‘localhost’ established
- assigning connection UUID
- collecting session information
Creating node 1 of 1 ... done

PS。您只需要一名工人即可解决此问题。

答案 1 :(得分:0)

经过数周的尝试,我终于解决了这个问题。我把我的答案放在这里。

问题实际上是由macOS内的一些未知防火墙问题引起的。解决方案是重新安装整个操作系统。。。我知道这听起来很愚蠢和麻烦,但是之后就解决了问题。

这样做的动机是,我碰巧注意到我无权访问主目录下的某些文件夹(我试图使用sudo来修改某些文件,但未获得访问权限)。这是我的个人笔记本电脑,不应出现此类问题。然后,我意识到这台Mac是从我的旧Mac同步的。同步过程可能会引起一些防火墙问题。