【问题标题】:How to get PBS/Torque/Slurm job completion status in a Python script如何在 Python 脚本中获取 PBS/Torque/Slurm 作业完成状态
【发布时间】:2017-01-11 09:31:22
【问题描述】:

我正在编写一个 python 脚本,它为数百个作业准备输入文件(比如 job.id = 1 到 job.id = 1000,其中 job.id 是自分配的 id),然后将它们提交到集群上执行。每个作业有 3 个阶段,s1、s2 和 s3,其中 s2 取决于 s1 的结果,而 s3 取决于 s2 的结果。在超级集群上使用 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,以便它可以进入下一阶段(不检查状态其余的工作)? 或者有人可以提出更好的解决方案吗?

【问题讨论】:

    标签: python job-scheduling pbs


    【解决方案1】:

    完成此操作的正常方法是通过作业dependencies。例如,如果您的工作在开始之前依赖于另一个工作,您可以执行以下操作:

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

    那里的链接指向 Torque 文档。我相当肯定大多数资源管理器都提供类似的功能。

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多