[英]Slurm + drake: free resources of idle job array workers for dynamic branching
编辑:在发现所描述的行为不是源于 SLURM 而是源于 R package {drake} 后,对问题标题和标签进行了调整,后者用作执行 SLURM 数组作业的代理。
我有以下情况:
n=70
的 Slurm 作业数组,每个作业有 X CPU 和 Y Mem这会导致以下情况:
对于任务 71-120(完成 1-70 之后),我有 50 个活跃的工人和 20 个空闲的工人。 空闲的工人将不再做任何工作,只是等待活动的工人完成。
现在随着时间的推移,越来越多的工人完成工作,在某些时候我有 5 个活跃的工人和 65 个闲置的工人。 假设最后 5 个任务需要相当长的时间才能完成。 在这段时间里,空闲的worker阻塞了集群上的资源,并不断的将以下内容打印到各自的日志文件中
2021-04-03 19:41:41.866282 | > WORKER_WAIT (0.000s wait)
2021-04-03 19:41:41.868709 | waiting 1.70s
2021-04-03 19:41:43.571948 | > WORKER_WAIT (0.000s wait)
[...]
在没有更多任务分配后,有没有办法关闭这些空闲的工作人员并释放资源? 目前他们等到所有工作人员都完成后才释放资源。
感谢@Michael Schubert 的评论,我发现在使用 R package {drake} 及其动态分支功能时会发生这种行为(静态目标可以很好地关闭)。
在这里,“目标”可以具有动态“子目标”,可以通过 SLURM 将其计算为单独的数组作业。 在计算完所有子目标之后,这些子目标将被组合起来。 在此聚合步骤发生之前,所有工作人员都保持在“等待”state 中,其中他们 output 上面显示的WORKER_WAIT
状态。
大胆猜测:由于 {drake} 中动态目标的设计,这可能无法避免,因为要聚合所有子目标,这些子目标首先需要存在。 因此,必须将各个子目标保存/保存在临时 state 中,直到所有子目标都可用。
以下 {drake} R 代码可与 SLURM 集群结合使用,以重现解释的行为:
list_time = c(30,60),
test_dynamic = target(
Sys.sleep(time = list_time),
dynamic = map(list_time)
),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.