Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R当我有140GB+时,foreach错误无法分配大小34.6GB;分配给R的内存_R_Foreach - Fatal编程技术网

R当我有140GB+时,foreach错误无法分配大小34.6GB;分配给R的内存

R当我有140GB+时,foreach错误无法分配大小34.6GB;分配给R的内存,r,foreach,R,Foreach,我正在尝试使用R的doSNOW和foreach软件包来并行化ranger随机森林分类预测,该文件的记录略多于15MM,属性为82个 我使用的是m4.10xlarge大小的AWS EC2实例。这是一个Windows操作系统,R为64位。我已经为R分配了超过100GB的RAM,并且清除了所有的垃圾内存。我只有一个random forest ranger模型和15MM record dataframe作为R中的对象,但是当我尝试运行我的代码时(不管我尝试了哪些拆分/块),我会得到类似以下的错误: er

我正在尝试使用R的doSNOWforeach软件包来并行化ranger随机森林分类预测,该文件的记录略多于15MM,属性为82个

我使用的是m4.10xlarge大小的AWS EC2实例。这是一个Windows操作系统,R为64位。我已经为R分配了超过100GB的RAM,并且清除了所有的垃圾内存。我只有一个random forest ranger模型和15MM record dataframe作为R中的对象,但是当我尝试运行我的代码时(不管我尝试了哪些拆分/块),我会得到类似以下的错误:

error calling combine function:
<simpleError: cannot allocate vector of size 34.6 Gb>
调用联合收割机函数时出错: 对于每个记录,我预测每个树上的类,以便以后计算类概率。我可以在整个文件上轻松地运行预测,但它太慢了,而且我还有很多文件要预测。我所要做的就是加速这个过程,但不管我做什么,我总是会遇到这个错误。我花了数小时在线查找信息,但找不到其他有此问题的人

这是我的预测代码:

num_splits <- 7
cl <- makeCluster(num_splits,outfile="cluster.txt")
registerDoSNOW(cl)

writeLines(c(""), "log.txt")

system.time(
 predictions<-foreach(d=isplitRows(df2, chunks=num_splits),
                   .combine = rbind, .packages=c("ranger")) %dopar% {
                     sink("log.txt", append=TRUE)
                    (predict(model1, data=d,predict.all=TRUE)$predictions)
                   })
stopCluster(cl) 

num\u拆分这意味着内存不足。您有时会看到类似于
的错误。这只是意味着没有足够的空闲内存用于进程的下一步。一个建议是删除
.combine=rbind
foreach
随后将返回一个列表。之后您将有机会合并结果。非常感谢您的建议--我现在就试试。我只是觉得很奇怪,当我分配给R的内存太多,而我的对象几乎不占用任何内存时,我的内存就用完了,但可能是试图在一个步骤中将所有内存组合在一起导致了问题。每次调用
rbind
时,至少必须创建两个副本,对于大数据,这可能代价高昂,而且每次迭代可能会导致可用内存的一些碎片,从而减少在后续迭代中有用的内存。列表项不进行复制,并允许R将对象存储在活动内存的不同部分(我不完全确定我声明的第二部分,但我有适度的信心它是正确的)。谢谢!!!你是100%正确的,你救了我一个通宵不睡觉的机会!有了5个内核,我可以在10分钟内运行代码,而没有并行化的情况下只需50分钟。我想我自己永远也想不到rbind会这样。这么快的问题,列表是否会按照我的15MM记录数据集的顺序排列,这样我就可以按照列表的顺序进行组合?我意识到这只是在事实发生后列表上的rbind。。。很容易!再次感谢!