最近因?yàn)樯险n的原因三圆,頻繁的使用到了slurm腳本券盅,所以在這邊簡(jiǎn)單記錄一下
基本概念:什么是slurm腳本蚊夫?
Slurm呢是一種腳本語(yǔ)言券时,它的詳細(xì)文檔呢可以參考這個(gè)Slurm 文檔。我們都知道腳本語(yǔ)言呢黄选,一般都是有特定用處的蝇摸,slurm也不例外。Slurm是操作大型計(jì)算集群的腳本語(yǔ)言办陷。
我們想象一下貌夕,如果我們很有錢(qián),有個(gè)100臺(tái)帶帶T100顯卡的計(jì)算機(jī)組成的集群民镜,我們?cè)趺从醚椒茸ǎ磕憧赡軙?huì)說(shuō),很簡(jiǎn)單呀就跑代碼就是的制圈。但是们童,請(qǐng)思考一下,如果我想同時(shí)用很多臺(tái)計(jì)算機(jī)呢鲸鹦?那么這些計(jì)算機(jī)是不是要組成個(gè)局域網(wǎng)慧库,然后我要寫(xiě)個(gè)代碼協(xié)調(diào)這些計(jì)算機(jī)工作。是不是有點(diǎn)復(fù)雜了馋嗜?
我們?cè)傧肫氚澹绻@個(gè)集群我們希望能做大做強(qiáng),不止給我一個(gè)人用葛菇,想給100個(gè)人甘磨,1000個(gè)人同時(shí)用,能行嗎眯停?這個(gè)時(shí)候自然還需要考慮協(xié)調(diào)用戶的功能济舆。這個(gè)協(xié)調(diào)用戶包含很多東西,包括資源的分配莺债,包括用戶環(huán)境的安裝等等滋觉。
是不是很復(fù)雜?這才哪到哪九府,我這還只是章口就來(lái)隨便舉的例子椎瘟。真實(shí)的情況比這個(gè)要復(fù)雜的多得多覆致,那我們?cè)趺崔k侄旬?自己從頭寫(xiě)代碼來(lái)管理這個(gè)集群?顯然不是煌妈,我們有專門(mén)的管理軟件儡羔。這個(gè)管理軟件呢不是我們今天的研究重點(diǎn)宣羊,我就不說(shuō)了,我也不會(huì)哈哈哈哈汰蜘。重點(diǎn)是如何使用這個(gè)管理軟件仇冯,如何通過(guò)它來(lái)操作集群。我們呢正是通過(guò)slurm 腳本語(yǔ)言來(lái)控制這個(gè)管理軟件的族操。
常見(jiàn)指令:
我目前用到的指令主要有
- srun/sbatch:用來(lái)執(zhí)行slurm 腳本苛坚。sbatch -J hello hyperparameter_tuning.slurm --method tfidf
- sinfo:用來(lái)查看集群的信息,比如說(shuō)看看節(jié)點(diǎn)的狀態(tài)啦啥的
- squeue -u xxxx: 用來(lái)查看你提交的任務(wù)執(zhí)行情況
- sprio -u xxx: 這是個(gè)插件色难,不一定安裝了泼舱,但是可以用來(lái)查看你的任務(wù)的優(yōu)先級(jí)。
- module avail: 查看所有預(yù)先安裝好的模塊
- module load: 加載某個(gè)模塊
- module use: 使用某個(gè)模塊集合
-sstat: 查看正在執(zhí)行的任務(wù)狀態(tài)
-sacct: 查看已經(jīng)跑完的任務(wù)狀態(tài)
示范腳本
#!/bin/bash
#SBATCH -p node1 #要使用的節(jié)點(diǎn)
#SBATCH --job-name=in5550 # 給你的任務(wù)起個(gè)名字
#SBATCH -n 1 # 使用到的節(jié)點(diǎn)數(shù)
#SBATCH --time 00-02:00:00 # time (D-HH:MM:SS) #預(yù)估你的任務(wù)執(zhí)行時(shí)間枷莉,到時(shí)間會(huì)自動(dòng)kill掉
module purge # 卸載模塊娇昙,如果有預(yù)先安裝的模塊可以通過(guò)Module load來(lái)加載
conda activate in5550 # 使用虛擬環(huán)境
# by default, pass on any remaining command-line options
srun python hyperparameter_tuning.py ${@}
注意,module load的包可以直接被所有的虛擬環(huán)境使用笤妙,而你在login node創(chuàng)建的虛擬環(huán)境冒掌,會(huì)自動(dòng)的分發(fā)到各個(gè)運(yùn)算節(jié)點(diǎn)上,然后鏡像的安裝一模一樣的環(huán)境