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)

昨日の時点で、関数の実行が機能しなくなり、何時間もハングアップしていました。(さらに、リソース モニターを使用すると、スクリプトで 20 コアを指定しているにもかかわらず、アクティブな CPU がないことがわかりました)。関数に戻って行ごとにテストしたところ、次の行が実行されていないことがわかりました (つまり、通常は数秒で実行されるときにハングアップしています)。

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

問題を調べてみたところ、「PSOCK」タイプの使用に関するいくつかの参照が見つかりましたが、PSOCK と SOCK をいつ使用するかを判断できませんでした。それにもかかわらず、「SOCK」の代わりに「PSOCK」を使用して同じスクリプトを試みました。

  cl <- makeCluster(cl.spec, type="PSOCK", outfile="") 
  registerDoParallel(cl, cores=cores0)

PSOCK の変更により、ハングアップしなくなり、これと registerDoParallel() 呼び出しを実行しているように見えました。

ただし、上記の 2 行を含む完全な関数を実行してから、以下のように関数を呼び出すと、見たことのないエラーが発生しました。

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) -- 「おそらく教育的」 Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 (64 ビット)

4

1 に答える 1

1

コアへのアクセスを防止するのは、制度上のウイルス対策ソフトウェアでした。

于 2016-06-03T20:19:57.443 に答える