これはばかげた質問のように思えるかもしれませんが、部門内の他の人と共有する計算サーバーで定期的にジョブを実行する必要があり、10個のジョブを開始するときは、10個のコアだけを使用し、もっと;実行ごとに1つのコアを使用してもう少し時間がかかるかどうかは気にしません。他の領域に侵入したくないので、ジョブを再利用する必要があります。 10個のソリッドコアが必要なだけです。
より具体的には、Python 2.7.3およびnumpy 1.6.1に基づいている)RedhatでEnthought 7.3-1を使用していますが、質問はより一般的です。何時間もこの質問に対する答えのようなもので、何の役にも立たないので、誰かがマルチスレッドをオフにする可能性のあるnumpyのスイッチを知っているなら、私に知らせてください。
をセットする MKL_NUM_THREADS
環境変数を1に設定します。ご想像のとおり、この環境変数は、Enthoughtのnumpy
ビルドの一部として含まれているMath Kernel Libraryの動作を制御します。
これは、スタートアップファイル.bash_profileでexport MKL_NUM_THREADS=1
。また、スクリプト内からそれを実行して、プロセス固有にすることもできます。
うまくいけば、これはあなたがいるかもしれないすべてのシナリオとシステムを修正します。
numpy.__config__.show()
を使用しますこの時点から、これを行うにはいくつかの方法があります。
2.1。ターミナルルートexport OPENBLAS_NUM_THREADS=1
またはexport MKL_NUM_THREADS=1
2.2(これが私の好みの方法です)pythonスクリプトimport os
で、行os.environ['OPENBLAS_NUM_THREADS'] = '1'
またはos.environ['MKL_NUM_THREADS'] = '1'
を追加します。
[〜#〜]ノート[〜#〜]os.environ[VAR]
を設定する場合、スレッド数は文字列でなければなりません!また、この環境変数before importing numpy/scipyを設定する必要がある場合もあります。
OpenBLASまたはMKL以外にもおそらく他のオプションがありますが、ステップ1はそれを理解するのに役立ちます。
スレッド数を動的に設定し、環境変数を介してグローバルに設定したくない場合は、次のようにすることもできます。
import mkl
mkl.set_num_threads(2)
私はこれをビリコの回答へのコメントとして残したでしょうが、私には必要な特権がありません。 numpyの最近のバージョンでは、NUMEXPR_NUM_THREADS = 1も設定する必要があることがわかりました
私の手では、MKL_NUM_THREADS = 1を設定しなくてもこれで十分ですが、状況によっては両方を設定する必要がある場合があります。