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

问题描述 投票:0回答:1

我想通过

main.py
脚本使用不同参数多次运行Python脚本
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=69
arg2=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。

bash shell distributed-computing slurm
1个回答
32
投票

当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 <job_id> [<optional_filename>]
而不是
scontrol show -dd job
将提交脚本写入名为
<optional_filename>
的文件。可选文件名可以是
-
将脚本显示到屏幕上,而不是将其保存到文件中。

© www.soinside.com 2019 - 2024. All rights reserved.