【问题标题】:R programming: parpvclust script getting killedR 编程:parpvclust 脚本被杀死
【发布时间】:2015-09-24 01:33:31
【问题描述】:

我目前正在尝试通过 pvclust 库运行并行层次聚类,使用命令 parPvclust。我使用的数据集是 57 行乘 30000 列。我运行程序。从我的 nohup.out 我得到以下信息:

`[1] "2015-09-23 11:31:31 EDT"
 [1] "Data transposed"
 [1] "2015-09-23 11:31:39 EDT"
 [1] "start clustering"
 Multiscale bootstrap...`

然后与我的 nohup.out 分开。命令行吐出Killed,但如果我运行top,它们仍然是运行的R进程。这是一张照片:

这是我的脚本。

#parallel clustering via pvclust library
library(data.table)
library(reshape2)
library(parallel)
library(pvclust)

nabec <- fread("/labshare/Nick/projects/nabec/pilot/normalized.transcripts.usable.autosomal.1.txt")

#transpose file
nabecCohort.T <- dcast.data.table(melt(nabec, id.vars = "ID"), variable ~ ID)
testNabec <- nabecCohort.T[2:58, 2:dim(nabecCohort.T)[2], with = F]
testNabec <- sapply(testNabec, as.numeric)

Sys.time()
print("Data transposed")

cl <- makeCluster(23)

Sys.time()
print("start clustering")
nabec.pv <- parPvclust(cl,testNabec[1:57,],nboot=1000)

我找到了这篇文章,但它并没有太大帮助。

我还能解决哪些其他问题?有什么想法吗?我没有收到诸如“无法分配大小的向量..”之类的错误。

编辑:对于数据集的较小子样本(57 行 * 1000 列),脚本也可以正常运行

【问题讨论】:

  • C 和 Fortran 代码中的任何类型的编程错误都可能导致此问题。消息Killed 发生在进程被杀死时,例如由系统或管理员。例如,您可能需要检查 dmesg 的输出 - 因为它看起来确实内存不足。
  • 酷谢谢!基于dmesg。我认为你的权利@Anony-Mousse

标签: r parallel-processing cluster-computing cluster-analysis


【解决方案1】:

您的系统可能内存不足。

请看dmesg的输出。

当您的操作系统内存不足时,作为最后的措施,它会调用OOM killer。它根据一些标准选择一个进程,并终止该进程以释放一些系统内存。如果发生这种情况,它将在dmesg 和您的系统日志中显示。

当您的系统严重耗尽内存时,您的主要R 进程似乎已被杀死。如果您想提前失败,实际上减少交换大小可能会有所帮助。交换只需要足够大以存储不需要的系统部分(例如未使用的服务)。

不幸的是,R 可能非常消耗内存。它可能有助于例如将testNabec[1:57,] 写入文件,然后在 fresh 会话中再次加载它。尝试找出哪些行导致的内存消耗最多。

哦,当然要杀死僵尸进程。您似乎有许多 R 进程正在运行,每个进程都使用 10 GB 的 RAM...

【讨论】:

  • dmesg 日志显示进程已被杀死,因为它占用了太多内存。 parPVclust 行是杀死它的行。我可能不得不转移到另一个函数或过滤我的数据。谢谢(你的)信息。 @Anony-Mousse
  • @Anony_Mousse。我希望您可以扩展“如果您想早点失败,这可能有助于实际减少交换大小。交换只需要足够大以存储不需要的系统部分(例如未使用的服务)。”因为我什至不知道“交换大小”是什么?
  • 交换需要时间。如果您的系统内存不足并求助于交换,那是浪费时间。最好让它立即失败,而不是试图通过交换来生存更长的时间(然后内存不足)。唯一应该进入交换的是你的任务不需要的东西。例如。您可能正在运行打印服务。它使用几兆字节的内存。那应该去交换,除非你打算打印。
  • 交换大小是交换分区的大小。您已配置和使用了 8 GB 的交换空间。
  • 所以我发现 R 保存了我试图在内存中为每个节点集群的对象(不确定这是否是正确的词),我用来制作我的计算集群(例如 @ 987654328@) 由于我正在处理的服务器只有 ~180GB,它会崩溃为 23 * 10.9GB > ~180GB。但是,如果我简单地减少 cl &lt;- makeCluster(8) 它就可以了。只是觉得你应该知道我是如何解决的。
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2017-01-23
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多