2017-07-07 6 views
1

sklearnのRandomForestClassifierモデルを構築してトレーニングしています。私は最近、n_jobs変数について、訓練と予測のために並列処理を使用することが分かった。しかし、それは私が探しているのと反対の効果があるようです。Sklearn並列処理がドッカーコンテナで動作しない

n_jobsが割り当てられていない場合(デフォルトは1)、トレーニング/予測では1つのコアのみが使用されます。私は "トップ"を実行しているときに100%のCPU使用量を見ることができます。しかし、私はそれを4、または-1(コアの数、4)にバンプすると、CPU使用率が25%に低下します。

これまでに解決策を知っている人はいませんか?

+0

4つのpythonプロセスが実行中であるかどうかを確認できますか?私はウィンドウを使用しており、これはタスクマネージャーから見ることができます。私が1に設定すると、私は1つのpythonプロセスしか見ることができません。-1を設定すると、私は8つのコアを持つので、私は8つのpythonプロセスを見ます。パーセンテージは他の事実に依存しますが、ポイントは並列実行を参照することです – sera

+0

いいえ。私はちょうどw/n_jobs = 4を試しました。1つのpythonプロセスがCPUの28%から40%の間で動作しています。 – cghill

+0

あなたはn_jobs = -1を設定し、あなたに何を見せてくれますか?また、窓を使いますか? – sera

答えて

0

一般に、n_jobs = 1の場合、コアの1つのCPUの100%が使用されます。各プロセスは異なるコアで実行されます。 4つのコアを持つウィンドウでは、n_jobs = 1と100%、100%、100%、100%を実行すると、CPU使用率を(100%、〜5%、〜5%、〜5% n_jobs = -1で動作します。また、ラップトップは最後のケースでフリーズします。各プロセスは特定のコアを100%使用しますが、n_jobs = 1の場合は1つのコアのみが使用されます。

またif__name__==="__main__":n_jobs =-1

例1追加しようとすることができます。例2

from sklearn.ensemble import RandomForestClassifier 

if __name__ == '__main__': 
    clf = RandomForestClassifier(n_jobs = -1) 
    #more code 

または を:

Class Test(object): 
    def __init__(self): 
     clf = RandomForestClassifier(n_jobs = -1) 
     ###code here  

if __name__ == '__main__': 
    Test() 
0

これは私の一部に誤解だったように見えます。どうやら、私のデータセットは十分に小さく、実際にはかなりの間違い(60,000レコード程度)です。しかし、私は手動によるクロスバリデーションを行い、それらのレコードを繰り返して、見えないテストセットの予測を求めました。これには数分かかりますが、並列化がその時間を減らすことを望んでいました。しかし、私のモデルは、新しいプロセスを産み出すオーバーヘッドが並列化によって得られる速度よりもかなり高いほど十分に小さいと思います。

基本的には、十分に大きな(200万行)ランダムデータセットを生成し、「適合」と呼ばれ、CPU使用率が予想通りに増加しました。

ご迷惑をおかけして申し訳ありません。お手伝いいただきありがとうございます。