2016-07-12 2 views
4

誰かがsklearn-classの "n_jobs"を使用していますか?私はAnaconda 3.4 64ビットでsklearnと仕事をしています。 Spyderのバージョンは2.3.8です。私のスクリプトは、いくつかのsklearn-classの "n_jobs"パラメータをゼロ以外の値に設定した後、その実行を終了できません。どうしてですか?n_jobsはsklearn-classで動作しません

+0

Windowsの場合、スクリプトに次のものを含めるようにしてください: 'if __name__ ==" __main __ ":'。それは私のためのトリックでした。スクリプトに最初に追加した後、インデントを使用して残りのコードを追加しました。 – sera

答えて

0

GridSearchCVやcross_val_scoreなどのいくつかのscikit-learnツールは、n_jobs> 1を引数としていくつかのPythonプロセスに実行を並列化するPythonのマルチプロセッシングモジュールに内部的に依存しています。

はSklearnのドキュメントから撮影:

問題はPythonのマルチプロセッシングは、パフォーマンス上の理由からexecシステムコールでそれに従わずにforkシステムコール を行うということです。 OSX、Accelerate/vecLibのような多くのライブラリは、GCCのOpenMPランタイムである (いくつかのバージョン)、nvidiaのCuda(そして おそらく多くの)は、独自の内部スレッドプールを管理します。 forkを呼び出すと、子プロセス内のスレッドプール状態が破損しています。 スレッドプールには多くのスレッドがあると考えられ、メインの スレッド状態だけがforkされていると考えられます。ライブラリ を変更してフォークが発生したことを検出し、その場合にスレッド プールを再初期化することができます:OpenBLAS(0.2.10以降、マスター の上流にマージされています)を行い、GCCのOpenMPランタイム( はまだレビューされていません)。

関連する問題