在 运行 期间更改发送到 slurm 中的 sbatch 的 bash 脚本是个坏主意吗?

Changing the bash script sent to sbatch in slurm during run a bad idea?

我想 运行 python 脚本 main.py 多次 不同的 参数通过 sbatch_run.sh 脚本:

#!/bin/bash
#SBATCH --job-name=sbatch_run
#SBATCH --array=1-1000
#SBATCH --exclude=node047

arg1=10 #arg to be change during runs
arg2=12 #arg to be change during runs
python main.py $arg1 $arg2

参数由 sbatch 在 bash 文件 运行 中编码。我担心如果我 运行 sbatch_run.sh 多次 一个接一个 但在每个 运行 期间更改 arg1 和 arg2 的值,它可能会导致我的 运行 出错。例如,如果我这样做:

sbatch sbatch_run.sh # with arg1=10 and arg2=12

然后 立即 在我更改 sbatch_run.sh 但 运行 文件后再次如:

sbatch sbatch_run.sh # with arg1=69 and arg2=666

会将我的 运行 与最后一个(即 arg1=69arg2=666)一起用于所有 运行,而不是每个 运行 都有自己的争论。

我确定如果我在 main.py 中硬编码参数然后 运行 相同的 sbatch 脚本但更改 main.py 它将 运行 最后一个一。我想知道如果我更改 sbatch_run.sh 脚本是否也是这种情况。


正如你所知,我确实尝试过这个实验,通过 运行 宁 1000 个脚本,然后一些排队并放置睡眠命令,然后更改 sbatch_run.sh。它似乎并没有改变我的 运行 是什么,但是,如果我错了,这太重要了,不能偶然出错,我想确保我也问过。

备案我运行:

#!/bin/bash
#SBATCH --job-name=ECHO
#SBATCH --array=1-1000
#SBATCH --exclude=node047

sleep 15
echo helloworld
echo 5

然后将 echo 更改为 echo 10 或 echo byebyeworld。

当 sbatch 为 运行 时,Slurm 将提交脚本复制到其内部数据库;你可以通过以下实验说服自己:

$ cat submit.sh
#!/bin/bash
#SBATCH  --hold
echo helloworld

--hold 用于确保作业不会启动。提交:

$ sbatch submit.sh

然后修改提交脚本:

$ sed -i 's/hello/bye/' submit.sh
$ cat submit.sh
#!/bin/bash
#SBATCH  --hold
echo byeworld

现在使用 control show job 查看 Slurm 计划 运行:

的脚本
$ scontrol show -ddd job YOURJOBID
JobId=******* JobName=submit.sh
[...]
BatchScript=
   #!/bin/bash
   #SBATCH  --hold
   echo helloworld
[...]

虽然原剧本变了,但没变。

[编辑] Slurm 的最新版本使用 scontrol write batch_script - 而不是 scontrol show -dd job 来显示提交脚本。