別の投稿hereでループの中でh2o.gbm
への呼び出しを並列処理する際に助けを求めました。R、h2o、foreach:java.lang.IllegalStateException
の回答後、私はこの例のようなスクリプトを実行します。
library(h2o)
data(iris)
data <- as.h2o(iris)
ss <- h2o.splitFrame(data)
gbm <- h2o.gbm(x = 1:4, y = "Species", training_frame = ss[[1]])
h2o.saveModel(path="some path")
h2o.shutdown(prompt = FALSE)
library(foreach)
library(doParallel)
#setup parallel backend to use 12 processors
cl <- makeCluster(12)
registerDoParallel(cl)
#loop
df4 <- foreach(i = seq(20), .combine=rbind) %dopar% {
library(h2o)
port <- 54321 + 3*i
print(paste0("http://localhost:", port))
h2o.init(nthreads = 1, max_mem_size = "10G", port = port) #my local machine runs 128GB
df4 <- data.frame()
gbm <- h2o.loadModel(path="some path")
df4 <- as.data.frame(h2o.predict(gbm, ss[[2]]))[,1]
}
をそれは(シーケンシャルより少なくとも50%速い)私の本当のデータの小さなサンプルで本当にうまく動作します
私は私のすべてのデータでこれを実行した場合でも、私は45分後に次のエラーコードを取得する:
Error in { : task 2 failed - "
ERROR MESSAGE:
DistributedException from localhost/127.0.0.1:60984, caused by
java.lang.IllegalStateException: Unable to clean up RollupStats after an
exception (see cause). This could cause a key leakage, key=$05ff14000000feffffff$_b66dbd609dc068f0137cc88cb42a
"
私は、このエラーコードが発生するかわからないです。私はそれが私のRAM(128ギガバイト)の85-95%と私のCPU(12スレッド)の100%を占めるので、メモリの問題と関係があると思います。
誰でもこれを回避するためのアイデアはありますか?