【发布时间】:2023-06-10 11:52:01
【问题描述】:
最近,我一直在尝试在使用 SLURM 调度程序的 HPC 集群上使用 Dask 进行一些机器学习工作。重要的是,在这个集群上,SLURM 被配置为每个作业的硬墙时间限制为 24 小时。
最初,我使用一个工作人员运行我的代码,但我的工作内存不足。我试图增加工人的数量(因此,请求的节点的数量),但工人卡在 SLURM 队列中(原因被标记为“优先级”)。与此同时,master 会跑,最终撞墙,让工人在他们终于开始时死去。
考虑到问题可能是我请求了太多 SLURM 作业,我尝试将工作人员压缩为单个多节点作业 using a workaround I found on github。然而,这些多节点作业遇到了同样的问题。
然后我尝试与集群的 IT 支持团队取得联系。不幸的是,他们对 Dask 不太熟悉,只能提供一般性的指导。他们的主要建议是要么暂停 master 作业,直到 worker 准备好,要么每 24 小时启动新的 master,直到 worker 可以离开队列。为了帮助实现这一点,他们引用了 SLURM 选项 --begin 和 --dependency。令我懊恼的是,我无法使用任一建议找到解决方案。
因此,我想问一下,在 Dask/SLURM 环境中,是否有一种方法可以强制 master 在 worker 准备好之前不启动,或者启动一个能够“继承”worker 的 master以前由另一个主人创建。
非常感谢您提供的任何帮助。
【问题讨论】:
标签: dask slurm dask-jobqueue