SLURM 报告的内存消耗

SLURM reported memory consumption

提问人:Raphael 提问时间:10/26/2023 更新时间:11/2/2023 访问量:19

问:

我正在尝试了解一个简单的作业消耗了多少内存(基于这个python脚本)。我在分配了不同内核数的单个工作线程上运行相同的脚本。

这个小测试的结果是:

$ sacct -j 875,876,877,878,879,880 --format=JobID,reqcpus,elapsed,MaxRSS,maxvmsize
JobID         ReqCPUS    Elapsed     MaxRSS  MaxVMSize
------------ -------- ---------- ---------- ----------
875                 1   00:03:24
875.batch           1   00:03:24     33584K    254884K
876                 2   00:01:52
876.batch           2   00:01:52     43560K    274124K
877                 4   00:01:09
877.batch           4   00:01:09     66672K    311580K
878                 8   00:00:38
878.batch           8   00:00:38    111636K    385468K
879                16   00:00:20
879.batch          16   00:00:20      1308K     79660K
880                32   00:00:11
880.batch          32   00:00:11      1488K     79792K

这基本上没问题,我希望如果我使用更多的内核,时间会更短。我不太明白的是,为什么 MaxRSS 和 MaxVMSize 会随着内核数量的增加而增加,但随后突然下降。

有谁知道这是怎么回事?

Linux 资源 slurm HPC

评论


答:

1赞 damienfrancois 11/2/2023 #1

内存使用量随着 CPU 数量的增加而增加的事实是意料之中的,因为包依赖于分叉,由于引用计数,在 Python 上下文中,在大多数情况下会复制内存,并且默认情况下通过酸洗信息和发送数据副本来管理内存共享。multiprocessingmultiprocessing

它减少时减少的事实很可能是由于 Slurm 以采样间隔计算内存使用情况,这是默认的(检查)似乎在您的情况下,使用 是 ,因此您最终会得到一个内存测量,该测量发生在作业的一开始,并不代表实际使用情况。ReqCPUS>830scontrol show config|grep JobAcctGatherFrequencyReqCPUS>8Elapsed<30s

评论

0赞 Raphael 11/2/2023
谢谢@damienfrancois,你的猜测是正确的。我将频率增加到 5 秒,瞧,内存消耗或多或少地与使用的内核数量呈线性关系。