0

多年来,我一直在 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)

截至昨天,我的函数执行不再起作用,并且挂了几个小时。(此外,使用资源监视器,我可以看到我的 CPU 都没有处于活动状态,尽管我的脚本指定了 20 个内核)。当我回到函数并逐行测试时,我发现以下行没有执行(即,它通常会在几秒钟内执行时被挂断):

cl.spec <- rep("localhost", cores0)
cl <- makeCluster(cl.spec, type="SOCK", outfile="")

我尝试查找问题并找到了几个使用“PSOCK”类型的参考,但无法确定何时使用 PSOCK 与 SOCK。尽管如此,我还是使用“PSOCK”而不是“SOCK”尝试了相同的脚本:

  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="PSOCK" 相同的错误

  cl <- makeCluster(cl.spec) 
  registerDoParallel(cl, cores=cores0)

我的问题: 1. 为什么 makeCluster() 行以前从未挂断过?cl <- makeCluster(cl.spec, type="SOCK", outfile="")

  1. 如果我只加载了 parallel 和 doParallel 包,并且我还加载了 snow 和 doSNOW 包,就会出现问题。执行 foreach() 命令是否需要全部 4 个包?

这是包含 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. 

我发现这些帖子引用了错误,但解决方案对我不起作用: 错误:找不到对象'.doSnowGlobals'? http://grokbase.com/t/r/r-sig-hpc/148880dpsm/error-object-dosnowglobals-not-found

我正在使用具有 40 个内核的 64 位 Windows 8 机器。

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) -- “Supposedly Educational” Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 (64-bit)

4

1 回答 1

1

它是阻止访问内核的机构防病毒软件。

于 2016-06-03T20:19:57.443 回答