gpt4 book ai didi

python - 如何在 Python 脚本中获取 PBS/Torque/Slurm 作业完成状态

转载 作者:太空宇宙 更新时间:2023-11-04 05:16:29 26 4
gpt4 key购买 nike

我正在编写一个 python 脚本,它为数百个作业准备输入文件(比如 job.id = 1 到 job.id = 1000,其中 job.id 是一个自分配的 id),然后将它们提交到集群上以供执行。每个作业有 3 个阶段,s1、s2 和 s3,其中 s2 取决于 s1 的结果,而 s3 取决于 s2 的结果。在 super 集群上使用 48-64 个 CPU 内核,每个作业可能需要 3 到 4 天。我希望我的脚本自动处理每个作业的所有阶段。我认为的一种方法是一次提交所有作业的 s1 阶段,然后定期检查所有作业的输出文件(如果存在)的状态或读取队列状态并查看特定作业是否从队列中消失(即完成),每 5 或 10 或 12 小时后。我的脚本的基本布局如下。

import sched, time
from subprocess import *

jobs_running = True
s = sched.scheduler(time.time, time.sleep)

def Prepare():
print "prepare jobs by reading some source files"
print "set some flages for each job, e.g. job.id, job.stage, etc."
print "submit jobs using < Popen('qsub nNodes Ncores jobinputfile') > "

def JobStatus():
global jobs_running
print "check status of each job"
"""
for job in jobs:
if job.stage1 == complete:
print "goto stage 2"
print "reset job.stage flages etc."
elif job.stage2 == complete:
print " go to stage 3"
.
.
else last stage:

if all stages complete for all jobs:
set (global var) jobs_running = False
"""

def SecondStage():
print " prepare for second stage "
print " submit using < Popen('qsub nNodes Ncores jobinputfile') > "

def TimeSchedular(sc):
global jobs_running
JobStatus()
if jobs_running :
s.enter(36000, 1, TimeSchedular, (sc,))

if (__name__ == "__main__"):
Prepare()
s.enter(36000, 1, TimeSchedular, (s,))
s.run()

由于很多原因,这绝对不是一个优雅的解决方案。例如,我必须检查每个周期中每个作业的状态。此外,如果作业在检查状态后立即完成,它将等待接下来的 5 或 10 或 12 小时,以提交下一阶段。所以我的问题是:

是否有某种方法可以直接从 PBS/SLURM 或上述布局中的系统获取作业完成信号,例如 job.id = 99,以便它可以进入下一阶段(无需检查其余的工作)?或者有人可以提出更好的解决方案吗?

最佳答案

完成此任务的正常方法是通过作业 dependencies .例如,如果你有一个工作在开始之前依赖于另一个工作,你可以这样做:

jobid1=`qsub phase_one.sh`
jobid2=`qsub phase_two.sh -W depend=afterok:${jobid1}`
# and so on as needed

那里的链接转到扭矩文档。我相当确定大多数资源管理器都提供类似的功能。

关于python - 如何在 Python 脚本中获取 PBS/Torque/Slurm 作业完成状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com