我的问题不是直接与 SLURM 相关,而是关于如何围绕它组织工作。 我可以将提交给 SLURM 的作业类型总结为两类:属于流程一部分且其结果将由后续步骤使用的作业以及其结果必须手动修改或处理的作业。 可以自动处理的结果并不是真正的问题,任何错误检查也可以自动执行。 对于需要我手动验证的结果,但我总是担心忘记其中的一些结果。这是一个问题,尤其是当我发送大量长时间运行的作业并且作业的完成可能需要几天的时间时。 如果在所有结果完成后(如果没有失败)进行修改所有结果是相当容易的,但是我经常必须在作业结束时逐渐修改结果或重新提交一些失败的作业。 这会带来很高的在此过程中引入手动错误的风险,因为我很容易忘记处理某些结果或重新提交一些失败的作业。
我想要一个简单的方法来提醒我所有已完成且需要修改的作业,以及所有失败且应重新提交的作业的列表。 我考虑了一些方法,其中一些我已经测试过并且正在使用。它们都不是完美的,我正在考虑编写一个自定义软件来管理我的这个要求。我问这个问题是为了看看是否已经存在任何替代解决方案。
我已经确定了三种解决方案:
提交作业时,将作业 ID 添加到需要处理的作业文档中
让作业在完成或失败时将其提交到文档中
使用 sacct 命令和 workdir 输出参数
所有这些解决方案实施起来都相当简单,但每个都有其自身的缺点。您知道在这些情况下可以使用任何其他解决方案并且会带来更好的结果吗?
有多种工具可以帮助管理工作,您可以在本文档或这些视频中查看其中一些工具,尽管我不确定它们是否旨在应对手动干预。
我考虑的解决方案涉及使用
comment
工作领域。您可以使用 --coment="Initial comment"
提交带有初始评论的作业,然后在提交脚本的最后一行添加命令:
scontrol update jobid=$SLURM_JOB_ID comment="Ready for review"
然后您可以使用 列出所有 正在运行和挂起
作业的评论squeue --me --Format jobid,state,comment
并且,如果 Slurm 配置为
AccountingStoreFlags=job_comment
,当作业 完成 时,则为
sacct -X --user $USER --format jobid,state,comment
查看作业输出后,您可以使用以下命令更改其在 Slurm 数据库中的注释:
sacctmgr modify job jobid=XXXXXX set comment="Reviewed-OK"
或
sacctmgr modify job jobid=XXXXXX set comment="Reviewed-tofix"
然后,也许
sacctmgr modify job jobid=XXXXXX set comment="Reviewed-fixed"
这样,您就可以根据需要对其执行的手动操作来标记作业。