2012-01-08 25 views
7

ランダムフォレストをシリアルで実行すると、システムで8GBのRAMが使用されます。どのように並行して実行すると、8GBに保つことができますか?コードは次のとおりです。doSMPとforeachを使用した並列ランダムフォレストでは、メモリ使用量が大幅に増加します(Windows版)

install.packages('foreach') 
install.packages('doSMP') 
install.packages('randomForest') 

library('foreach') 
library('doSMP') 
library('randomForest') 

NbrOfCores <- 8 
workers <- startWorkers(NbrOfCores) # number of cores 
registerDoSMP(workers) 
getDoParName() # check name of parallel backend 
getDoParVersion() # check version of parallel backend 
getDoParWorkers() # check number of workers 


#creating data and setting options for random forests 
#if your run this please adapt it so it won't crash your system! This amount of data uses up to 18GB of RAM. 
x <- matrix(runif(500000), 100000) 
y <- gl(2, 50000) 
#options 
set.seed(1) 
ntree=1000 
ntree2 <- ntree/NbrOfCores 


gc() 

#running serialized version of random forests 

system.time(
rf1 <- randomForest(x, y, ntree = ntree)) 


gc() 


#running parallel version of random forests 

system.time(
rf2 <- foreach(ntree = rep(ntree2, 8), .combine = combine, .packages = "randomForest") %dopar% randomForest(x, y, ntree = ntree)) 

答えて

0

私は次のように考えています。親プロセスが子プロセスを生成すると、メモリは共有されます。つまり、RAM使用量が大幅に増加することはありません。しかし、子プロセスがランダムなフォレストの構築を開始すると、共有メモリにはなく、かなり大きな可能性のある多くの新しい中間オブジェクトが作成されます。

私の答えは、少なくともrandomForestパッケージを使用すると、おそらくそれほど簡単な方法はないということです。誰かがそれを認識していれば、私は非常に興味があります。

1

中規模サイズのデータ​​セットでは、ランダムフォレストオブジェクトが非常に大きくなる可能性があるため、モデルオブジェクトの格納に関連している可能性があります。

これをテストするには、実際には2つの異なるセッションが必要です。

大きなフットプリント(ldaなど)を持たない別のモデルを並列に実行して、メモリが同じになるかどうかを確認してください。

3

まず、SMPは入力を複製して、各プロセスが独自のコピーを取得するようにします。これはmulticoreを使用することでエスケープできますが、別の問題もあります。randomForestを呼び出すと、入力の内部コピーも作成されます。

あなたはそれがrandomForestは(keep.forest=FALSEで)フォレストモデル自体をドロップすることとトレーニングと一緒にテストを行うことによって、いくつかの使用を削減するためにできる最善の(xtestとおそらくytest引数を使用することによって)。

+0

良い提案ですが、将来的に予測を行うためにはフォレストモデルが必要です(モデルを作成して後で新しいデータをスコアリングする必要があります)。マルチコアパッケージに関して:それはUnixのためでしかありません(私はWindows上です、cf.私の質問)。 – user1134616

+0

@ user1134616もしそうなら、あなたはnon-Rランダムフォレストの実装だけに頼ることができます... – mbq

関連する問題