1

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

4

2 回答 2

1

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

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

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

于 2016-02-10T18:37:57.713 回答
1

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

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

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

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

Requirements =  (name == "slot1@astrolab01") || (name == "slot1@astrolab02")
于 2015-11-25T23:37:59.900 回答