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

  • 本文关键字:CPU 节点 选择 slurm 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

严格回答您的问题:使用

#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个过程作业,则该节点将被超载,并取决于管理员设置的遏制解决方案,您的流程可能会影响他人的作业并减慢它们的速度。

最新更新