5

多くのランダム フォレスト モデルを実行する必要があるため、8 コアのサーバーで doParallel を使用してプロセスを高速化したいと考えています。

ただし、一部のモデルは他のモデルよりもはるかに長い時間が必要であり、エラーをスローすることさえあります。8 つのモデルを並行して実行したいのですが、モデルがエラーをスローしたりスキップされたりした場合、ワーカーは続行する必要があります。各モデルの結果はハードドライブに保存されるので、後でアクセスして組み合わせることができます。

TryCatch

また

.errorhandling="remove" 

問題を解決しませんでした。私は得る

 Error in unserialize(socklist[[n]]) : error reading from connection

コード例: %do% で試してみたところ、モデル 2-7 が正常に実行されました。それでも %dopar% に表示されたエラーが表示されます

 foreach(model=1:8, .errorhandling="remove") %dopar% {


      tryCatch({
          outl <- rf_perform(...)
          saveRDS(outl,file=getwd() %+% "/temp/result_" %+% model %+% ".rds")

     }, error = function(e) {print(e)}, finally = {})
  }
4

1 に答える 1

3

私は問題を見つけたと思います: クラスターにエクスポートするオブジェクトが大きすぎる場合、R がそれを処理できなくなるか、タイムアウトが発生します。

私のデータ オブジェクト exportet は 500 万行と 300 個の変数で、16 個のクラスターにエクスポートされました。

cl <- makeCluster(16)
registerDoParallel(cl)
clusterExport(cl, "data")

#data must not be too large

オブジェクトを小さな断片に縮小したところ、動作するようになりました。作成者は、doParallel のドキュメントで言及するか、オブジェクトが大きすぎる場合に警告をスローすることをお勧めします。

于 2015-12-29T16:36:06.010 に答える