ジョブを分散させるのではなく、各ノードを完全に満たすようにSGEを設定する

ジョブを分散させるのではなく、各ノードを完全に満たすようにSGEを設定する

元々は Stack Overflow に誤って投稿されました...その投稿への返信については、下部の PS を参照してください。

しばらくこのことを調べていますが、答えが見つかりません。私が抱えている問題は、12 CPU マシン 2 台で SGE をセットアップしていると仮定します。グリッドに送信する 1 CPU ジョブが 2 つありますが、他のユーザーは 12 CPU ジョブを送信したいことがよくあります。これらは共有メモリ ジョブであり、複数のマシンに分割することはできません。2 つのジョブを送信すると、それぞれが別のマシンに送信され、それぞれ 11/12 CPU が空いてしまうことがあります。これにより、私が作業している間、他のユーザーが 12 CPU ジョブを実行できなくなります。

これを回避する方法はありますか? fillup ルールを使用して単一の qsub を制御できることは知っています (つまり、fillup は 12 個の CPU の qsub を 1 台のマシンにとどめたり、複数のマシンに分割したりできます)。ただし、別々の qsub を同じマシンに強制的に送信するための同等の設定はありますか? また、特定のマシンを明示的に要求できることも知っています (-h machinename など)。ただし、これよりも堅牢な設定を希望します。

どのような助けでも大歓迎です。ありがとうございます!

PS: Stack Overflow の投稿では、スレッドが閉じられる前に、並列環境 allocation_rule=$fill_up の使用を提案する応答が 1 つありました。私が試して何か間違ったことをしていない限り、これでは問題が解決しないと思います。私が見たテストでは、fill_up に設定すると、単一の qsub 内で要求された CPU は可能であれば同じグリッド マシンに配置されますが、異なる qsub の CPU は依然として低負荷マシン (またはグリッドが選択したマシン) に配置され、空のマシンに配置される場合があります。これをテストするには、いくつかの単一 CPU ジョブを qsub し、約 5 分待ってからさらにいくつか送信しました。最初のグループが同じマシンに配置されることもありましたが (マシンの負荷はリアルタイムではないため、すべてが同じ低負荷マシンに送信されたためだと思います)、2 番目のグループが最初のグループと同じマシンに常に配置されるとは限りませんでした。

答え1

スケジューラのデフォルトロードフォーラム設定は平均負荷最も負荷平均が低いノードに新しいジョブを割り当てます。代わりにノードを埋めるには、次のように設定します。ロード式スロット現在のスケジューラ設定を確認するには:

qconf -ssconf

設定を変更するには:

qconf -msconf

関連情報