Slurm:选择具有指定CPU数量的节点

3

我在一个单一分区拥有不同节点的集群上使用Slurm。具体来说,这些节点有不同数量的CPU。我的代码是用于参数扫描的单核应用程序,因此我想通过发送32个作业来充分利用一个(例如)32个CPU节点。

如何选择具有指定CPU数量的节点(在命名分区内)?

我可以通过以下方式了解我的分区配置:

 sinfo -e -p <partition_name> -o "%9P %3c %.5D %6t " -t idle,mix

PARTITION          CPU   NODES  STATE  
<partition_name>    16     63    mix    
<partition_name>    32     164   mix

但是如果我使用提交脚本,比如

[snip preamble]

#SBATCH --partition <partition_name> # resource to be used
#SBATCH --nodes 1 # Num nodes
#SBATCH -N 1 # Num cores per job
#SBATCH --cores-per-socket=32 # Cores per node

Slurm调度程序表示:
sbatch: error: Socket, core and/or thread specification can not be satisfied

PS. 一个小修正:我获取分区信息的代码并不是最好的。以防后来有人查找此问题,这里提供了一个更好的查询(使用 X、Y 表示套接字和核心计数),可以帮助识别 Damien 的出色答案解决的问题。

sinfo -e -p <partition_name> -o "%9P %3c %.3D %6t %2X %2Y %N" -t idle,mix

替代问题:如果一个32个作业的脚本,如下所示:for RUN_ID in seq RUN_ID_FIRST RUN_ID_LAST; do matlab -nojvm -singleCompThread -r "try myscript(RUN_ID); catch me; disp(' *** error'); end; exit" > ./result_RUN_ID & done被发送到一个16核节点,会发生什么? - Mark_Anderson
你使用的是哪个 <partition_name>?如果你选择了16-CPU分区,它不应该工作。 - Bub Espinja
有一个单独的<partition_name>,该分区包含许多不同CPU的节点。因此,我无法通过分区名称选择32个CPU节点,并且正在寻求提交资源请求以确保我与分区内的适当节点匹配。 - Mark_Anderson
1个回答

2
严格回答您的问题:使用HTML标记“

”,意思是“段落”。

#SBATCH --cores-per-socket=32

您请求每个插槽32个内核,这是每个物理CPU的数量。我猜这些机器有两个CPU,因此您应该请求类似于
#SBATCH --sockets-per-node=2
#SBATCH --cores-per-socket=16

另一种请求相同内容的方式是要求:

,保留HTML,不解释。
#SBATCH --nodes 1
#SBATCH --tasks-per-node 32

但请注意,如果您的集群允许节点共享,则您所做的似乎更适合作业数组:
#SBATCH --ntasks 1
#SBATCH --arrays 1-32
IDS=($(seq RUN_ID_FIRST RUN_ID_LAST))
RUN_ID=${IDS[$SLURM_ARRAY_TASK_ID]}
matlab -nojvm -singleCompThread -r "try myscript(${RUN_ID}); catch me; disp(' *** error'); end; exit" > ./result_${RUN_ID}

这将启动32个独立的作业,每个作业负责运行Matlab脚本的一个参数扫描值。
回答您的附加问题:如果在16个CPU节点上安排了32个进程作业,则该节点将超载,并且根据管理员设置的容器解决方案,您的进程可能会影响其他作业并减慢它们的速度。

太棒了,谢谢。我想确认一下:作业数组的解决方案完全依赖于集群配置,对吗?如果集群不支持节点共享,那么我将占用32个节点,但每个节点只使用一个CPU,是这样吗? - Mark_Anderson
正确。使用数组,您可以提交32个独立的1-CPU作业。如果不允许Slurm在节点上打包它们,则会浪费大量资源。但是,如果允许Slurm将它们打包,则可以帮助最大程度地减少闲置资源。 - damienfrancois
嗯,有没有办法通过终端命令知道分区是否支持打包? - Mark_Anderson
scontrol show config | grep -e "SelectType\b" 应该返回 select/cons_res,而 scontrol show partition | grep -o "Shared=[^ ]*" 不应该是 EXCLUSIVE - damienfrancois

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接