2

我在带有 doParallel 和 foreach 包(OpenMP)的集群节点上使用 R。

我运行了第一个脚本,它给了我两个对象作为结果并将它们保存为 RData。

在一个单独的脚本上,我加载了包含两个要进一步处理的对象的 RData,但是当我并行使用 foreach 循环时,我得到一个“任务 1,无法打开连接”。我怀疑加载的 RData 可能有问题。

我决定在我的台式计算机上尝试这个简单的工作示例:

1/ 我首先运行这个简单的代码:

library("doParallel")
library("foreach")
registerDoParallel(cores=3)

x<-matrix(rnorm(2000),nrow=10,ncol=200)
squarex<-foreach(i=1:10)%dopar%{x[,i]^2}

一切正常

2/然后我加载我之前保存在集群上的 RData

load("xxx.RData")

这两个对象在那里。

3/如果我尝试再次运行 1,这与 2 完全无关,那么我得到错误:

mcfork() 中的错误:无法分叉,可能的原因:无法分配内存

实际上,使用并行包的所有东西都不再起作用了。尝试注册核心不起作用,有时甚至挂起。

显然,某些东西必须从集群环境导入到导致问题的 RData 中。但是我不知道为什么,如果我直接在集群上执行相同的步骤,问题仍然存在。

信息:

加载数据集之前的 ls():

ls()
[1] "squarex" "x" 

加载数据集后的 ls():ls()

[1] "squarex"                      "trandom_list_data_Ana_all"         "trandom_list_data_Anatem_all"
[4] "x"  

trandom_list* 是加载的两个对象,每个都是 8.7Gb(集群节点有 47Gb,我的计算机有 32Gb RAM)

dput(xxx.RData) 给出一个以 list(structure(c(0, 0, 0, 0, 0.1, 0, 0, 5.2

并以奇怪的方式结束

2, 0, 0, 0, 0, 0, 0, 0, 31.5, 11.9, 0.1, 0, 0, 0, 0.1, 0, 2.5, 10.2

那是没有“)”..也许de dput没有完全完成,因为该过程完成时RAM已满(但交换仍然可以)。

4

0 回答 0