pyslurm icon indicating copy to clipboard operation
pyslurm copied to clipboard

job mem returns as "None"

Open robgics opened this issue 1 year ago • 3 comments

Details

  • Slurm Version: 23.02.4
  • Python Version: 3.6.8
  • Cython Version: 3.0.0
  • PySlurm Branch: main
  • Linux Distribution: RHEL 8.8

Issue

Code that processes the memory of jobs was crashing due to a None being included.

I identified that this job (scontrol output) was causing pyslurm to give a value of "None" for job.memory.

JobId=5909485 JobName=interactive UserId=xvy5180(5712646) GroupId=xvy5180(5712646) MCS_label=N/A Priority=300000 Nice=0 Account=mxs2589_e_gpu QOS=normal JobState=RUNNING Reason=None Dependency=(null) Requeue=0 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0 RunTime=05:12:33 TimeLimit=10:00:00 TimeMin=N/A SubmitTime=2023-09-18T10:57:13 EligibleTime=2023-09-18T10:57:13 AccrueTime=2023-09-18T10:57:13 StartTime=2023-09-18T10:57:31 EndTime=2023-09-18T20:57:32 Deadline=N/A PreemptEligibleTime=2023-09-18T10:57:31 PreemptTime=None SuspendTime=None SecsPreSuspend=0 LastSchedEval=2023-09-18T10:57:31 Scheduler=Main Partition=sla-prio AllocNode:Sid=submit02:526250 ReqNodeList=(null) ExcNodeList=(null) NodeList=p-gc-3003 BatchHost=p-gc-3003 NumNodes=1 NumCPUs=1 NumTasks=1 CPUs/Task=1 ReqB:S:C:T=0:0:: ReqTRES=cpu=1,mem=79488M,node=1,billing=1,gres/gpu=1 AllocTRES=cpu=1,mem=79488M,node=1,billing=1,gres/gpu=1 Socks/Node=* NtasksPerN:B:S:C=0:0:: CoreSpec=* MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0 Features=gc DelayBoot=00:00:00 OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null) Command=/bin/sh Power= MemPerTres=gres:gpu:79488 TresPerJob=gres:gpu:1

robgics avatar Sep 18 '23 20:09 robgics

Hi,

yeah, due to no memory specification for the Job (MinMemoryNode=0), the current values that are checked in the memory property are all set to 0 (which means UNLIMITED/INFINITE in Slurm), which is then further translated to None.

I can try and extract the values that are shown in either ReqTRES/AllocTRES for mem and return that instead when the other values are set to 0. However, I'm not sure if it is always guaranteed that ReqTRES/AllocTRES hold a value for mem. To be absolutely safe, one has to handle the None case. Or instead of None, I could also return the UNLIMITED constant

tazend avatar Sep 21 '23 19:09 tazend

Hmm....that's an interesting one. I would think UNLIMITED would be more accurate than Python None, because it's intentional. I assumed an error was causing it to be None, but I'd know that wasn't the case if it was 'UNLIMITED'.

So then in that case, to try to come up with a measure of how much memory the job has requested, I'd have to take all of the total memory values for all nodes the job has requested and add them together....right? I mean, it's asking for all memory on all nodes it's using, right?

robgics avatar Sep 22 '23 17:09 robgics

I see what you're saying about AllocTres memory values. I guess if I receive an "UNLIMITED" for memory, then I could try to parse those values to come up with a memory amount. I don't think pyslurm should be burdened with that....as the actual mem value was indeed "UNLIMITED".

robgics avatar Sep 22 '23 18:09 robgics