2016-07-29 11 views
3

最近までnp.dot(A、B)のようなnumpyメソッドを使用していたときまでは、単一のコアのみが使用されていました。しかし、今日、私のLinuxマシンの8つのコアすべてがうまく使用されて以来、これが問題になっています。Numpyは突然すべてのCPUを使用します

最小限の作業例:私の他のラップトップ上

import numpy as np 
N = 100 

a = np.random.rand(N,N) 
b = np.random.rand(N,N) 

for i in range(100000): 
    a = np.dot(a,b) 

それは、単一のコア上のすべて正常に動作します。これはいくつかの新しいライブラリが原因でしょうか?

今朝私はpipでmatplotlibとcairocffiを更新しましたが、それだけです。

単一のコアに戻る方法はありますか?

編集:私は

np.__config__.show() 

を実行すると

私はnumpyは、マルチスレッドopenBLASライブラリにリンクされるので、これは可能性があり、次の出力

openblas_info: 
    libraries = ['openblas', 'openblas'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
    library_dirs = ['/usr/local/lib'] 
openblas_lapack_info: 
    libraries = ['openblas', 'openblas'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
    library_dirs = ['/usr/local/lib'] 
lapack_opt_info: 
    libraries = ['openblas', 'openblas'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
    library_dirs = ['/usr/local/lib'] 
blas_mkl_info: 
    NOT AVAILABLE 
blas_opt_info: 
    libraries = ['openblas', 'openblas'] 
    define_macros = [('HAVE_CBLAS', None)] 
    language = c 
    library_dirs = ['/usr/local/lib'] 

答えて

2

を取得します。

export OPENBLAS_MAIN_FREE=1 

# Now run your python script. 

別の回避策は、ATLAS代わりのOpenBLASを使用することができますよう、スレッドアフィニティを設定するには、地球環境変数を設定してみてください。詳細については、この記事を参照してください(https://shahhj.wordpress.com/2013/10/27/numpy-and-blas-no-problemo/)。この記事では、試してみる価値のあるいくつかの他の回避策も提案しています。

+0

ありがとうございます。私は自分のLinuxのシェルでexportコマンドを実行し、pythonのtest.pyを使ってコードを呼び出しました。しかし、それは何も変わらなかった。私は何かの助けがあれば、np .__ config __。show()で自分の答えを更新しました。 – physicsGuy

+0

OSモジュールを使用して親和性を設定してみてください。 'os.system(" taskset -p 0x1%s "%os.getpid())'のようなコードを実行してください(これはリンク先のポストにあります)。 –

+0

実際にマルチプロセッシングが問題になる場合は、openBLASではなくATLASを試してみてください。これは簡単に行うべきです。 numBをopenBLASではなくATLASにする方法の詳細については、記事を参照してください。 –

0

あなたがroot権限を持っていると仮定すると、Pankaj Dagaの回答は正常にokです。

私の場合、問題を解決するために私のローカルnumpyバージョンを再インストールしました。

関連する問題