コンドルを使用して、数時間で最大 100 プロセスのバッチを実行しています。これらのプロセスが終了したら、最初のバッチの結果を使用して次のバッチの実行を開始する必要があり、このプロセスが何十回も繰り返されます。私のコンドル プールは 100 コアを超えています。コンドル クラスターが一度に 100 プロセスしか実行しないように制限して、コンドルが最初のプロセスの 1 つが終了した後にのみ次のプロセスで作業を開始できるようにしたいと考えています。これは可能ですか?
2 に答える
DAG マネージャーを使用する必要があります。これにより、ジョブ間の親子関係を定義できるため、最初のジョブの結果を待ってから 2 番目のジョブを開始できます。
DAGman には、アクティブなジョブの総数を制限する MAX_JOBS_RUNNING 設定もあります。
これはすべて、8.4 マニュアルのセクション 2.10 に記載されています。ある種のスクリプトを使用して DAG ファイルを作成し、実行の中間結果を保存する場所を用意する必要があります。ジョブが親から子に直接データを渡すことはできません。出力は、最初の実行から作業ディレクトリに収集され、作業ディレクトリから次のジョブに送信されます。
これは、チェックポイントを実行するジョブを実行しているように聞こえます。次のジョブは、そのチェックポイントを読み取り、何らかの処理を行い、新しいチェックポイントを 10 回書き出します。チェックポイント ファイルを探して使用するラッパー スクリプトを作成したり、ゼロから開始したりしないのはなぜですか。
もう 1 つのオプションは、提出ファイルの「要件」を使用して、ジョブを実行できるマシンまたはコアを 100 個だけリストすることです。何かのようなもの:
Requirements = (machine == "astrolab01") || (machine == "astrolab02") || (machine == "astrolab03")
一度に 3 つ以上のジョブを実行しないようにします。それらのマシンに複数のコアがない限り、次のようなことをする必要があります:
Requirements = (name == "slot1@astrolab01") || (name == "slot1@astrolab02")