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

时间:2018-02-27 20:36:43

标签: slurm

我在群集中使用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表示套接字,核心数),这有助于识别达米恩的优秀答案解决的问题

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

1 个答案:

答案 0 :(得分: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个进程的作业,该节点将会过载,并且根据管理员设置的包含解决方案,您的进程可能会影响其他人。工作和减慢他们。