python - 如何通过配置文件在 SLURM 中使用 sbatch

标签 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 中的配置而不是其他一些奇怪的黑客?

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

最佳答案

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

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

关于python - 如何通过配置文件在 SLURM 中使用 sbatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39186812/

相关文章:

linux - 每次我启动 unix 时都会获取一个文件

macos - .bash_profile 中定义的别名在 OS X 中不起作用

python - 如何创建抽象类属性(可能是只读的)

python - 如何从 Python 语音识别中提取子字符串

bash - 加密/解密存储在配置文件中的密码

Java命令行执行相对于打包

oracle - 从 sql 脚本返回值到 shell 脚本

linux - 跟踪 ksh 多个 session 的命令历史记录

python - 如何正确使用Tensorflow Data API中的dataset.map

python - “模块”对象没有属性 'basicConfig'