1

Celery と RabbitMQ を使用して、いくつかの線形回帰タスクを分散しようとしています。セットアップは add(x,y) 関数の例で問題なく動作しますが、statsmodels OLS クラスをインスタンス化すると、たとえば

self.model = sm.OLS(self.y, self.X) 

100% の CPU を消費している間、ワーカーは無期限に保留されます。

何が起こっている?

4

1 に答える 1

1

デフォルトでは、セロリはマルチプロセッシング ライブラリを同時実行の実装として使用します。StatsModels の OLS メソッドは Lapack を呼び出します。Lapack は (Lapack / BLAS の多くの関数と共に) 独自のスレッド プールを開始して計算を高速化します。残念ながら、サブプロセスがフォークされた後はスレッドが継承されないため、ゾンビが作成されます。

セロリの問題に関する議論は次のとおりです: https://github.com/celery/celery/issues/1842

しかし、前回の投稿で指摘したように、それはセロリのせいではありません。

OpenBLAS の問題に関する問題については、長い議論があります: https://github.com/xianyi/OpenBLAS/issues/294

OpenBLAS のデフォルト ビルドがフォーク セーフになったため、これが今後問題にならないことを願っています: http://numpy-discussion.10968.n7.nabble.com/Default-builds-of-OpenBLAS-development-branch -are-now-fork-safe-td36523.html

(2014 年 2 月 9 日の時点で、バージョンをアップグレードするか、最新の開発ビルドをインストールする必要がある場合があります)。

2 つの回避策:

于 2014-03-18T20:30:19.193 に答える