Dask JobQueue:能否让SLURM同时启动所有工作节点?
在Dask-JobQueue的SLURMCluster中一次性调度所有节点
Dask-JobQueue完全支持让SLURM一次性分配所有所需节点,避免逐个启动导致的资源浪费和运行时间不足问题,具体实现如下:
核心实现:提交单批多节点SLURM作业
默认的SLURMCluster会为每个worker单独提交SLURM任务,所以是逐个启动节点。要一次性申请所有节点,只需让Dask提交单个SLURM作业,并在该作业内启动所有worker。
修改后的代码示例:
from dask_jobqueue import SLURMCluster from dask.distributed import Client cluster = SLURMCluster( processes=1, cores=25, walltime="1-00:00:00", # 关键参数:告诉SLURM一次性申请20个节点 job_extra=["-N", "20"], # 指定总worker数为20(每个节点1个worker,匹配节点数) n_workers=20 ) client = Client(cluster)
参数说明
job_extra=["-N", "20"]:直接传递SLURM的-N参数,要求调度器一次性分配20个节点,SLURM会等到所有节点可用后才启动整个作业,不会分批启动。n_workers=20:对应20个节点,每个节点启动1个worker(和processes=1匹配),确保每个节点的资源被充分利用。
额外注意点
- 如果需要每个节点启动多个worker(比如
processes=2),只需将n_workers设为20*2=40,保持job_extra=["-N", "20"]不变即可,这样单批作业申请20个节点,每个节点启动2个worker。 - 这种模式和dask_mpi的单批作业逻辑一致,所有节点会同时启动,运行时间完全同步,有效运行时间就是你设置的24小时,不会出现先启动节点等待的情况。
内容的提问来源于stack exchange,提问作者Axel Wang
相关产品推荐
相关产品推荐

