如何在SLURM中使用sbatch和配置文件

时间:2016-08-27 23:54:04

标签: python bash shell slurm sbatch

我想用sbatch运行python脚本,但是,似乎运行带有sbatch的python脚本的唯一方法是使用bash脚本然后运行python脚本。与batch_main.sh

一样
#!/bin/bash
#SBATCH --job-name=python_script

arg=argument

python python_batch_script.sh

然后运行:

sbatch batch_main.sh

这个问题是我希望为参数设置一个单独的配置文件(因为它通常不是单个数字或参数),并且还能够使用数组选项。此外,我通常会同时运行多个不同的 sbatch作业 (使用不同的配置),因此如果更改配置文件不会使其更好不同的sbatch运行会相互阻碍(因为如果作业排队,然后配置文件稍后更改,它将运行最新的配置文件,而不是运行sbatch时的配置副本)。为了解决这个问题,我发现当我运行一个sbatch脚本时,SLURM实际上将提交脚本复制到其内部数据库(我在询问:Changing the bash script sent to sbatch in slurm during run a bad idea?之后发现它)。因此,我实际上决定将配置硬编码到bash提交脚本中(使提交脚本基本上成为配置文件)。这样我只需编辑提交脚本然后运行该文件。但是,我想停止这个,因为这让我用bash写,我想不惜一切代价避免。

理想情况下,我想运行一个直接运行python的sbatch。

由于这可能无法实现,我想知道确实存在哪些其他选项来解决这个问题。例如,是否可以将slurm复制到其内部数据库中的不同文件(如python配置文件),以便在对作业进行排队时运行我确实要运行的作业? (请注意,运行sbatch作业然后更改配置文件不是这样做的方法,因为这可能会在更改配置文件时导致问题,slrum将读取配置的最新副本而不是配置的副本当工作跑了)。或者我还有其他选择吗?我真的坚持写bash还是我可以做其他事情来处理python中的配置而不是其他一些奇怪的黑客?

总的来说,我也想知道人们在现实世界中为此做了什么,或者对此有什么好的做法/标准。

1 个答案:

答案 0 :(得分:0)

Python脚本是有效的提交文件,前提是它们以python shebang(通常为#!/usr/bin/env python)开头。

例如:

#!/usr/bin/env python
#SBATCH --time=...
#SBATCH --partition=...

import sys
jobid=sys.environ["SLURM_JOB_ID"]
print "Hello World from job %s" % jobid

请注意,如果您的脚本为import自定义模块,则即使它们位于当前目录中,您也需要设置PYTHONPATH。