3

Python で X 回完了する単一のタスクがあり、LSF を使用してそれを高速化します。別々に並行して実行できる複数の Python スクリプトを含むジョブを送信するのと、マルチプロセッサ モジュールを利用する 1 つの Python スクリプトを送信するのとでは、どちらが適していますか?

私の問題は、LSF が Python コードを複数のプロセスに分割する方法を知っているとは思えないことです (LSF がこれをどのように行うのかはわかりません)。ただし、非効率的で整理されていないように見えるため、いくつかの Python スクリプトが飛び交うのも望ましくありません。

当面のタスクには、6 つの非常に大きな ASCII ファイルを解析し、後で使用するために出力を Python dict に保存することが含まれます。6 つのファイルを並行して解析したいと考えています (それぞれに約 3 分かかります)。LSF では、Python が「ねえ、スクリプトは 1 つですが、これらの 6 つのプロセスに分割するつもりです」などと言うことができますか? LSFは Python にそれを伝える必要がありますか、それともその方法を既に知っていますか?

さらに情報が必要な場合はお知らせください。背景の「ちょうどいい」と「多すぎる」のバランスをとるのに苦労しています。

4

1 に答える 1

3

LSF の 1 つの (非常に単純化された) 考え方は、プロセスを起動し、そのプロセスに割り当てられているコアの数 (異なるホスト上にある可能性があります) をプロセスに知らせるシステムです。LSF は、プログラムが愚かなことをするのを防ぐことはできません (たとえば、プログラムの複数のインスタンスが同時に実行され、1 つのインスタンスが他のインスタンスの出力を上書きする場合など)。

LSF を使用するいくつかの一般的な方法。

  • それぞれ 1 つのファイルを処理する 6 つの順次ジョブを実行します。これらの 6 つは並行して実行できます。前の 6 の終了後に実行される従属 7 番目のジョブを用意します。これにより、前の 6 の出力が 1 つの出力に結合されます。
  • 1 つのホストで 6 つのコアが割り当てられた並列ジョブを実行します。python multiprocessing モジュールがここにうまく収まるようです。env 変数$LSB_MCPU_HOSTSは、ジョブに割り当てられているコアの数を示しているため、プールの大きさを知ることができます。
  • 6 つのコアが割り当てられ、複数のホストで実行できる並列ジョブを実行します。繰り返しますが、プロセスはこれらの他のホストで開始できる必要があります。(またはブランチを使用して助けてください)

これら 3 つの方法のどれがお客様のニーズに最も適しているかわかりません。しかし、説明があなたの決定に役立つことを願っています。

于 2014-05-28T02:33:56.857 に答える