r - R 中使用 brm 的负二项式回归在使用多核时会导致错误

标签 r sockets parallel-processing non-linear-regression r-4.0.0

我正在使用 brms 包中的 brm 函数计算负二项式回归。由于这需要相当长的时间,我想按照 documentation 中的建议使用多个核心。 .

bfit_s <- brm(
  dep_var ~ ind_var +
    var1 +
    var2 +
    (1 | some_level1) + (1 | some_level2),
  data = my_df,
  family = negbinomial(link = "log", link_shape = "log"),
  cores = 4,
  control = list(adapt_delta = 0.999)
)

但是,我遇到了一个错误,指出所有四个工作人员的连接均失败:

Compiling the C++ model

Start sampling
starting worker pid=11603 on localhost:11447 at 14:13:56.193
starting worker pid=11601 on localhost:11447 at 14:13:56.193
starting worker pid=11602 on localhost:11447 at 14:13:56.198
starting worker pid=11604 on localhost:11447 at 14:13:56.201
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> -> slaveLoop -> makeSOCKmaster
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> -> slaveLoop -> makeSOCKmaster
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> -> slaveLoop -> makeSOCKmaster
Execution halted
Execution halted
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> -> slaveLoop -> makeSOCKmaster
Execution halted

回溯显示 makePSOCKcluster(names = spec, ...) 中出现错误:集群设置失败。 4 个工作人员中有 4 个无法连接。

我试图理解这个问题,阅读了一些关于SO的问题,例如this ,但无法弄清楚为什么无法连接。我使用的是 macOS Mojave,问题不在于我尝试使用尽可能多的内核。关于如何让它在多个内核上运行有什么建议吗?


编辑: 正如 sjp 在他的回答中指出的那样,RStudio 存在问题。我想我在我的问题中分享了解决问题的代码,因此每个偶然发现的人都可以解决这个问题,而无需进一步单击(和阅读)。

问题出在 R-4.0.0 的parallel 包上。 - 但用户从 this 提供了解决方法斯坦论坛。如果您可以使用 setup_strategy="sequential" 初始化集群,如下所示:

cl <- parallel::makeCluster(2, setup_strategy = "sequential") 

您可以在 ~/.Rprofile 中添加一个简短的片段,以将这种设置设为默认设置:

## WORKAROUND: https://github.com/rstudio/rstudio/issues/6692
## Revert to 'sequential' setup of PSOCK cluster in RStudio Console on macOS and R 4.0.0
if (Sys.getenv("RSTUDIO") == "1" && !nzchar(Sys.getenv("RSTUDIO_TERM")) && 
    Sys.info()["sysname"] == "Darwin" && getRversion() == "4.0.0") {
  parallel:::setDefaultClusterOptions(setup_strategy = "sequential")
}

最佳答案

这是与 RStudio 有关的已知问题。在 Stan 论坛和 Github 上查看这些相关帖子。

Github:https://github.com/rstudio/rstudio/issues/6692

斯坦论坛:https://discourse.mc-stan.org/t/r-4-0-0-and-cran-macos-binaries/13989/13

关于r - R 中使用 brm 的负二项式回归在使用多核时会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61987580/

相关文章:

r - 在 Ubuntu 18.x 和 R 3.4.4/3.5.1 上安装 tidyverse

Java - Socket.writeObject() 真的很慢

c++ - 是否可以关闭 gcc 的自动并行化?

algorithm - 并行排序算法的好选择来实现作为家庭作业?

python-2.7 - 将 multiprocessing.Pool 与异常处理结合使用

r - 使用泰勒展开式估计比率的标准偏差

R包MatchIt错误汇总输出

java - 获取 java.net.SocketException : Malformed reply from SOCKS server Exception

c# - 套接字与服务对话是否有效?

python - rpy2 找不到包含目录