【问题标题】:Automatically rerun jobs submitted with sbatch --array upon error错误时自动重新运行使用 sbatch --array 提交的作业
【发布时间】:2019-04-25 09:08:42
【问题描述】:

我正在以数组的形式提交作业。由于难以诊断 gpu 内存问题,有时一项作业会出错。只需重新运行作业即可成功。

我想做的是捕获这个错误,记录它,然后将作业放回 slurm 的队列以重新运行。如果数组作业无法做到这一点,那很好,不必使用数组(尽管它是首选)。

我尝试过使用 sbatch --rerun,但这似乎没有达到我想要的效果(我认为此选项用于在 slurm 检测到硬件错误后重新运行,或者在作业时重新启动节点正在运行 - 这不是我的工作的情况)。

任何建议都受到好评。

【问题讨论】:

    标签: slurm sbatch


    【解决方案1】:

    如果您可以检测到 GPU 内存问题,您可以使用如下构造结束提交作业:

    if <gpu memory issue>; then
        scontrol requeue $SLURM_JOBID
    fi
    

    这会将作业放回调度队列并按原样重新启动。有趣的是,SLURM_RESTART_COUNT 环境变量保存了作业重新排队的次数。

    【讨论】:

    • 非常好 - 我会试一试,稍后再充实这个答案。更具体地说,我需要在 python 中捕获一个错误,并将其传递回提交给 slurm 的 bash 脚本。 SLURM_RESTART_COUNT 变量将非常有用 - 如果它变得太高,则值得完全放弃 - 可能是严重的硬件故障或(更有可能)用户错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多