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

SLURM长时间运行作业被重排队重启,如何配置确保作业完成?

解决SLURM长作业中途重启的问题

下面从作业提交配置、集群规则规避、代码容错、管理员协调四个方面给出可行方案:

一、调整作业提交参数,避免被抢占/超时

  • 指定长作业分区/高优先级QoS:很多集群会划分专门的长作业分区,或者提供高优先级QoS来减少被抢占的概率。提交作业时明确指定:
    sbatch --partition=long_jobs --time=7-00:00:00 my_job.sh
    # 或有权限的话用高优先级QoS
    sbatch --qos=high_priority --time=10-00:00:00 my_job.sh
    
  • 设置足够的时间限制:不要依赖集群默认的时间配额,用--time明确设置超过作业实际运行时长的时间,比如--time=10-00:00:00表示10天,避免因超时触发重启。
  • 申请独占节点(如果允许):用--exclusive参数申请独占节点资源,这样其他作业不会抢占该节点,减少被重启的可能,但注意这个可能需要额外权限或更高的资源成本:
    sbatch --exclusive --time=7-00:00:00 my_job.sh
    
  • 使用节点保留:如果集群支持,提前向管理员申请节点保留,提交作业时指定保留名,确保运行期间节点不被分配给其他用户:
    sbatch --reservation=my_long_job_resv my_job.sh
    

二、排查集群调度规则,避开触发重启的场景

  • 检查集群抢占机制:用scontrol show config | grep PreemptType查看集群的抢占类型,如果是Requeue,低优先级作业会被直接重新排队;如果是Suspend,作业会被暂停而非重启。如果是前者,要么申请更高优先级,要么联系管理员调整你的作业权限。
  • 避开节点维护窗口:集群节点定期维护会导致作业迁移重启,用sinfo -R查看即将维护的节点,提交时排除这些节点:
    sbatch --exclude=node01,node02 my_job.sh
    

三、代码实现Checkpointing,兜底恢复进度

这是最可靠的方案,不管作业是否重启,都能从上次中断的地方继续:

  • 手动编写Checkpoint逻辑:在代码中定期将中间状态(比如计算进度、模型参数、数据指针)保存到共享存储(比如集群的NFS目录),重启时先检查是否有Checkpoint文件,有就加载状态继续。
    举个Python的简单例子:
    import pickle
    import os
    
    CHECKPOINT_FILE = "/shared/scratch/my_job_checkpoint.pkl"
    
    def load_checkpoint():
        if os.path.exists(CHECKPOINT_FILE):
            with open(CHECKPOINT_FILE, "rb") as f:
                return pickle.load(f)
        return {"step": 0, "results": []}
    
    def save_checkpoint(state):
        with open(CHECKPOINT_FILE, "wb") as f:
            pickle.dump(state, f)
    
    # 主流程
    state = load_checkpoint()
    start_step = state["step"]
    results = state["results"]
    
    for step in range(start_step, 100000):
        # 执行计算任务
        result = run_calculation(step)
        results.append(result)
        # 每1000步保存一次Checkpoint
        if step % 1000 == 0:
            state["step"] = step + 1
            state["results"] = results
            save_checkpoint(state)
    
  • 利用SLURM内置Checkpoint功能:部分集群支持SLURM自动保存作业状态,提交时加上--checkpoint参数:
    sbatch --checkpoint=yes --checkpoint-dir=/shared/checkpoints my_job.sh
    
    注意这个需要集群管理员提前配置支持,先确认集群是否开启该功能。

四、联系集群管理员解决全局限制

如果以上方法都没用,大概率是集群的全局配置限制(比如默认的作业重新排队规则、资源配额),直接找管理员:

  • 说明你的长作业需求,请求将作业加入不被抢占的白名单
  • 询问是否有专门的长作业资源池或队列
  • 排查是否存在节点故障自动迁移的阈值设置过高等系统问题

内容的提问来源于stack exchange,提问作者Emma Athan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:43:32