提问人:Raphael 提问时间:10/26/2023 更新时间:11/2/2023 访问量:19
SLURM 报告的内存消耗
SLURM reported memory consumption
问:
我正在尝试了解一个简单的作业消耗了多少内存(基于这个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 会随着内核数量的增加而增加,但随后突然下降。
有谁知道这是怎么回事?
答:
1赞
damienfrancois
11/2/2023
#1
内存使用量随着 CPU 数量的增加而增加的事实是意料之中的,因为包依赖于分叉,由于引用计数,在 Python 上下文中,在大多数情况下会复制内存,并且默认情况下通过酸洗信息和发送数据副本来管理内存共享。multiprocessing
multiprocessing
它减少时减少的事实很可能是由于 Slurm 以采样间隔计算内存使用情况,这是默认的(检查)似乎在您的情况下,使用 是 ,因此您最终会得到一个内存测量,该测量发生在作业的一开始,并不代表实际使用情况。ReqCPUS>8
30
scontrol show config|grep JobAcctGatherFrequency
ReqCPUS>8
Elapsed
<30s
评论
0赞
Raphael
11/2/2023
谢谢@damienfrancois,你的猜测是正确的。我将频率增加到 5 秒,瞧,内存消耗或多或少地与使用的内核数量呈线性关系。
评论