SGE にジョブを送信して完全なノードで実行する場合の問題は、このフォーラムで以前に取り上げられました。いくつかの解決策が提案されていますが、その 1 つは、オプション -l excl=TRUE の使用を許可するように SGE を構成することです。もう 1 つの解決策は、SGE にハード メモリまたは負荷制限を要求することです。
私は修士論文のために大学のクラスターを使用しており、並列環境 openmpi は fill-up 戦略で構成されています。通常、クラスターのノードにはそれぞれ 16 または 20 のコアが含まれていますが、一部のユーザーは 16 (または 20) の倍数のコア数で計算を開始する代わりに、任意の数のコアでジョブを開始するという問題があります。その結果、-pe openmpi 16 でジョブを開始すると、SGE が 3 つのノード (例: 6 + 1 + 10) のプロセッサを予約することがあり、計算が非常に遅くなります。
管理者に -l excl=TRUE を許可するようにクラスターを構成するように依頼しましたが、管理者はテストを行う前に構成を変更することを拒否しました (どのくらいの期間拒否されたかはわかりません)。
ここで、クラスターを変更せずに (-l excl=TRUE) と同様の結果を得ることができる新しいアイデアがあります。
- キューをスキャンし、SGE に要求する必要があるコアの数を推定して、実行中のすべてのノードを埋め、完全に解放されたノードのみを残すスクリプトを作成します。
- 計算されたコア数で、一定時間待機する偽のジョブを起動します。
- 実際のジョブを起動します (例: -pe openmpi 2*16=32)。
- 偽のジョブを削除して、他のユーザーがそのコアを使用できるようにします。
誰かそのようなコードの例を提供してもらえますか?
答え1
qsub -l cpu=0
(または)を使用してジョブを起動すると、cpu=0.1
私の場合は完璧に機能します。