我有一个计算任务,它被分成几个具有依赖性的单独程序执行。我使用 Condor 7 作为任务调度程序(使用 Vanilla Universe,由于对程序的限制超出了我的能力范围,因此不涉及检查点),因此 DAG 看起来像是一个自然的解决方案。然而,有些程序需要在同一主机上运行。我在 Condor 手册中找不到有关如何执行此操作的引用。
DAG 文件示例:
JOB A A.condor
JOB B B.condor
JOB C C.condor
JOB D D.condor
PARENT A CHILD B C
PARENT B C CHILD D
我需要表达的是B和D需要运行在同一个计算机节点上,并且不破坏B和C的并行执行。
感谢您的帮助。
最佳答案
Condor 没有任何简单的解决方案,但至少有一个可行的办法:
让 B 在执行节点上留下一些状态,可能以文件的形式,显示类似 MyJobRanHere=UniqueIdentifier"
的内容。使用 STARTD_CRON support 检测到这一点并在其中通告它机器 ClassAd。让 D 使用 Requirements=MyJobRanHere=="UniqueIdentifier"
。D 最终清理的一部分,或者可能是新节点 E,它会删除状态。如果您正在运行大量工作完成后,您可能需要偶尔清理剩余的状态。
关于workflow - 使用 DAG 的 Condor 作业以及一些需要运行同一主机的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340004/