【问题标题】:ClusterExport of large objects in Parallel packageParallel 包中大对象的 ClusterExport
【发布时间】:2018-09-24 09:51:28
【问题描述】:

我有一个 6.5Gb 的数据表。我想用ParLapply 在一个循环中做一些并行计算(例如运行回归)。目前,当我在并行包中尝试clusterExport 时,它需要很长时间(我从未见过它完成导出它)。

我有 16 个内核和 64Gb 的 RAM。正常吗?如何加快大数据表的导出速度?

num_cores = (detectCores(all.tests = FALSE, logical = TRUE) - 2)
workers <- parallel::makePSOCKcluster(num_cores, useXDR=F)
for(pck_name in required.pck){ 
  clusterExport(workers, c("pck_name"), envir = environment())
  clusterEvalQ(workers, library(pck_name, character.only=TRUE))
}

# Bit that freezes up 
clusterExport(workers, varlist = c("big_data_table"), envir 
= environment()) 

【问题讨论】:

    标签: r parallel-processing


    【解决方案1】:

    与其导出内存中的对象,不如考虑将其保存到磁盘(使用savesaveRDS),然后将其加载到工作进程中。

    另请注意,无论您采用哪种方式,最终都会在每个工作进程中获得一个单独的 6.5GB 对象。具有 16 个内核 x2 用于超线程(您与 detectCores(logical=TRUE) 一起使用),即 32 - 2 = 30 个进程。所以你实际上没有足够的内存来存储所有这些数据表。

    【讨论】:

    • 所以你的意思是最好的方法是设置detectCores(logical=FALSE),然后在parLapply中加载big_data_table?即使在那种情况下,鉴于我只有 64Gb 的 RAM,我可能无法为此运行超过 6-8 个线程 [so workers = 6?]?
    • 您应该将工作人员的数量设置为您所拥有的内存中的任何内容。不要忘记你正在做的任何其他事情(包括后台服务)也会使用内存
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 2018-06-25
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多