Отрицательная биномиальная регрессия в 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

Другие вопросы по тегам