slurm:有什么方法可以 return 未使用的核心编号吗?

slurm: Is there any way to return unused core number?

我们知道 squeue return 是 运行 工作的状态。

squeue
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
           130     debug   run.sh    user PD       0:00      1 (Resources)
           131     debug   run.sh    user PD       0:00      1 (Resources)
           128     debug 52546914    user  R       7:28      1 node1
           129     debug   run.sh    user  R       0:02      1 node1

比如我的核心数是2。

[问]有什么办法可以return只用不用的核心号吗?在示例中,未使用的核心数应 return 0。

我是否应该为此编写一个解析器,以便检索每个 R 旁边的核心编号、添加它们,然后从总核心编号中减去它,如下所示:

squeue | grep -P ' R       ' | awk '{print }' | paste -sd+ - | bc

Python 解决方案,此代码将休眠直到有一个空闲核心要启动:

import os
def slurmPendingJobCheck(): #{
    totalCore = os.popen('sinfo | awk \'{print }\' | tail -n +2 | paste -sd+ - | bc').read().rstrip('\n');

    usedCoreNum = os.popen('squeue | grep -P \' R      \' | awk \'{print }\' | paste -sd+ - | bc').read().rstrip('\n');

    if usedCoreNum == '':
       usedCoreNum = 0;

    while True: #{
       if int(totalCore) - int(usedCoreNum) > 0: # Here we obtain unused code number.
          log('There is ' +  usedCoreNum + ' used core out of ' + totalCore + '.', 'green')
          break;

       log('Waiting running jobs to be completed.', 'blue')
       time.sleep(10);
       usedCoreNum = os.popen('squeue | grep -P \' R      \' | awk \'{print }\' | paste -sd+ - | bc').read().rstrip('\n');
    #}
#}

要了解集群中可用的核心(CPU)数量,您可以使用sinfo命令:

$ sinfo -o%C
CPUS(A/I/O/T)
0/1920/0/1920

您可以使用

轻松地将数字检索到 Bash 变量中
IFS=/ read A  I O T <<<$(sinfo -h -o%C)

在运行上述命令后,A将包含分配的核心数,I将是空闲核心数,O将保留该数'other' 个内核,即耗尽、关闭等,T 将是系统中的内核总数。

请注意,在您的问题中,您谈论的是 cores,但实际上计算的是 nodes 的数量。如果你想要的是节点数,你可以使用:

$ sinfo -o%A
NODES(A/I)
0/80

有关详细信息,请参阅 sinfo man page