2017-12-28 21 views
2

GaussianMixtureにはn_jobsパラメータがありません。私はモデルGaussianMixtureのプロセス数を制御する方法

from sklearn.mixture import GaussianMixture as GMM 
gmm = GMM(n_components=4, 
      init_params='random', 
      covariance_type='full', 
      tol=1e-2, 
      max_iter=100, 
      n_init=1) 
gmm.fit(X, y) 

に合うたび は一方で、それは16個のプロセスにまたがり、私の16個のCPUマシンの完全なCPUパワーを使用しています。私はそれがそれをしていることを望んでいません。これに対して、Kmeansは、複数の初期化(n_init> 1)を有する場合に、相互処理を制御するパラメータがn_jobsである。ここではマルチプロセッシングが青から出てきます。

私の質問はどこから来て、どのように制御するのですか?

答えて

3

基本代数演算では並列処理が行われていますが、BLAS/LAPACKの速度が向上しています。

これを変更するのは、n_jobsパラメータを設定するだけでは簡単ではなく、使用する実装によって異なります。

一般的な候補は、ATLAS、OpenBLAS、IntelのMKLです。

import numpy as np 
np.__config__.show() 

は、悲しいことに、これらのものは trickyを取得することができます:

は、私は1つがそれに応じて行動する、最初に使用されているチェックをお勧めします。例えばMKLのための有効な環境では、この(source)のように見えることができます:ATLASについては

export MKL_NUM_THREADS="2" 
export MKL_DOMAIN_NUM_THREADS="MKL_BLAS=2" 
export OMP_NUM_THREADS="1" 
export MKL_DYNAMIC="FALSE" 
export OMP_DYNAMIC="FALSE" 

、それはそう、あなたがcompile-timeでこれを定めます。

this answerによると、OpenBLASでも同様です。

OPがテストとして、あなたも(コンパイル時の制限がある代替)オープンソースの候補アトラスとOpenBLASのための行動の変更に影響を与える、OpenMPのために環境変数を設定して逃げることができそうです。

export OMP_NUM_THREADS="4"; 
+1

ワウ。 numpyで使用されているアクティブなBLASライブラリをチェックし、スクリプトを実行する前に 'export OMP_NUM_THREADS =" 4 ";'で変数を設定してトリックを実行しました。どうもありがとうございます! – tarashypka

+0

@tarashypkaそしてどちらが使用されていますか? MKL?それとも、これは他の候補者の一部でも機能しましたか? – sascha

+1

出力は次のようなものです。 'libraries = ['openblas'、 'openblas']' – tarashypka

関連する問題