计算化学公社

标题: 请教个slurm脚本的问题 [打印本页]

作者
Author:
alwens    时间: 2022-11-14 19:53
标题: 请教个slurm脚本的问题
由于先后不同年代买的机器,现在做在一个集群里面。有的36核心,有的56,有的64,有的128核心,由于要给学生用,这种64核心或者128的肯定要拆成2个。不知道有无办法在不指定核心数的情况下判断超过56核心就自动分配成2个作业?就是64核心或者128核心的只能提交2个作业到一个节点上。我现在是通过
#SBATCH --exclusive

独占一个节点方法避免每次都要指定核心数,但这样128核心提交就只能一个作业了,太浪费了。不知道有无什么好的办法,我查过很多文件也不行。


作者
Author:
abin    时间: 2022-11-14 21:11
srun -n XX app
XX是整数,用来定义number of cpu cores.
区分大小写。

作者
Author:
alwens    时间: 2022-11-14 21:24
abin 发表于 2022-11-14 21:11
srun -n XX app
XX是整数,用来定义number of cpu cores.
区分大小写。

谢谢,也就是不能自动,只能手工了
作者
Author:
abin    时间: 2022-11-14 21:39
alwens 发表于 2022-11-14 21:24
谢谢,也就是不能自动,只能手工了

你要自动什么呀?

使用队列调度,
最简单模式下,用户就只能要几个核心配置多少内存。

剩下的事情,调度器会自动把任务派送到不同的机器上去。

用户根据实际计算需要,
声明处理器数目和内存需求,
剩下都自动执行了。

当然,用128核心跑高斯的老铁也有的是……
如果是计算要付费,估计账单不少,完成的计算不多。

作者
Author:
alwens    时间: 2022-11-14 22:13
abin 发表于 2022-11-14 21:39
你要自动什么呀?

使用队列调度,

我是想128核心的只能提交64核心的2个作业。不知道在哪里设置。 不能到时候人为提交的时候改。是在slurm里面设置
作者
Author:
abin    时间: 2022-11-14 22:44
alwens 发表于 2022-11-14 22:13
我是想128核心的只能提交64核心的2个作业。不知道在哪里设置。 不能到时候人为提交的时候改。是在slurm里 ...

我的方案仅供参考,
要么修改sbatch srun,前面加上判断。

要么创建不同的队列……这样不佳,还需指定队列。

给srun等套壳比较适合。

别的解决方案,我不晓得。
欢迎其他客官补充。
作者
Author:
pwzhou    时间: 2022-11-15 07:55
本帖最后由 pwzhou 于 2022-11-15 07:56 编辑

给你提供一个思路,首先将这些机器按照不同的核心数分成不同的队列,比如36就是n36,56就是n56等等,然后对需要限制的队列,在/etc/slurm/slurm.conf里面,设置一个QOS,比如:
PartitionName=n64 Nodes=cn0[77-86]  MaxTime=INFINITE DisableRootJobs=YES QOS=n64 State=UP
这样,然后对n64这个QOS做一个限制,
sacctmgr modify qos n64 set MaxTRESPerJob=cpu=32
这样的话,就限制了这个队列单个作业的最大核数是32,超过32的会自动挂起永不运行,直到你更改了QOS的MaxTRESPerJob。

要是你想限制只能两个32的,那就再限制:sacctmgr modify qos n64 set MinTRESPerJob=cpu=32
这样把最大和最小都设置成32,那就只能提交32核的了。


作者
Author:
alwens    时间: 2022-11-15 15:52
pwzhou 发表于 2022-11-15 07:55
给你提供一个思路,首先将这些机器按照不同的核心数分成不同的队列,比如36就是n36,56就是n56等等,然后对 ...

谢谢指导,我测试下。
作者
Author:
iwait    时间: 2023-3-2 13:38
请问找到解决方法了吗?

我有个旁门左道,128核的装两个虚拟机,每个64核。不然只能提交任务的时候不请求全部的核心。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3