我多年来一直在R中重复执行一个函数脚本。在函数定义中,我使用:
在我的多核Windows工作站上设置并行集群 # cores0 <- 20 (cores set to 20 outside of function definition)
cl.spec <- rep("localhost", cores0)
cl <- makeCluster(cl.spec, type="SOCK", outfile="")
registerDoParallel(cl, cores=cores0)
截至昨天,我的功能执行不再有效,并且被挂了好几个小时。 (另外,使用资源监视器,我可以看到尽管我的脚本指定了20个核心,但我的所有CPU都没有活动)。当我回到函数并逐行测试行时,我发现以下行没有执行(即,它通常在几秒钟内执行时挂起):
cl.spec <- rep("localhost", cores0)
cl <- makeCluster(cl.spec, type="SOCK", outfile="")
我尝试查找问题并发现了几个使用&#34; PSOCK&#34;类型,但无法确定何时使用PSOCK与SOCK。尽管如此,我尝试使用&#34; PSOCK&#34;而不是&#34; SOCK&#34;:
cl <- makeCluster(cl.spec, type="PSOCK", outfile="")
registerDoParallel(cl, cores=cores0)
通过PSOCK修改,它不再挂起,它似乎执行此操作以及registerDoParallel()调用。
然而,当我执行包含上面两行的完整函数然后调用函数时,如下所示,我得到了一个我从未见过的错误:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
20 nodes produced errors; first error: object '.doSnowGlobals' not found
我也尝试过不指定类型或输出文件,但这会产生与使用type =&#34; PSOCK&#34;
相同的错误 cl <- makeCluster(cl.spec)
registerDoParallel(cl, cores=cores0)
我的问题: 1.为什么makeCluster()行可能会在以前从未挂起? cl&lt; - makeCluster(cl.spec,type =&#34; SOCK&#34;,outfile =&#34;&#34;)
这是包含makeCluster()和registerDoParallel()调用的函数定义和函数调用,如上所述:
# FUNCTION DEFINITION
FX_RFprocessingSNPruns <- function(path, CurrentRoundSNPlist, colSAMP, Nruns, ntreeIN, coresIN,CurrentRoundGTframeRDA){
...do a bunch of steps ...
#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# SET UP INTERNAL FUNCTION
#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ImpOOBerr<-function(x,y,d) {
create function
}
#################################################################
# SET UP THE CLUSTER
#################################################################
#Setup clusters via parallel/DoParallel
cl.spec <- rep("localhost", cores0)
cl <- makeCluster(cl.spec, type="PSOCK", outfile="")
registerDoParallel(cl, cores=cores0)
#################################################################
# *** EMPLOY foreach TO CARRY OUT randomForest IN PARALLEL
#################################################################
system.time(RFoutput_runs <- foreach(i=1:Nruns0, .combine='cbind', .packages= 'randomForest', .inorder=FALSE, .multicombine=TRUE, .errorhandling="remove")
%dopar% {
...do a bunch of steps ...
ImpOOBerr(x,y,d)
})
#################################################################
# STOP THE CLUSTER
#################################################################
stopCluster(cl)
return(RFoutput_runs)
}
# CALL FUNCTION
path0="C:/USERS/KDA/WORKING/"
system.time(GTtest_5runs <- FX_RFprocessingSNPruns(
path=path0,
CurrentRoundSNPlist="SNPlist.rda",
colSAMP=20,
Nruns=5,
ntreeIN=150,
coresIN=5,
CurrentRoundGTframeRDA="GT.rda"))
#Error in checkForRemoteErrors(lapply(cl, recvResult)) :
# 20 nodes produced errors; first error: object '.doSnowGlobals' not found.
我发现这些帖子引用了错误,但解决方案对我不起作用: error: object '.doSnowGlobals' not found? http://grokbase.com/t/r/r-sig-hpc/148880dpsm/error-object-dosnowglobals-not-found
我正在使用Windows 8计算机,64位,40核。
R.Version()
$platform
[1] "x86_64-w64-mingw32"
$arch
[1] "x86_64"
$os
[1] "mingw32"
$system
[1] "x86_64, mingw32"
$status
[1] ""
$major
[1] "3"
$minor
[1] "3.0"
$year
[1] "2016"
$month
[1] "05"
$day
[1] "03"
$`svn rev`
[1] "70573"
$language
[1] "R"
$version.string
[1] "R version 3.3.0 (2016-05-03)"
$nickname
[1] "Supposedly Educational"
R版本3.3.0(2016-05-03) - &#34;据说教育&#34; 版权所有(C)2016 R统计计算基金会 平台:x86_64-w64-mingw32 / x64(64位)
答案 0 :(得分:1)
这是防止访问核心的机构防病毒软件。