2016-08-04 38 views
3

我想通過sbatch_run.sh腳本不同參數main.py多次運行Python腳本中:在運行一個壞主意的過程中,更改在slurm中發送給sbatch的bash腳本?

#!/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 

參數在bash的文件編碼由跑sbatch。我很擔心,如果我多次運行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 

,然後改變回聲回聲10或回聲byebyeworld。

+0

這意味着從我得到的答案,如果你是通過sbatch運行腳本,並且想要改變腳本的參數(如'main.py'示例),請確保有一個地方的參數不更改。例如,直接將它們傳遞給bash腳本,每次運行都通過slurm或配置文件運行,只需確保正確的配置文件正在運行,並且不會意外更改它! –

回答

4

當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 
[...] 

它並沒有改變,雖然原來的劇本有。

+1

啊,真好!這就是爲什麼如果我更改在bash腳本中運行的腳本(例如,使用bash腳本調用python「main.py」腳本),它不起作用,因爲對於那個腳本,它不會發送副本的腳本......非常好,這意味着我的python腳本的參數不會改變! :D –

+0

是否可以將其他腳本複製到內部數據庫?例如,我想要一個配置腳本,我將跨運行更改,但是我希望在作業進入隊列後保持不變。 –

+0

@CharlieParker我不這麼認爲。您需要將每個作業的配置腳本複製到一個單獨的目錄中(或者與作業相關的名稱) – damienfrancois

相關問題