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。
我们知道 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。