かなり大きなawsインスタンス(48または96 vCPU)でバッチデータ処理を行うPythonスクリプトを実行しています。multiprocessing.Pool()はうまく機能します:ワーカーはメインプロセスとの通信が最小限です(ファイルパスを取得し、True / Falseを返します)。I / Oとメモリは制限されていないようです。
パフォーマンスはさまざまで、プールサイズ= vCPUの数、vCPU / 2の数、vCPU * 2〜4の倍数が最適な場合があります。これらはさまざまな種類のジョブ、さまざまなインスタンス用であるため、すべてのベンチマークを行うのは困難です。
使用するプールのサイズに関する経験則はありますか?
PS multiprocessing.cpu_count()は、vCPUの数と等しいと思われる数を返します。それが一貫している場合は、cpu_countの妥当な倍数を選択し、そのままにしておきます。
すでに理解しているタスクに応じて、従うことができる多くの経験則があります
物理コアではなく論理コアをカウントしないようにするには、psutil
ライブラリを使用することをお勧めします。
import psutil
psutil.cpu_count(logical=False)
最終的に何を使用するかについては、数値を多用するアプリケーションでは、物理コアの数を使用する傾向があります。一部のBLAS実装はデフォルトでマルチスレッドを使用するため、データ並列パイプラインのスケーラビリティが大幅に低下する可能性があることに注意してください。使用MKL_NUM_THREADS=1
またはOPENBLAS_NUM_THREADS=1
(あなたのBLASのバックエンドに依存する)環境変数としてバッチ処理を実行するたびに、あなたは準線形スピードアップが物理コアの数をWRTが必要です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加