Numpy が Joblib でのマルチプロセッシング コアの割り当てを妨げるのはなぜですか?
Numpy によるマルチプロセッシング コア割り当ての干渉
joblib を使用して CPU 集中型のループを並列化すると、すべてのワーカー プロセスが 1 つのコアに割り当てられるという問題が発生する場合があります。
この問題は、Numpy、Scipy、Pandas、Sklearn などの特定の Python モジュールのインポートに起因します。これらのモジュールはマルチスレッド OpenBLAS ライブラリにリンクしているため、コア アフィニティに干渉する可能性があります。
回避策
この問題を解決するには、次のコマンドを使用してタスク アフィニティをリセットできます。
<code class="python">os.system("taskset -p 0xff %d" % os.getpid())</code>
このコマンドは、現在のプロセスの利用可能なすべてのコアへのアフィニティをリセットします。回避策を含む例の更新バージョンは次のとおりです。
<code class="python">from joblib import Parallel, delayed import numpy as np import os def testfunc(data): # some very boneheaded CPU work for nn in xrange(1000): for ii in data[0, :]: for jj in data[1, :]: ii*jj def run(niter=10): data = (np.random.randn(2, 100) for ii in xrange(niter)) pool = Parallel(n_jobs=-1, verbose=1, pre_dispatch='all') # Reset task affinity os.system("taskset -p 0xff %d" % os.getpid()) results = pool(delayed(testfunc)(dd) for dd in data) if __name__ == '__main__': run()</code>
この回避策を適用した後、ワーカー プロセスは、並列化に利用可能なすべてのリソースを利用して、別のコアに割り当てられる必要があります。
代替ソリューション
回避策に加えて、次の方法を使用して OpenBLAS の CPU アフィニティ リセット動作を無効にすることもできます。
- ランタイム: 前に OPENBLAS_MAIN_FREE 環境変数を設定します。スクリプトの実行:
OPENBLAS_MAIN_FREE=1 python myscript.py
- コンパイル時: OpenBLAS のコンパイル時に Makefile.rule を編集し、次の行を追加します:
NO_AFFINITY=1
以上がNumpy が Joblib でのマルチプロセッシング コアの割り当てを妨げるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

Pythonasyncioについて...

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

Python 3.6のピクルスファイルの読み込みエラー:modulenotfounderror:nomodulenamed ...

SCAPYクローラーを使用するときにパイプラインファイルを作成できない理由についての議論は、SCAPYクローラーを学習して永続的なデータストレージに使用するときに、パイプラインファイルに遭遇する可能性があります...
