【问题标题】:parallel processing in R using snow使用雪在 R 中进行并行处理
【发布时间】:2015-02-13 19:15:11
【问题描述】:

我有 1000 个列表,每个列表都有多个时间序列。我想将预测应用于列表中的每个元素。就计算资源而言,这已成为一个棘手的问题。我没有并行计算或高级 R 编程方面的背景知识。任何帮助将不胜感激。

我创建了虚拟列表。基本上, dat.list 与我正在研究的类似。

library("snow")
library("plyr")
library("forecast")

    ## Create Dummy Data

    z <- ts(matrix(rnorm(30,10,10), 100, 3), start = c(1961, 1), frequency = 12)
    lam <- 0.8
    ap <- list(z=z,lam=lam)

## forecast using lapply

    z <- ts(matrix(rnorm(30,10,10), 100, 3), start = c(1971, 1), frequency = 12)
    lam <- 0.5
    zp <- list(z=z,lam=lam)

    dat.list <- list(ap=ap,zp=zp)

    xa <- proc.time()
    tt <- lapply(dat.list,function(x) lapply(x$z,function(y) (forecast::ets(y))))
    xb <- proc.time()

上面的代码给了我我需要的东西。我想在上面的代码中对两个 lapply 应用并行处理。 所以我尝试使用雪包和site 中显示的示例。

  ## Parallel Processing


    clus <- makeCluster(3)
    custom.function <- function(x) lapply(x$z,function(y) (forecast::ets(y)))
    clusterExport(clus,"custom.function")

    x1 <- proc.time()
    tm <- parLapply(clus,dat.list,custom.function)
    x2<-proc.time()

    stopCluster(clus)

以下是我的问题,

  1. 由于某种原因,tm 的输出与非并行的不同 版本。预测函数 ets 应用于每个数据点,而不是列表中的元素。

非并行:

summary(tt)
   Length Class  Mode
ap 3      -none- list
zp 3      -none- list

平行版:

    summary(tm)
       Length Class  Mode
    ap 300    -none- list
    zp 300    -none- list
  1. 我的第二个问题是我应该如何在 自定义函数,基本上是一个嵌套的 parLapply

    custom.function

非常感谢您的帮助

【问题讨论】:

    标签: r parallel-processing lapply snow snowfall


    【解决方案1】:

    问题是forecast 包未加载到集群工作程序上,这导致lapply 错误地迭代ts 对象。您可以使用clusterEvalQforecast 加载到worker 上:

    clusterEvalQ(clus, library(forecast))
    

    要回答您的第二个问题,您对嵌套并行的尝试失败了,因为工作人员没有加载 snow 或定义 clus。但是,如果您有 1000 个列表,那么您应该有很多方法可以让所有内核保持忙碌,而不必担心嵌套并行性。你更有可能损害而不是帮助你的表现,而且这似乎没有必要。

    【讨论】:

    • 非常感谢史蒂夫。我使用了 llply 和 .parallel 工具,这给了我很好的性能。您能否为初学者推荐任何有关 R 并行计算的阅读材料/书籍?非常感谢
    • @forecaster Luke Tierney's page 有雪的信息; vignette('parallel')有并行信息;我来自 O'Reilly 的书提供了这两个方面的信息。 Norman Matloff 有一本关于并行计算(包括 R)的开源教科书,可从他的homepage 获得。我还建议阅读源代码,尤其是对于 parLapply 等高级函数。
    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-03-26
    • 1970-01-01
    • 2011-11-06
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多