Отрицательная биномиальная регрессия в R с использованием brm вызывает ошибку при использовании нескольких ядер
Я вычисляю отрицательную биномиальную регрессию, используя brm
функция от brms
пакет. Поскольку это занимает довольно много времени, я хотел бы использовать несколько ядер, как это предлагается в документации.
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, вроде этого, но не мог понять, почему я не могу подключиться. Я использую macOS Mojave, и проблема не в том, что я пытаюсь использовать больше ядер, чем возможно. Любые предложения о том, как я могу заставить это работать на нескольких ядрах?
Изменить: как указал sjp в своем ответе, есть проблема с RStudio. Я думал, что поделюсь кодом для решения проблемы прямо здесь, в моем вопросе, поэтому каждый, кто наткнется, может решить эту проблему, не щелкая (и не читая) дальше.
Проблема в том parallel
пакет из R-4.0.0. - но обходной путь предоставляется пользователем из этого форума. Если вы можете инициализировать кластеры с помощью 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")
}
1 ответ
Это известная проблема, связанная с 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