Я написал функцию, где я выполняю некоторый код параллельно:
cl <- makeCluster(nc, outfile = "")
registerDoParallel(cl, nc)
pred <- foreach(s = iter(seq(1L,length(dfr_missings))),
.packages = c('RANN', 'randomForest','magrittr'),
.errorhandling = 'stop',
.verbose = F,
.combine = 'cbind',
.export = c("myRoughfix")) %dopar% {
#
#some code goes here
#
}
stopCluster(cl)
stopImplicitCluster()
Функция работает, как и ожидалось, с меньшими кадрами данных. Однако мне нужно, чтобы он работал с большими.
Я получаю следующую ошибку:
Error in unserialize(socklist[[n]]) : error reading from connection
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Насколько я понимаю сообщение об ошибке, это означает, что мне не хватило памяти. Размер кадра данных, с которым у меня возникают проблемы, составляет ~ 770 МБ. Я работаю на машине с 256 ГБ оперативной памяти и 48 ядрами. Я ожидаю, что эта машина сможет справиться с таким большим объектом. Код не делает ничего, что потребляет много памяти.
Поэтому мой вопрос — возможно ли, что для рабочих установлены ограничения памяти, которыми можно управлять с помощью глобальной опции? Возможно, опция для ОС или makeCluster ().
Любые другие мысли приветствуются.
Постскриптум Я нахожусь на предустановленной виртуальной машине на 64-битной версии Oracle Linux с версией R — «Oracle Distribution of R версия 3.1.1»
Задача ещё не решена.
Других решений пока нет …