我在使用doParallel和foreach软件包(OpenMP)的集群节点上使用R.
我运行了第一个脚本,它给了我两个对象作为结果,并将它们保存为RData。
在一个单独的脚本上,我加载了包含要进一步处理的两个对象的RData,但是我得到了一个"任务1,无法打开连接"当我并行使用foreach循环时。我怀疑加载的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)给出一个以...开头的4,9Gb文本文件 list(结构(c(0,0,0,0,0,0,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
没有&#34;)&#34; ..当完成进程时,可能完全没有完成RAM作为完整的RAM(但是交换仍然没问题)。