【问题标题】:Reconfigure Dask jobqueue on the fly即时重新配置 Dask 作业队列
【发布时间】:2021-05-18 06:00:02
【问题描述】:

我有一个 Slurm 的作业队列配置,如下所示:

cluster = SLURMCluster(cores=20,
                       processes=2,
                       memory='62GB',
                       walltime='12:00:00',
                       interface='ipogif0',
                       log_directory='logs',
                       python='srun -n 1 -c 20 python',
                       )

当增加进程数时,每个工作人员获得的内存分配会减少。在我的工作流程开始时,这些任务是高度并行的,并且内存使用量很少。但是,流的结尾目前是串行的,需要更多的内存。除非我将进程设置为小(即 2 或 3),否则工作人员将“耗尽”内存并且 dask 将重新启动它(这会启动无限循环)。有足够的内存在单个节点上运行作业,我想有效地利用每个节点(最小化请求的总数)。

是否可以重新配置 cluster 以使工作流稍后在工作流中可用的内存更大?

【问题讨论】:

    标签: dask dask-distributed dask-jobqueue


    【解决方案1】:

    不幸的是,即时更换工人并不容易。 GitHub 上讨论了几种解决方法:link1link2

    但是,最简单的解决方案是关闭现有的调度程序并使用不同的参数启动一个新的调度程序。可以循环执行此操作,直到任务完成,以便每次增加资源时,但如果您的队列时间很长,这可能效果不佳。一些粗略的伪代码:

    starting_memory = 10
    while num_tasks_remaining>0:
        starting_memory += 5 
        params_dict = {'mem': f'{starting_memory}GB'}
        with SLURMCluster(**params_dict) as cluster, Client(cluster) as client:
            # some code that uses the client and updates the num tasks remaining
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 2021-01-05
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 2023-03-23
      相关资源
      最近更新 更多