我正在使用condor在几个小时内完成大约100个进程的批处理。在这些过程完成之后,我需要用第一批的结果开始下一批的运行,这个过程重复了几十次。我的condor池>100个核心,我想限制我的condor集群一次只能处理100个进程,这样condor只在第一个进程中的一个进程完成后才开始处理下一个进程。这个是可能的吗?
发布于 2015-11-26 07:38:00
这听起来像是你正在运行一个检查点的作业,然后下一个作业读入那个检查点,做一些事情,写出一个新的检查点,等等10次。我不知道为什么你需要这样分解它,为什么不用一个包装器脚本来查找并使用一个检查点文件,或者从头开始呢?
另一种选择是在提交文件中使用“要求”,并仅列出可运行作业的100台计算机或核心。类似于:
Requirements = (machine == "astrolab01") || (machine == "astrolab02") || (machine == "astrolab03") 将确保您不会一次运行3个以上的作业。除非这些机器具有多个内核,否则您需要执行以下操作:
Requirements = (name == "slot1@astrolab01") || (name == "slot1@astrolab02")发布于 2016-02-11 02:37:58
您需要使用DAG管理器-它允许您定义作业之间的父子关系,以便您可以在启动第二个作业之前等待第一个作业的结果。
DAGman还有一个MAX_JOBS_RUNNING设置,可以限制活动作业的总数。
这些都记录在8.4手册的2.10节中。您可能需要使用某种类型的脚本来构建DAG文件,并有一个位置可用于存储运行的中间结果-作业不可能直接将数据从父级传递到子级。第一次运行的输出被收集到工作目录中,然后发送到工作目录中的下一个作业。
https://stackoverflow.com/questions/33927592
复制相似问题