R 中使用 brm 的负二项式回归在使用多核时导致错误
Negative binomial regression in R using brm causing error when using multiple cores
我正在使用 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
回溯说 Error in makePSOCKcluster(names = spec, ...) : Cluster setup failed. 4 of 4 workers failed to connect.
我试图理解这个问题,阅读了一些关于 SO 的问题,例如 this,但无法弄清楚为什么我无法连接。我正在使用 macOS Mojave,问题不在于我尝试使用比可能更多的内核。关于如何在多核上达到 运行 有什么建议吗?
编辑:
正如 sjp 在他的回答中指出的那样,RStudio 存在问题。我想我在我的问题中分享了解决问题的代码,所以每个遇到问题的人都可以解决这个问题而无需进一步点击(和阅读)。
问题是来自 R-4.0.0 的 parallel
包。 - 但来自 this stan 论坛的用户提供了解决方法。如果您可以像这样使用 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
Stan 论坛:https://discourse.mc-stan.org/t/r-4-0-0-and-cran-macos-binaries/13989/13
我正在使用 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
回溯说 Error in makePSOCKcluster(names = spec, ...) : Cluster setup failed. 4 of 4 workers failed to connect.
我试图理解这个问题,阅读了一些关于 SO 的问题,例如 this,但无法弄清楚为什么我无法连接。我正在使用 macOS Mojave,问题不在于我尝试使用比可能更多的内核。关于如何在多核上达到 运行 有什么建议吗?
编辑: 正如 sjp 在他的回答中指出的那样,RStudio 存在问题。我想我在我的问题中分享了解决问题的代码,所以每个遇到问题的人都可以解决这个问题而无需进一步点击(和阅读)。
问题是来自 R-4.0.0 的 parallel
包。 - 但来自 this stan 论坛的用户提供了解决方法。如果您可以像这样使用 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
Stan 论坛:https://discourse.mc-stan.org/t/r-4-0-0-and-cran-macos-binaries/13989/13