ClusterExport крупных объектов в пакете Parallel - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть таблица данных 6,5 Гб.Я хотел бы сделать несколько параллельных вычислений в цикле с ParLapply (например, выполнение регрессий).В настоящий момент, когда я пытаюсь clusterExport в параллельном пакете, это занимает много времени (я никогда не видел, чтобы он заканчивал его экспортировать).

У меня 16 ядер и 64 ГБ оперативной памяти.Это нормально?Как я мог ускорить экспорт большой таблицы данных?

num_cores = (detectCores(all.tests = FALSE, logical = TRUE) - 2)
workers <- parallel::makePSOCKcluster(num_cores, useXDR=F)
for(pck_name in required.pck){ 
  clusterExport(workers, c("pck_name"), envir = environment())
  clusterEvalQ(workers, library(pck_name, character.only=TRUE))
}

# Bit that freezes up 
clusterExport(workers, varlist = c("big_data_table"), envir 
= environment()) 

1 Ответ

0 голосов
/ 24 сентября 2018

Вместо того, чтобы экспортировать объект в памяти, рассмотрите сохранение его на диск (используя save или saveRDS), а затем загрузку его в рабочие процессы.

Обратите внимание также на то, что вы делаете этов результате вы получите отдельный объект размером 6,5 ГБ в каждом рабочем процессе.С 16 ядрами x2 для гиперпоточности (которую вы используете с detectCores(logical=TRUE)), это 32 - 2 = 30 процессов.Так что на самом деле у вас недостаточно памяти для всех этих таблиц данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...