Python:集群作业管理
Python: cluster jobs management
我 运行 python 计算集群 (slurm) 上的脚本有两个阶段,它们是连续的。我写了两个 python 脚本,一个用于第 1 阶段,另一个用于第 2 阶段。每天早上,我都会目视检查所有第 1 阶段的工作是否完成。只有这样,我才开始第 2 阶段。
是否有更多 elegant/automated 方法将所有阶段和作业管理合并到一个 python 脚本中?如何判断作业是否已完成?
工作流程类似于以下内容:
while not job_list.all_complete():
for job in job_list:
if job.empty():
job.submit_stage1()
if job.complete_stage1():
job.submit_stage2()
sleep(60)
对于如何确定作业是否已完成,您并没有给出很多建议,但是解决此问题的一种常见方法是让作业创建一个您可以查找的哨兵文件,一些东西喜欢 COMPLETE
.
为此,您只需添加类似
的内容
# At the end of stage 1,
job_num = 1234
open('/shared/file/system/or/server/JOB_{job_num}/COMPLETE', 'x').close()
然后您每隔一段时间就轮询一次,看看在开始第 2 阶段之前是否有所有作业的 COMPLETE
文件。
您有几个行动方案:
- 使用 Slurm Python API 管理作业
- 使用作业依赖项(在 sbatch man page 中搜索
--dependency
)
- 让阶段 1 的提交脚本在阶段 2 完成时提交作业
- 使用工作流管理系统,例如
我 运行 python 计算集群 (slurm) 上的脚本有两个阶段,它们是连续的。我写了两个 python 脚本,一个用于第 1 阶段,另一个用于第 2 阶段。每天早上,我都会目视检查所有第 1 阶段的工作是否完成。只有这样,我才开始第 2 阶段。
是否有更多 elegant/automated 方法将所有阶段和作业管理合并到一个 python 脚本中?如何判断作业是否已完成?
工作流程类似于以下内容:
while not job_list.all_complete():
for job in job_list:
if job.empty():
job.submit_stage1()
if job.complete_stage1():
job.submit_stage2()
sleep(60)
对于如何确定作业是否已完成,您并没有给出很多建议,但是解决此问题的一种常见方法是让作业创建一个您可以查找的哨兵文件,一些东西喜欢 COMPLETE
.
为此,您只需添加类似
的内容# At the end of stage 1,
job_num = 1234
open('/shared/file/system/or/server/JOB_{job_num}/COMPLETE', 'x').close()
然后您每隔一段时间就轮询一次,看看在开始第 2 阶段之前是否有所有作业的 COMPLETE
文件。
您有几个行动方案:
- 使用 Slurm Python API 管理作业
- 使用作业依赖项(在 sbatch man page 中搜索
--dependency
) - 让阶段 1 的提交脚本在阶段 2 完成时提交作业
- 使用工作流管理系统,例如