You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slurm与drake联用下空闲Job Array Worker资源释放问题咨询

解决{drake}配合Slurm Array时空闲worker不释放资源的方案

启用内置的空闲worker自动回收逻辑

  • {drake}默认配置下,已成功连接的worker即使无任务可拉取,也会持续轮询等待直到整个作业流全部结束,不会主动退出进程。可在调用核心执行函数make()时,通过参数调整关闭空闲worker常驻逻辑:
    • 将recycle_empty_workers参数设置为FALSE(默认为TRUE即维持所有worker的常驻连接),切断无任务状态下worker的长期驻留逻辑
    • 配置worker_idle_timeout参数(单位为秒),设定连续无任务可领取的最长等待时间,超过阈值后worker会主动退出进程,对应Slurm Array实例随之结束、释放占用的CPU与内存资源
  • 可同步调整sleep轮询间隔参数,拉长无任务状态下的任务拉取间隔,减少空闲状态下的无效CPU消耗。配置完成后,空闲worker达到超时阈值会直接退出,不再持续输出无意义的WORKER_WAIT状态日志

调度端主动触发剩余空闲worker终止

  • 当{drake}主调度进程确认所有动态分支任务均已完成、无剩余待派发任务时,可主动定位同Slurm Array内仍处于运行状态的实例并批量终止,避免空闲worker长期占位
  • 可通过{drake}提供的drake_progress()接口实时校验任务状态,待所有分支任务状态更新为finished后,执行集群侧的实例终止操作,参考示例逻辑:
    # 执行所有动态分支任务
    drake::make(..., verbose = 0L)
    # 确认无剩余待运行任务后,终止同Array下的所有剩余worker进程
    remaining_jobs <- system2("squeue", args = c("-u", Sys.getenv("USER"), "-r", "-o", "%i", "-n", Sys.getenv("SLURM_JOB_NAME")), stdout = TRUE)
    system2("scancel", args = remaining_jobs)
    

提交侧参数优化降低无效资源占用

  • 结合任务运行时长的差异分布,调整Slurm Array的提交规模,避免提交的worker数量远大于峰值可并行运行的任务数。可适当降低初始提交的worker数量,让动态分支任务在worker队列中排队轮询,而非提前抢占大量集群资源处于空闲等待状态
  • 可在Slurm提交脚本中为每个Array实例设置合理的运行时长上限,避免异常场景下空闲worker永久占用集群资源

内容的提问来源于stack exchange,提问作者pat-s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 20:06:08