17

joblib でこのような問題が発生する理由は何ですか? 「n_jobs=1 を設定すると、マルチプロセッシングによる並列ループをスレッドの下にネストすることはできません」このような問題を回避するにはどうすればよいですか?

実際には、バックグラウンド スレッドで大量の計算を実行し、UI クライアントからのポーリングを通じて現在の進行状況を報告する XMLRPC サーバーを実装する必要があります。joblib に基づく scikit-learn を使用します。

PS: このような警告を回避するために、スレッドの名前を「MainThread」に変更しただけで、すべてが正常に機能しているように見えます (問題なく期待どおりに並列実行されます)。このような回避策で将来的にどのような問題が発生する可能性がありますか?

4

2 に答える 2

7

スレッド内で sklearn を使用して予測を行っているときに、ロードしたモデルと n_jobs > 1 で適合したモデルを使用しているときに、同じ警告が表示されました。

警告 (および潜在的なシリアライゼーション コスト) を回避するには、モデルをピクルするときに n_jobs を 1 に設定します。

clf = joblib.load(model_filename).set_params(n_jobs=1)
于 2018-11-23T19:25:24.940 に答える
1

これは、JobLib ライブラリのこの問題によるものと思われます。これを書いている時点では、これは修正されているようですが、まだリリースされていません。質問に書かれているように、汚い修正はメインスレッドの名前を次のように戻しますMainThread

threading.current_thread().name = 'MainThread'

于 2017-01-13T08:00:28.077 に答える