如何通过Slurm的srun、sbatch、salloc调整运行中作业的内存分配?
为运行中的Slurm作业增加内存分配
可以给运行中的Slurm作业调整内存分配,但有几个前提和具体操作方式:
核心限制
- 集群管理员必须开启了作业资源调整的权限(比如相关QoS配置、
AllowQoSOverride参数),否则无法执行调整操作。 - 调整后的内存值不能超过作业所在分区(Partition)的单节点最大内存限制。
操作步骤
针对已启动的作业(不管是srun/salloc/sbatch提交的),使用scontrol update命令修改内存配置:
scontrol update jobid=<你的作业ID> MinMemoryNode=<新内存值>
举个例子,把作业ID为12345的任务内存从8G调整到16G:
scontrol update jobid=12345 MinMemoryNode=16G
额外说明
- 如果作业运行在多节点集群,
MinMemoryNode是单节点的内存配额,若需要按CPU核心分配,可替换为MinMemoryCPU参数(比如MinMemoryCPU=4G表示每个核心分配4G内存)。 - 若集群支持动态资源调整,修改后无需重启作业即可生效;但如果当前节点没有多余空闲内存,调整会失败,此时只能重新提交作业并设置更大的内存。
避免内存不足的小技巧
- 提交作业前可先用小测试任务跑一轮,之后用
seff <作业ID>查看实际内存消耗,再给正式作业设置合理的内存参数。 - 可以用
--mem-per-cpu替代--mem,按CPU核心维度分配内存,比整节点分配更精准。 - 部分集群允许
--mem=0,让Slurm自动分配当前节点的全部可用内存(需确认集群规则)。
内容的提问来源于stack exchange,提问作者esahc
相关产品推荐
相关产品推荐

