我想通过 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 个脚本,然后一些人排队并放置一个 sleep 命令,然后更改
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
来显示提交脚本。关于bash - 在运行期间更改以 slurm 发送到 sbatch 的 bash 脚本是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38778844/