具有不同 walltimes 的 DASK 工作人员

DASK workers with different walltimes

我正在使用 dask-jobqueue 在小型 SLURM 集群上启动许多 2-5 分钟的作业(使用子进程)。我 运行 总共有几千个工作,我偶尔会让我的工人死去,然后通过 SLURM 重新洗牌,以善待其他用户。在 dask-jobqueue 文档站点上有一段话:

So, to get a large cluster quickly, we recommend allocating a dask-scheduler process on one node with a modest wall time (the intended time of your session) and then allocating many small single-node dask-worker jobs with shorter wall times (perhaps 30 minutes) that can easily squeeze into extra space in the job scheduler. As you need more computation, you can add more of these single-node jobs or let them expire.

这听起来很像我想做的,但我的问题是:你如何配置它?

如果我用我的完整 运行(~24 小时)所需的总 walltime 设置我的集群,我不知道如何启动 walltime 更短的 worker:

# setup cluster, launch one worker with 24hr walltime
In [1]:from dask_jobqueue import SLURMCluster
   ...:cluster = SLURMCluster(memory='8g',cores=4,walltime='24:00:00')
   ...:cluster.start_workers(1)
Out[1]:SLURMCluster(cores=0, memory=0 B, workers=0/1, jobs=0/1)

# try to launch a worker with shorter walltime???
In [2]:cluster.start_workers(100,walltime='00:30:00')
TypeError                                 Traceback (most recent call last)
<ipython-input-16-77ae6b0ed75d> in <module>
----> 1 cluster.start_workers(100,walltime='00:30:00')

TypeError: start_workers() got an unexpected keyword argument 'walltime'

如果我尝试只使用 30 分钟的 walltime 开始,所有工人同时死亡(通常)并导致 DASK 崩溃。

我发现了一个 example 额外的争论被传递给了个别工人,但这些是资源,并且在 启动工人后被传递(当时我假设 walltime 限制已经设置)。

有什么方法可以在初始化时为每个作品分配 walltime 等属性吗?

您在此处指定的挂钟时间适用于工作人员,而非调度程序。

SLURMCluster(memory='8g',cores=4,walltime='24:00:00')

调度程序是 运行 无论你 运行 宁 SLURMCluster 对象(假设你没有提到它,它可能是在一个交互式节点上?)

你是对的,如果你同时启动所有工人,他们将同时死亡。如果您希望有更多的工人来接替他们的位置,您可以考虑使用 adapt 方法来确保有新的工人来接替他们的位置。

cluster.adapt(minimum=100, maximum=100)