ホームページ >バックエンド開発 >Python チュートリアル >NumPy をインポートした後、Joblib ワーカーが 1 つのコアでスタックするのはなぜですか?

NumPy をインポートした後、Joblib ワーカーが 1 つのコアでスタックするのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 19:43:29819ブラウズ

Why Are My Joblib Workers Stuck on One Core After Importing NumPy?

マルチプロセッシング コア アフィニティの問題

特定のシナリオで、NumPy ライブラリをインポートし、joblib モジュールを使用して CPU 負荷の高いループを並列化しようとすると、 、ループに割り当てられたワーカー プロセスがすべて 1 つのコアに限定され、パフォーマンスの向上が妨げられていることが観察される場合があります。

この問題は、NumPy と基盤となる OpenBLAS ライブラリ (多くの場合使用される) の間の相互作用が原因で発生します。マルチスレッド操作用。デフォルトでは、これらのライブラリはコア アフィニティ設定に干渉し、すべてのワーカー プロセスが同じコアに割り当てられる可能性があります。

解決策: タスク アフィニティをリセットする

簡単な方法解決策は、影響を受けるモジュールをインポートした後に os.system() 関数を使用してタスク アフィニティをリセットすることです。コマンド os.system("taskset -p 0xff %d" % os.getpid()) を実行すると、コア アフィニティがリセットされ、ワー​​カー プロセスが使用可能なすべてのコアに分散できるようになります。

OpenBLAS CPU アフィニティ リセットを無効にする

または、OpenBLAS の CPU アフィニティ リセット動作を実行時またはビルド時に無効にすることもできます。実行時に環境変数 OPENBLAS_MAIN_FREE を 1 に設定すると、ライブラリはコア アフィニティを調整できなくなります。あるいは、OpenBLAS コンパイル プロセス中に、Makefile.rule に NO_AFFINITY=1 を追加すると、この動作が永久に無効になります。

以上がNumPy をインポートした後、Joblib ワーカーが 1 つのコアでスタックするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。