【问题标题】:R script exhausting memory - Microsoft HPC ClusterR 脚本耗尽内存 - Microsoft HPC 集群
【发布时间】:2012-04-17 07:47:59
【问题描述】:

我有一个包含以下源代码的 R 脚本:

genofile<-read.table("D_G.txt", header=T, sep=',')
genofile<-genofile[genofile$"GC_SCORE">0.15,]
cat(unique(as.vector(genofile[,2])), file="GF_uniqueIDs.txt", sep='\n')

D_G.txt 是一个巨大的文件,大约 5 GB。

现在,计算是在 Microsoft HPC 集群上执行的,因此,如您所知,当我提交作业时,它会在不同的物理节点上“拆分”;就我而言,每个都有 4 GB 的 RAM 内存。

好吧,经过一段时间后,我收到了臭名昭著的错误cannot allocate vector of size xxx Mb 消息。我尝试使用限制可用内存的开关:

--max-memory=1GB

但没有任何改变。

我已经尝试了 32 位和 64 位的 Rscript 2.15.0,但没有成功。

【问题讨论】:

  • 看来这样的工作不需要集群。在这种情况下,您可以读取文件并逐行过滤。但是,如果您需要加快处理速度,那么您可能需要将文件拆分为单独的块,并按照 Paul 的建议在不同的节点上处理它们。当然,请添加一些代码,如何在 R 中启动集群并将作业发送到节点。我认为这会有所帮助。
  • 感谢@DrDom,我终于拆分了文件(请在 Paul 的回答下查看我的评论)

标签: r hpc rscript


【解决方案1】:

您的数据集应该适合一个节点的内存这一事实并不意味着在对其执行分析时也意味着它适合内存。经常分析导致数据复制。此外,您身边的一些低效编程也可能会增加内存使用量。设置开关和限制 R 的内存使用只会让事情变得更糟。它不限制实际内存使用量,它限制最大内存使用量。并且使用 32 位操作系统在内存方面总是有点想法,因为使用 32 位操作系统的单个进程可以寻址的最大内存小于 4 GB。

如果没有更多详细信息,很难进一步帮助您解决此问题。一般来说,我会建议将数据集切割成越来越小的部分,直到你成功。我假设你的问题是令人尴尬的并行,进一步切割你的数据集不会改变任何输出。

【讨论】:

  • 这是我想出的: - 我已经修改了脚本以允许在命令行上指定输入/输出文件。 - 将输入文件拆分为 10 个块,每个块约为 500 MB - 在 Microsoft HPC 作业管理器下定义了一个扫描任务,该任务在不同的物理节点上为每个输入文件启动一个单独的 R 实例。现在一切正常。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 2015-08-23
  • 2012-11-10
  • 2012-08-19
  • 2011-02-09
  • 2015-10-01
相关资源
最近更新 更多