slurm 的使用教程

最近因為上課的原因,頻繁的使用到了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創建的虛擬環境,會自動的分發到各個運算節點上,然后鏡像的安裝一模一樣的環境

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容