【问题标题】:Limiting number of concurrent processes scheduled by condor限制 condor 调度的并发进程数
【发布时间】:2015-11-25 22:33:18
【问题描述】:

我在几个小时内使用 condor 批量处理约 100 个进程。这些过程完成后,我需要从第一批的结果开始下一批运行,这个过程重复了几十次。我的 condor 池大于 100 个核心,我想将我的 condor 集群限制为一次只能执行 100 个进程,以便 condor 仅在第一个进程完成后才开始处理下一个进程。这可能吗?

【问题讨论】:

  • 所以,为了清楚起见,您有一组工作,例如:a1-->a2-->a3---->a10 b1-->b2-->b3--- ->b10 其中 a3 需要 a2 完成,a2 需要 a1 等?
  • 或者,a2需要a1 AND b1先完成吗?

标签: condor


【解决方案1】:

这听起来就像您只是在运行一个检查点的作业,然后下一个作业读取该检查点并执行一些操作并写出一个新的检查点等 10 次。我不知道你为什么需要按照你的方式分解它,为什么不只是有一个包装脚本来查找检查点文件并使用它,或者从头开始?

另一种选择是在您的提交文件中使用“要求”,并仅列出您的作业可以在其上运行的 100 台机器或内核。比如:

Requirements =  (machine == "astrolab01") || (machine == "astrolab02") || (machine == "astrolab03") 

将确保您一次运行的作业不会超过 3 个。除非这些机器有多个内核,否则您需要执行以下操作:

Requirements =  (name == "slot1@astrolab01") || (name == "slot1@astrolab02")

【讨论】:

    【解决方案2】:

    您需要使用 DAG 管理器 - 这允许您定义作业之间的父子关系,以便您可以在开始第二个作业之前等待第一个作业的结果。

    DAGman 还有一个 MAX_JOBS_RUNNING 设置,可以限制您的活动作业总数。

    这一切都记录在 8.4 手册的第 2.10 节中。您可能需要使用某种脚本来构建 DAG 文件,并有一个可用于存储运行的临时结果的位置 - 作业无法将数据直接从父级传递给子级。输出从第一次运行收集到工作目录,然后从工作目录发送到下一个作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2015-07-17
      • 2013-01-17
      • 1970-01-01
      • 2015-07-07
      • 2019-04-08
      • 1970-01-01
      相关资源
      最近更新 更多