Есть ли портативная альтернатива для регистрации DoM C? - PullRequest
0 голосов
/ 08 января 2020

Сначала я установил doMC::registerDoMC(...), но потом понял, что он не работает на windows и подумал, что, может быть, это на самом деле не нужно, поскольку мне нужна только параллельная обработка следующих функций, которые ничего не сообщают о doMC в их документации:

parallel::mclapply(..., mc.cores = ncores)
caret::train(..., trControl = trainControl(..., allowParallel=T))

Однако, к моему удивлению, все работает без сердечника без doMC::registerDoMC(...)

Есть ли портативный способ заменить doMC::registerDoMC(...) на?

ОБНОВЛЕНИЕ

В Ubuntu 18.04 с R 3.6.x, имеющим:

ncores <- parallel::detectCores()

Если заменить это:

if(!require(doMC)) install.packages("doMC")
registerDoMC(ncores)

caret::train(..., trControl = trainControl(..., allowParallel=T))

этим :

if(!require(doParallel)) install.packages("doParallel")
cl <- makeCluster(ncores)
registerDoParallel(cl, ncores)

caret::train(..., trControl = trainControl(..., allowParallel=T))

stopImplicitCluster()

Затем caret::train падает через 2 секунды

Aggregating results
Something is wrong; all the RMSE metric values are missing:
      RMSE        Rsquared        MAE     
 Min.   : NA   Min.   : NA   Min.   : NA  
 1st Qu.: NA   1st Qu.: NA   1st Qu.: NA  
 Median : NA   Median : NA   Median : NA  
 Mean   :NaN   Mean   :NaN   Mean   :NaN  
 3rd Qu.: NA   3rd Qu.: NA   3rd Qu.: NA  
 Max.   : NA   Max.   : NA   Max.   : NA  
 NA's   :162   NA's   :162   NA's   :162  
Error: Stopping
In addition: Warning message:
In nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo,  :
  There were missing values in resampled performance measures.

1 Ответ

1 голос
/ 08 января 2020

(Отказ от ответственности: я автор)

Попробуйте doFuture foreach backend;

doFuture::registerDoFuture()
future::plan("multisession")

Я запускаю все caret примеры с различными будущими параллельными бэкэндами как часть проверочных тестов doFuture. Это далеко они все проходят с doFuture (https://travis-ci.org/HenrikBengtsson/doFuture), который предполагает, что будущей структуре удалось автоматически идентифицировать все глобальные переменные, которые должны быть экспортированы в фоновые рабочие. Это не относится, скажем, к doParallel (cl = cluster) - я думаю, что основная причина в том, что распараллеливание в каретке было (только?) Протестировано с многоядерным бэкэндом, где глобалы "просто работают", например, DoM C.

...