`future.apply::future_apply()` 中的`purrr::map()` 之类的函数是否也是并行的 运行?
Is a function like `purrr::map()` within `future.apply::future_apply()` also being ran in parallel?
抱歉,如果这些问题很愚蠢,但我对并行处理在实践中的工作原理几乎一无所知。
我的问题是:
- Q1。 future.apply::future_apply()
中的 purrr::map()
之类的函数是否也被并行 运行?
- Q2。如果我在 future.apply()
函数中 运行 furrr::future_map()
会发生什么?
- Q3。假设我执行了上述操作,我会在 furrr::future_map()
之前添加另一个 plan(multiprocess)
调用吗?
future 框架的作者。
- Q1. Is a function like
purrr::map()
within future.apply::future_apply()
also being ran in parallel?
没有。 'purrr' 中没有 运行 并行的内容。
- Q2. What happens if I run
furrr::future_map()
inside of a future.apply()
function?
会依次回落到运行,即plan(sequential)
。这样做的原因是为了防止递归、嵌套并行,这是很少需要的。这将在未来的小插图 'A Future for R: Future Topologies' 中进行解释。在某些情况下,嵌套并行是合理的,例如在多台机器上进行分布式处理,然后在每台机器上并行处理多个内核。这可以通过使用
来完成
plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
- Q3. Assuming I did the above, would I include another
plan(multiprocess)
call before furrr::future_map()
?
您不想设置 plan()
"inside" 您的代码/函数。将 plan()
的控制权留给将使用您的 code/call 您的功能的任何人。此外,人们不希望使用 plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores)))
中的嵌套内核数,因为这将使用 ncores^2
内核,这会使您的计算机过载。使用默认的核心数plan(list(multisession, multisession))
不会有这个问题,因为在第二层无论如何也只有一个核心可用。
抱歉,如果这些问题很愚蠢,但我对并行处理在实践中的工作原理几乎一无所知。
我的问题是:
- Q1。 future.apply::future_apply()
中的 purrr::map()
之类的函数是否也被并行 运行?
- Q2。如果我在 future.apply()
函数中 运行 furrr::future_map()
会发生什么?
- Q3。假设我执行了上述操作,我会在 furrr::future_map()
之前添加另一个 plan(multiprocess)
调用吗?
future 框架的作者。
- Q1. Is a function like
purrr::map()
withinfuture.apply::future_apply()
also being ran in parallel?
没有。 'purrr' 中没有 运行 并行的内容。
- Q2. What happens if I run
furrr::future_map()
inside of afuture.apply()
function?
会依次回落到运行,即plan(sequential)
。这样做的原因是为了防止递归、嵌套并行,这是很少需要的。这将在未来的小插图 'A Future for R: Future Topologies' 中进行解释。在某些情况下,嵌套并行是合理的,例如在多台机器上进行分布式处理,然后在每台机器上并行处理多个内核。这可以通过使用
plan(list(tweak(cluster, workers = c("n1", "n2", "n3")), multisession))
- Q3. Assuming I did the above, would I include another
plan(multiprocess)
call beforefurrr::future_map()
?
您不想设置 plan()
"inside" 您的代码/函数。将 plan()
的控制权留给将使用您的 code/call 您的功能的任何人。此外,人们不希望使用 plan(list(tweak(multisession, workers = ncores), tweak(multisession, workers = ncores)))
中的嵌套内核数,因为这将使用 ncores^2
内核,这会使您的计算机过载。使用默认的核心数plan(list(multisession, multisession))
不会有这个问题,因为在第二层无论如何也只有一个核心可用。