【问题标题】:R parallel makeCluster() hangs infinitely on MacR并行makeCluster()在Mac上无限挂起
【发布时间】:2019-02-15 06:45:54
【问题描述】:

我在 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] ‘localhost’, ‘localhost’ 基础端口:11303 创建节点 1 of 2 ... - 设置节点 在 'localhost' 上启动 worker #1: '/Library/Frameworks/R.framework/Resources/bin/Rscript' --default packages=datasets,utils,grDevices,graphics,stats,methods -e 'parallel:::.slaveRSOCK ()' MASTER=localhost PORT=11303 OUT=/dev/null TIMEOUT=2592000 XDR=TRUE
等待‘localhost’上的worker #1重新连接

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

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

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

矩阵产品:默认。
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] stats graphics grDevices utils datasets methods base

通过命名空间加载(未附加):
[1] compiler_3.5.1 parallel_3.5.1 tools_3.5.1 listenv_0.7.0 codetools_0.2-15 digest_0.6.16
[7] globals_0.12.2 future_1.9.0

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      几个潜在原因包括内存不足、安装错误等。它们似乎不是这里的问题,因为我重新启动了会话,重新安装了 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。您只需要一名工作人员即可解决此问题。

      【讨论】:

      • 感谢您的建议!其实我试过这种方法得到了类似的输出。 “等待‘localhost’上的worker #1在15:48:41.991连接回localhost:11214上的启动worker pid=13731”。所以我想这是一个连接问题。但我不知道这些数字是什么意思......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多