最近因為上課的原因,頻繁的使用到了slurm腳本,所以在這邊簡單記錄一下
基本概念:什么是slurm腳本?
Slurm呢是一種腳本語言,它的詳細文檔呢可以參考這個Slurm 文檔。我們都知道腳本語言呢,一般都是有特定用處的,slurm也不例外。Slurm是操作大型計算集群的腳本語言。
我們想象一下,如果我們很有錢,有個100臺帶帶T100顯卡的計算機組成的集群,我們怎么用呀?你可能會說,很簡單呀就跑代碼就是的。但是,請思考一下,如果我想同時用很多臺計算機呢?那么這些計算機是不是要組成個局域網,然后我要寫個代碼協調這些計算機工作。是不是有點復雜了?
我們再想,如果這個集群我們希望能做大做強,不止給我一個人用,想給100個人,1000個人同時用,能行嗎?這個時候自然還需要考慮協調用戶的功能。這個協調用戶包含很多東西,包括資源的分配,包括用戶環境的安裝等等。
是不是很復雜?這才哪到哪,我這還只是章口就來隨便舉的例子。真實的情況比這個要復雜的多得多,那我們怎么辦?自己從頭寫代碼來管理這個集群?顯然不是,我們有專門的管理軟件。這個管理軟件呢不是我們今天的研究重點,我就不說了,我也不會哈哈哈哈。重點是如何使用這個管理軟件,如何通過它來操作集群。我們呢正是通過slurm 腳本語言來控制這個管理軟件的。
常見指令:
我目前用到的指令主要有
- srun/sbatch:用來執行slurm 腳本。sbatch -J hello hyperparameter_tuning.slurm --method tfidf
- sinfo:用來查看集群的信息,比如說看看節點的狀態啦啥的
- squeue -u xxxx: 用來查看你提交的任務執行情況
- sprio -u xxx: 這是個插件,不一定安裝了,但是可以用來查看你的任務的優先級。
- module avail: 查看所有預先安裝好的模塊
- module load: 加載某個模塊
- module use: 使用某個模塊集合
-sstat: 查看正在執行的任務狀態
-sacct: 查看已經跑完的任務狀態
示范腳本
#!/bin/bash
#SBATCH -p node1 #要使用的節點
#SBATCH --job-name=in5550 # 給你的任務起個名字
#SBATCH -n 1 # 使用到的節點數
#SBATCH --time 00-02:00:00 # time (D-HH:MM:SS) #預估你的任務執行時間,到時間會自動kill掉
module purge # 卸載模塊,如果有預先安裝的模塊可以通過Module load來加載
conda activate in5550 # 使用虛擬環境
# by default, pass on any remaining command-line options
srun python hyperparameter_tuning.py ${@}
注意,module load的包可以直接被所有的虛擬環境使用,而你在login node創建的虛擬環境,會自動的分發到各個運算節點上,然后鏡像的安裝一模一樣的環境