如何在pyiron中实现带依赖的远程SLURM集群多作业调度?
pyiron实现SLURM作业依赖调度的方案
pyiron原生支持跨作业依赖调度,无需常驻Jupyter进程,所有依赖逻辑会自动转化为SLURM原生的作业依赖规则,由集群SLURM服务端统一维护,具体操作步骤如下:
- 首先预先定义4个作业的计算逻辑、SLURM提交参数(队列、核心数、最大运行时长等),无需立即提交
# 示例代码,根据你的实际作业类型调整 from pyiron_atomistics import Project pr = Project("your_workflow_dir") # 定义作业A jobA = pr.create.job.SomeJobType("job_a") jobA.server.queue = "your_slurm_queue" jobA.server.cores = 16 jobA.server.run_time = 3600*24*3 # 按实际运行时长设置 # 配置作业A的输入参数 jobA.input.xxx = xxx # 同理定义作业B、C、D jobB = pr.create.job.SomeJobType("job_b") jobB.server.queue = "your_slurm_queue" # ... 配置B的输入、服务器参数 jobC = pr.create.job.SomeJobType("job_c") # ... 配置C的参数 jobD = pr.create.job.SomeJobType("job_d") # ... 配置D的参数 # 如果需要前序作业的输出作为输入,直接关联即可 jobB.input.structure = jobA.output.structure jobC.input.parameters = jobA.output.parameters jobD.input.result_b = jobB.output.result jobD.input.result_c = jobC.output.result
- 设置作业依赖规则
# 作业B、C仅在作业A运行完成后触发 jobB.run_if(jobA, "finished") jobC.run_if(jobA, "finished") # 作业D仅在作业B、C都运行完成后触发 jobD.run_if([jobB, jobC], "all_finished")
- 手动启动作业A,之后即可关闭Jupyter
jobA.run()
补充说明
- 所有依赖规则会被pyiron自动转换为SLURM的
--dependency提交参数,调度逻辑完全由集群SLURM服务托管,不需要本地环境保持在线 - 作业间的输入输出关联会被pyiron自动持久化存储,不会因为Jupyter关闭失效
内容的提问来源于stack exchange,提问作者fufl
相关产品推荐
相关产品推荐

