【问题标题】:Python: cluster jobs managementPython:集群作业管理
【发布时间】:2019-08-19 14:46:51
【问题描述】:

我在具有两个阶段的计算集群(slurm)上运行 python 脚本,它们是顺序的。我写了两个 Python 脚本,一个用于 Stage 1,另一个用于 Stage 2。每天早上我都会检查是否所有的 Stage 1 作业都在视觉上完成了。只有这样,我才开始第二阶段。

有没有更优雅/自动化的方式将所有阶段和作业管理组合在一个 Python 脚本中?如何判断作业是否已完成?

工作流程类似于以下内容:

while not job_list.all_complete():
    for job in job_list:
        if job.empty():
            job.submit_stage1()

        if job.complete_stage1():
            job.submit_stage2()

    sleep(60)

【问题讨论】:

  • 这些阶段的输出是什么?你怎么知道一个阶段何时完成?
  • 我尽量让它通用。有没有办法跳过“结束文件”?
  • 我的意思是,您可以让您的工作在完成后返回一个值。但这在分布式系统中很难。
  • 我想还需要让 python 在后台运行以监控作业,直到所有作业都完成。所以也许伪代码是一个很好的方向。但是如果工作出错了怎么办?我怎么能表示重播?

标签: python cluster-computing slurm


【解决方案1】:

你有几个行动方案:

【讨论】:

    【解决方案2】:

    对于如何确定作业是否已完成,您并没有给出太多建议,但解决此问题的常用方法是让作业创建一个您可以查找的哨兵文件,例如 @ 987654321@.

    为此,您只需添加类似

    # At the end of stage 1,
    job_num = 1234
    open('/shared/file/system/or/server/JOB_{job_num}/COMPLETE', 'x').close()
    

    然后您只需每隔一段时间进行一次轮询,看看在开始第 2 阶段之前您是否有一个用于所有作业的 COMPLETE 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2018-08-23
      • 2021-03-04
      • 2020-03-04
      • 1970-01-01
      相关资源
      最近更新 更多