我什么时候需要使用sfExport(R Snowfall软件包)

千克

我正在使用降雪进行并行计算。我始终只在一台具有多个CPU(> 20核)的计算机上。我正在处理大量数据(> 20gb)。sfExport()需要很长时间。

当我在笔记本电脑上运行测试代码并检查CPU使用率时,有时即使没有sfExport()也可以使用。

我的代码的某些部分是嵌套的sfLapply()函数。喜欢:

func2 <- function(c,d, ...) {      

  result <- 
    list(x = c+d,
         y = ..,
         ...
         )

  return(result)

}

func1 <- function(x, a, b, c, ...) {

  library(snowfall)
  d <- a+b

  result <- sfLapply(as.list(b$row), func2, c, d, ...)

  return(result)
}

result <- sfLapply(as.list(data.table$row), func1, a, b, c, ..)

我何时真正需要将数据导出到所有CPU?

谢谢,最好的问候尼科

史蒂夫·韦斯顿

如果要将20 gb对象导出到所有群集工作程序,则将花费大量时间并使用大量内存。每个工作人员将收到该20 GB对象的副本,因此您可能必须减少工作人员的数量以减少总内存使用量,否则您的计算机可能开始崩溃,程序最终可能死机。在这种情况下,使用更少的工人可能会更快。当然,如果您的计算机具有512 gb的RAM,则使用20个工作程序可能会很好,尽管将对象发送给所有工作程序仍需要很长时间。

如果每个工作人员都需要特定的数据帧或矩阵来执行工作人员功能,则导出它可能是正确的选择。如果每个工作人员仅需要对象的一部分,则应将其拆分,并仅发送每个工作人员所需的部分。关键是确切确定工作函数需要哪些数据,然后仅发送所需的数据。

如果即使您不导出对象,似乎该对象仍在魔术师面前出现,则可能是在函数闭包中捕获了该对象。这是一个例子:

library (snowfall)
sfInit (parallel=TRUE , cpus=4)
fun <- function() {
  x <- 100
  worker <- function(n) x * n
  sfLapply(1:1000, worker)
}
r <- fun()

这可以正常工作,但是将变量“ x”发送到集群工作程序的方式并不明显。答案是当sfLapply将任务发送给工作人员时,“ x”与“工作人员”功能一起被序列化,因为“工作人员”是在函数“ fun”中定义的。在这种情况下,通过sfExport将“ x”导出到工人是浪费时间。还要注意,尽管该技术在sfLapply上效果很好,但在诸如sfClusterApply和sfClusterApplyLB之类的函数中却无法很好地发挥作用,但这些函数不会像sfLapply那样执行任务分块,尽管“ x”很大时,这只是一个问题。

除了要说您的辅助函数在另一个函数中定义时要格外小心,我将不再对此主题进行详细介绍。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么时候在Java中使用单独的软件包?

来自分类Dev

什么时候应该安装“ * -dev”软件包?

来自分类Dev

什么时候可以重复安装npm软件包?

来自分类Dev

R的ImageJ软件包

来自分类Dev

使用Go软件包

来自分类Dev

使用npm软件包

来自分类Dev

Go软件包应该在什么时候使用log.Fatal?

来自分类Dev

Azure需要使用“ yum”安装软件包

来自分类Dev

使用make需要哪些软件包?

来自分类Dev

我缺少什么openGL软件包?

来自分类Dev

谁在使用我的Go软件包

来自分类Dev

使用Dockerfile安装R软件包

来自分类Dev

需要更新的软件包列表

来自分类Dev

需要脚本中的软件包

来自分类Dev

需要安装Dnx Runtime软件包

来自分类Dev

Debian不再需要软件包

来自分类Dev

Dnx Runtime软件包需要安装

来自分类Dev

什么是Snap软件包,Click软件包和Snap软件包有什么区别?

来自分类Dev

为什么安装Firefox软件包需要软件包'xul-ext-ubufox'?

来自分类Dev

我有哪个软件包版本?

来自分类Dev

无法npm安装我的软件包

来自分类Dev

我如何降级软件包?

来自分类Dev

我如何要求升级软件包?

来自分类Dev

我无法安装预测软件包

来自分类Dev

* -doc软件包的用途是什么?

来自分类Dev

什么是Chocolatey“安装”软件包?

来自分类Dev

* -doc软件包的用途是什么?

来自分类Dev

cygwin使用perl需要什么软件包

来自分类Dev

比较R软件包的开发版本