Что влияет на время создания кластера с использованием параллельного пакета?
Я испытываю медлительность при создании кластеров с использованием пакета parallel
.
Вот функция, которая только создает, а затем останавливает кластер PSOCK, с узлами n
.
library(parallel)
library(microbenchmark)
f <- function(n)
{
cl <- makeCluster(n)
on.exit(stopCluster(cl))
}
microbenchmark(f(2), f(4), times = 10)
## Unit: seconds
## expr min lq median uq max neval
## f(2) 4.095315 4.103224 4.206586 5.080307 5.991463 10
## f(4) 8.150088 8.179489 8.391088 8.822470 9.226745 10
Моя машина (достаточно современная 4-ядерная рабочая станция под управлением Win 7 Pro) занимает около 4 секунд, чтобы создать два кластера node и 8 секунд для создания четырех кластеров node. Это показалось мне слишком медленным, поэтому я попробовал одно и то же профилирование на коллеге, идентично обработанной машиной, и потребовалось одну/две секунды для двух тестов соответственно.
Это предполагает, что у меня может быть некоторая нечетная конфигурация, установленная на моей машине, или что есть еще одна проблема. Я прочитал страницы справки ?makeCluster
и socketConnection
, но не видел ничего, связанные с улучшением производительности.
Я смотрел в диспетчере задач Windows во время работы кода: не было очевидных помех антивирусному или другому программному обеспечению, а только процесс Rscript, работающий на ~ 17% (менее одного ядра).
Я не знаю, где искать источник проблемы. Существуют ли какие-либо известные причины медленности с созданием кластера PSOCK под Windows?
Является ли 8-секундное создание кластера 4- node на самом деле медленным (по стандартам 2014 года), или мои ожидания слишком высоки?
Ответы
Ответ 1
Чтобы отслеживать происходящее, я установил и открыл Process Monitor (HT @qethanm). Я также вышел из большинства вещей в моем системном лотке, таком как Dropbox, чтобы генерировать меньше шума. (Хотя, в конце концов, это не имело значения.)
Затем я повторно запустил упрощенную версию кода R в вопросе, непосредственно из R GUI (вместо IDE).
microbenchmark(f(4), times = 5)
После некоторого копания я заметил, что R GUI создает процесс Rscript для каждого создаваемого кластера (см. рисунок).
![the process tree shows an Rscript instance for each node in each cluster]()
После многих тупиков и диких гусей, мне пришло в голову, что, возможно, эти экземпляры Rscript не были ванилью R. Я переименовал свой файл Rprofile.site
, чтобы скрыть его и повторил эталон.
На этот раз кластер 4 node был создан, в среднем, всего за секунду.
Для четырех кластеров node файл Rprofile.site
(и, предположительно, файл личного запуска, ~/.Rprofile
, если он существует) читается четыре раза, что может значительно замедлить работу. Перейдите rscript_args = c("--no-init-file", "--no-site-file", "--no-environ")
в makeCluster
, чтобы избежать этого.