错误时自动重新运行使用 sbatch --array 提交的作业

Automatically rerun jobs submitted with sbatch --array upon error

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

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

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

任何建议都很受欢迎。

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

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

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