gpt4 book ai didi

r - 指定在 doSNOW 集群中加载哪些对象

转载 作者:行者123 更新时间:2023-12-01 12:50:22 26 4
gpt4 key购买 nike

我有一个关于 R 中的 doSNOW 集群的基本问题。当我们在 R 中注册并行集群时,它会将全局环境中分配的所有变量(数据)加载到并行集群。有什么办法,我们可以指定在并行集群中加载哪些对象?

更具体一点。考虑以下示例。我在全局环境中有两个变量 x 和 y。当我注册集群时,它会将 x 和 y 加载到已注册的集群中。但是,我只需要并行集群中的 x 而不是 y。

library(doSNOW)

cl <- makeCluster(2, type="SOCK")

registerDoSNOW(cl)


x <- 1:5

y <- 6:10

foreach(x=x, .combine=c) %dopar% x^2

stopCluster(cl)

由于设置并行集群需要时间,当全局环境中有大量数据(或大数据集)但您不需要所有数据时,它可以帮助减少该时间并行集群。

最佳答案

注册 doSNOW 后,变量不会导出到工作程序。只有在执行 foreach 循环时,变量才会自动导出给工作人员,即便如此,它也只会导出在 foreach 循环主体中实际引用并在“本地”环境(不是全局环境)中定义的变量例如,如果 foreach 循环在函数中执行)。它使用这种保守的方法来避免向工作人员发送计算不需要的巨大对象。

还需要注意的是,自动导出的变量不会导出到 worker 的全局环境中,即使它们是在 master 的全局环境中定义的。它们在 doSNOW 设置的特殊环境中定义,因此它们不会破坏您可能使用 clusterExport 函数创建的任何全局变量,例如。

您可以使用 foreach .verbose=TRUE 选项来获取由 doSNOW 自动导出的变量列表。这是您的示例的报告:

> foreach(x=x, .combine='c', .verbose=TRUE) %dopar% {
+ x ^ 2
+ }
no variables are automatically exported

如果要防止自动导出特定变量,可以使用 foreach .noexport 选项。如果您想使用 clusterExport 将大型数据框导出一次给工作人员,然后在多个 foreach 循环中使用它,这可能很有用。

关于r - 指定在 doSNOW 集群中加载哪些对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34347905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com