Является ли функция типа `purrr::map()` внутри `future.apply::future_apply()` также запущенной параллельно?
Извините, если это глупые вопросы, но я почти ничего не знаю о том, как параллельная обработка работает на практике.
Мои вопросы:
- Q1. Это функция как purrr::map()
в future.apply::future_apply()
также работает параллельно?
- Q2. Что произойдет, если я бегу furrr::future_map()
внутри future.apply()
функционировать?
- Q3. Предполагая, что я сделал выше, я бы включил другой plan(multiprocess)
звонить раньше furrr::future_map()
?
1 ответ
Автор будущих рамок здесь.
- Q1. Это функция как
purrr::map()
вfuture.apply::future_apply()
также работает параллельно?
Нет. В мурлыканье нет ничего, что работает параллельно.
- Q2. Что произойдет, если я бегу
furrr::future_map()
внутриfuture.apply()
функционировать?
Он будет работать последовательно, а это plan(sequential)
, Причина этого заключается в защите от рекурсивного вложенного параллелизма, который редко требуется. Это объясняется в будущей виньетке "Будущее R: топологии будущего". В некоторых случаях целесообразно использовать параллельный параллелизм, например распределенную обработку на нескольких машинах, когда вы, в свою очередь, выполняете параллельное соединение между несколькими ядрами на каждой машине. Это можно сделать с помощью
plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
- Q3. Предполагая, что я сделал выше, я бы включил другой
plan(multiprocess)
звонить раньшеfurrr::future_map()
?
Вы не хотите устанавливать plan()
"внутри" вы код / функции. Оставьте контроль над plan()
тому, кто будет использовать ваш код / вызывать ваши функции. Кроме того, никто не хочет для вложенного числа ядер, таких как в plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores)))
потому что это будет использовать ncores^2
ядра, которые будут перегружать ваш компьютер. Используя количество ядер по умолчанию как plan(list(multisession, multisession))
не будет иметь этой проблемы, потому что во втором слое в любом случае будет доступно только одно ядро.