私は、異なるスレッドで複数のクラスのsvmsを訓練したいと思います。 scikits.learn.svmがGILをリリースするかどうか誰かが知っていますか? Googleで回答が見つかりませんでした。 ありがとうScikitsはPython GILをリリースしますか?
2
A
答えて
3
いいえ、scikit-learnはGILでどんなトリックも再生しません。代わりに、すべての並列処理にjoblibを使用します。これにより、複数のプロセスが処理を開始します。カスタムジョブライブラリParallel
を使って、あなたが望むものを達成することができます。
複数のクラシファイアを異なる設定で同じデータセットに訓練して最適なものを見つける場合は、並列性を扱うGridSearchCV
クラスの使用を検討してください。
2
いくつかのSklearn Cythonクラスは、0.15(2014年初めにリリースされる)とlibsvmラッパーのように、意思決定ツリー(例えばランダムフォレストで使用される)など、パフォーマンスクリティカルセクションで内部的にGILをリリースします。
これは一般的なルールではありません。あなたがGILをリリースするために変更可能なsklearnのパフォーマンスクリティカルなcythonコードを特定した場合は、プルリクエストを送信してください。
関連する問題
- 1. zlibモジュールはPython 3でグローバルインタプリタロック(GIL)をリリースしますか?
- 2. GILがリリースされたら?
- 3. python scikits learn - SVMオプション
- 4. Python 2.xの `psycopg2`はGILをブロックします
- 5. GILに関してpython dictのlen()はアトミックですか?
- 6. python WebサーバーはGILをどのように克服しますか
- 7. マルチスレッドのC++クラスのためにCythonでGILをリリースするには?
- 8. インストールエラーscikitsトークボックスパイソン
- 9. Python GILをCモジュールでバイパスすることはできますか?
- 10. pickle.dumpはGILのためにマルチスレッドのPythonアプリケーションのメインスレッドをブロックします
- 11. C++スレッドからpythonスクリプトを呼び出すGIL
- 12. 異なるスレッドとGIL上のPythonコールバック
- 13. ロックとPython GILによるプリエンプティブマルチタスクについて理解していますか?
- 14. 別々のpythonプロセスを実行するとGILを回避できますか?
- 15. boost :: gil :: color_converted_viewとboost :: gil :: for_each_pixelの使用
- 16. Pandas、Concurrent.Futures and GIL
- 17. クロスバリデーションを使用したscikits混同マトリクス
- 18. PyPyのGILはどこですか?
- 19. pythonマルチスレッドは、読み取り専用メモリバッファバイパスを読み取るGIL
- 20. python、scikits-learn:どの学習方法がスパースな特徴ベクトルをサポートしていますか?
- 21. GILがI/Oバインドスレッドを終了しています
- 22. キーはPythonでリリースされましたか?
- 23. GIL I/O操作でスレッドがブロックされたときに、Pythonはスレッドを同時に実行しますか?
- 24. Rubyグローバルインタープリタロック(GIL) - rb_thread_call_without_gvl
- 25. asyncioはGILを考慮してスレッドセーフではありません。
- 26. IBOutletsプロパティ。リリースまたはリリースしない
- 27. dask.arrayとgilロック内のループ
- 28. Perl 6にはグローバルインタプリタロック(GIL)がありますか?
- 29. GILは別の端末ウィンドウでPythonスクリプトの並列処理に影響しますか?
- 30. Cythonエラー:GILなしで許可されていないのPythonから強制
あなたのコメントをありがとうございます。残念ながら、別のスレッドを使用する並列処理(より大きなアプリケーションの他の部分との互換性のために)のために外部ライブラリに依存する必要があるため、この問題は実際には解決されません。したがって私はGILを解放するsvmの代わりのライブラリを探したいと思っています。それを行うにはscikits.learnを騙してください。多分あなたはどんな提案もありますか? –
サブプロセスでscikit-learnコードを実行することができます。生成された分類子は、ピクルされるので、プロセス間で簡単に転送することができます。唯一の問題は効率的な方法(おそらくファイルシステムを通して)でトレーニングデータを転送することです。 –
また、libsvmラッパーは[Cython](http://cython.org)で書かれています。私は、[GILをリリース](http://docs.cython.org/src/userguide/external_C_code.html#acquiring-and-releasing-the-gil)にラッパーコードをパッチするのはかなり簡単だと思います。もしあなたがそうし、それがあなたの問題を解決するならば、githubのプルリクエストとしてあなたの変更を提出してください。 また、scikit-learn見積もりはスレッドセーフではないことに注意してください。スレッド間で見落とし見積もりインスタンスを使用してください。 – ogrisel