TypechoJoeTheme

MetMan's Blog

网站页面

Slurm解除作业内存限制方法

MetMan博 主
2023-10-24
/
0 评论
/
439 阅读
/
469 个字
/
百度已收录
10/24
本文最后更新于 2023年10月24日,已超过 331天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

问题

有一个串行作业通过Slurm提交到计算节点计算,程序需要的内存量虽然没有超过计算节点的物理内存,但因为Slurm对作业分配的单个CPU核的内存进行了限制,导致程序进程因out-of-memory(OOM)被Slurm强制杀掉。

我们通过以下程序来复现问题。该程序申请了一个1024*1024*1024*8字节大小(8GB)的双精度buffer数组,加上其它一些量的内存需求,该程序实际上需要>8GB的内存空间。

program main
  implicit none
  integer,parameter :: NX = 1024
  real*8,allocatable,dimension(:,:,:) :: buffer
  integer :: i,j,k

  allocate(buffer(NX,NX,NX))
  buffer = 1.0d0
  buffer = buffer + sqrt(buffer+3.0)
  print*, buffer(1,1,1)
  deallocate(buffer)
end

运行对应的Slurm作业脚本如下

#!/usr/bin/bash
#SBATCH -J test
#SBATCH --comment test
#SBATCH -p serial
#SBATCH -o ./log.out
#SBATCH -e ./log.err

ulimit -s unlimited

./a.out

sbatch job.sbatch 提交作业运行,会报以下错误信息:

/opt/gridview/slurm/spool_slurmd/job211575/slurm_script: line 13: 1529967 Killed                  ./a.out
slurmstepd: error: Detected 1 oom-kill event(s) in StepId=211575.batch cgroup. Some of your processes may have been killed by the cgroup out-of-memory handler.

从报错信息可以看出是由于作业请求内存超过了Slurm资源限制(out-of-memory),因此被Slurm杀掉。

那么如何查询节点的Slurm内存资源配置信息呢?

查询Slurm内存配置方法

  • 查询计算节点物理内存大小
$ sinfo -N -o "%.12n %.10P %.4c %.10m"
  • 查询节点已使用内存大小及限制
$ scontrol -o show nodes|awk '{print $1, $23, $24, $35, $39}'

其中$23 $24 $35 $39与机器操作系统架构显示名称有关系(因为架构信息是空格分隔,不同架构导致awk用空格分隔的列数不同)

输出信息示例:

NodeName=xxxxx RealMemory=513330 AllocMem=7800 Partitions=serial AllocTRES=cpu=1,mem=7800M

其中RealMemory是节点实际内存量,AllocMem是分配的内存量。AllocTRES是分配的可追踪资源,1个CPU核的内存大小为7800MB。

可以看出对于串行队列作业,每个CPU核默认分配7800MB,少于以上测试程序需要的内存量,这解释了测试程序为何会因内存不够被Slurm杀掉。

解决方法

使用--mem或者--mem-per-cpu指定请求的内存量,区别在于前者请求每个节点(Node)的内存量,而后者请求的是每个CPU的内存量。

对于串行作业,使用--mem-per-cpu更加合适,以下作业脚本申请了9GB的内存,程序成功运行。

#!/usr/bin/bash
#SBATCH -J test
#SBATCH --comment test
#SBATCH -p serial
#SBATCH --mem-per-cpu=9G  #请求单核分配9GB内存空间
#SBATCH -o ./log.out
#SBATCH -e ./log.err

ulimit -s unlimited

./a.out 

参考资料

job scheduler - Slurm: How to find out how much memory is not allocated at a given Node - Server Fault

Common Job Failures - Yale Center for Research Computing

slurm
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/51/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码