16ノードのSLURMクラスターで実行するジョブが数千あります。これらのジョブは、サイズ7の使用可能なノードのサブセットでのみ実行する必要があります。一部のタスクは並列化されているため、単一のノードのすべてのCPUパワーを使用し、他のタスクはシングルスレッドです。したがって、単一のノードで複数のジョブを同時に実行する必要があります。複数のノードでタスクが発生することはありません。
現在、私は次のように各ジョブを送信します。
sbatch --nodelist=myCluster[10-16] myScript.sh
ただし、このパラメーターは、送信されたジョブが終了するまでslurmを待機させるため、3つのノードが完全に未使用のままになり、タスク(マルチスレッドまたはシングルスレッド)によっては、CPU能力の観点から現在アクティブなノードの負荷が低くなる場合があります。
指定したノードでslurmが同時に複数のジョブを実行するように強制するsbatch
の最適なパラメーターは何ですか?
逆の方法で作業できます。使用するノードを指定するのではなく、各ジョブに7つのノードすべてが割り当てられるという効果により、使用しないノードを指定します。
sbatch --exclude=myCluster[01-09] myScript.sh
また、Slurmはジョブに7つを超えるノードを割り当てません。ただし、クラスター構成でノードの共有が許可されていること、およびmyScript.sh
に#SBATCH --ntasks=1 --cpu-per-task=n
が含まれていて、各ジョブのスレッド数がn
であることを確認してください。
一部のタスクは並列化されているため、単一ノードのすべてのCPUパワーを使用しながら、他のタスクはシングルスレッド化されます。
シングルスレッドのジョブでノードを共有したいのですが、並列のジョブにはノード全体を排他的に割り当てる必要がありますか?
1つのノードで複数のジョブを同時に実行する必要があります。
私のSLURMの理解に関する限り、これは、CPUコアを消費可能なリソースとして定義する必要があることを意味します(つまり、SelectType=select/cons_res
およびSelectTypeParameters=CR_Core
in slurm.conf
)
次に、並列ジョブを制約してノード全体を取得するには、 --exclusive
オプション(ただし、パーティション構成が優先されることに注意してください。パーティションが排他的アクセス用に構成されている場合、共有ノードを持つことはできません)、または-N 1 --tasks-per-node="number_of_cores_in_a_node"
(例:-N 1 --ntasks-per-node=8
)。
後者は、すべてのノードが同じ数のコアを持っている場合にのみ機能することに注意してください。
複数のノードでタスクが発生することはありません。
これは-N 1
。
実際には、最初に 'reservation'を設定する方法だと思います。このプレゼンテーションによると http://slurm.schedmd.com/slurm_ug_2011/Advanced_Usage_Tutorial.pdf (最後のスライド)。
シナリオ:正午に開始し、毎日60分の期間で、デフォルトのSLURMパーティションに10個のノードを予約します。予約は、ユーザーalanおよびbrendaのみが利用できます。
scontrol create reservation user=alan,brenda starttime=noon duration=60 flags=daily nodecnt=10
Reservation created: alan_6
scontrol show res
ReservationName=alan_6 StartTime=2009-02-05T12:00:00
EndTime=2009-02-05T13:00:00 Duration=60 Nodes=Sun[000-003,007,010-013,017] NodeCnt=10 Features=(null) PartitionName=pdebug Flags=DAILY Licenses=(null)
Users=alan,brenda Accounts=(null)
# submit job with:
sbatch --reservation=alan_6 myScript.sh
残念ながら、おそらく権限がないため、この手順をテストできませんでした。