Cha*_*ker 8 bash shell distributed-computing slurm
我想通过脚本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
Run Code Online (Sandbox Code Playgroud)
参数在sbatch运行的bash文件中编码.我担心如果我一个接一个地运行sbatch_run.sh
多次但是在每次运行期间更改arg1和arg2的值,那么它可能会导致我的运行中出错.例如,如果我这样做:
sbatch sbatch_run.sh # with arg1=10 and arg2=12
Run Code Online (Sandbox Code Playgroud)
然后我立即更改后sbatch_run.sh
再次运行该文件,如下所示:
sbatch sbatch_run.sh # with arg1=69 and arg2=666
Run Code Online (Sandbox Code Playgroud)
将我的运行全部运行到最后一个(即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
Run Code Online (Sandbox Code Playgroud)
然后将回声更改为echo 10或echo byebyeworld.
dam*_*ois 11
运行sbatch时,Slurm将提交脚本复制到其内部数据库; 你可以通过以下实验说服自己:
$ cat submit.sh
#!/bin/bash
#SBATCH --hold
echo helloworld
Run Code Online (Sandbox Code Playgroud)
这--hold
是为了确保工作不会开始.提交:
$ sbatch submit.sh
Run Code Online (Sandbox Code Playgroud)
然后修改提交脚本:
$ sed -i 's/hello/bye/' submit.sh
$ cat submit.sh
#!/bin/bash
#SBATCH --hold
echo byeworld
Run Code Online (Sandbox Code Playgroud)
现在control show job
用来查看Slurm计划运行的脚本:
$ scontrol show -ddd job YOURJOBID
JobId=******* JobName=submit.sh
[...]
BatchScript=
#!/bin/bash
#SBATCH --hold
echo helloworld
[...]
Run Code Online (Sandbox Code Playgroud)
尽管原始脚本有,但它没有改变.
[编辑]最新版本的Slurm使用scontrol write batch_script
而不是scontrol show -dd job
显示提交脚本.