【问题标题】:Slurm: select nodes with specified number of CPUsSlurm:选择具有指定 CPU 数量的节点
【发布时间】:2018-08-07 14:55:09
【问题描述】:

我在单个分区具有不同节点的集群上使用 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 作业脚本 a'la 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" &gt; ./result_RUN_ID &amp; done 发送到 16 核节点会发生什么?
  • 您使用的是什么 ?因为如果你选择了 16-CPU 分区,它应该不起作用。
  • 只有一个 并且该分区包含一堆具有不同 CPU 的不同节点。因此,我无法通过分区名称选择 32 CPU 节点,并希望提交资源请求,以确保我与分区中的适当节点匹配。

标签: slurm


【解决方案1】:

严格回答你的问题:用

#SBATCH --cores-per-socket=32

您请求每个插槽 32 个内核,即每个物理 CPU。我猜那些机器有两个 CPU,所以你应该请求类似

#SBATCH --sockets-per-node=2
#SBATCH --cores-per-socket=16

另一种请求方式是请求

#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?
  • 正确。使用数组提交 32 个独立的 1-CPU 作业。如果不允许 Slurm 在节点上打包它们,那么您最终会浪费大量资源。但是,如果允许 Slurm 打包它们,那么您将大大减少闲置资源。
  • 嗯。有没有办法知道分区是否支持通过终端命令打包?
  • scontrol show config | grep -e "SelectType\b" 必须返回select/cons_res 并且scontrol show partition | grep -o "Shared=[^ ]*" 不能是EXCLUSIVE
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多