高效能集群系統使用簡易記錄
阿新 • • 發佈:2020-07-30
集群系統通常使用SLURM作業排程指令碼來提交、檢視、修改作業。以下記錄它的指令碼與命令的編寫與使用。
常用命令
以下是各種常用命令:
squeue #檢視當前執行中的任務情況 sinfo #檢視所有分割槽的情況 sacct #檢視24小時內的歷史任務 scancel job 56200 #取消id為56200的任務 scontrol show node #顯示所有節點資訊 scontrol show node node5 #顯示節點5的資訊
大型作業
對於大型作業,要把任務提交到伺服器排隊才能計算。所以要寫任務指令碼,提交任務的命令如下:
sbatch test.job
指令碼例項如下:
#!/bin/bash #SBATCH --job-name=Helloworld ##作業的名稱 #SBATCH --ntasks=1 ##總程序數,就是同樣的作業要一起跑幾個,一般煉丹一個就行了 #SBATCH --nodes=1 ##指定節點數量,一個程序只能分配給一個節點,不能分配給多節點多CPU執行 #SBATCH --ntasks-per-node=1 ##每個結點的程序數,一個程序那麼每個結點程序數一定是1,不填也沒事 #SBATCH --cpus-per-task=2 ##每個程序使用的CPU核心數,煉丹當然是越多越好,但是要的多分配的也慢#SBATCH --partition=low ##使用哪個分割槽,可以sinfo看看有哪些分割槽 ##SBATCH --gres=gpu:1 ##指定GPU,不寫就不分配 ##SBATCH --nodelist=node56 ##使用指定的節點,自己指定的話通常優先度會高一些,缺點就是即使別的節點空閒了也不會分配給你。當然節點要在上面指定的分割槽內部才行 #SBATCH --output=test.out ##標準輸出的存放的檔案,可以用%j表示任務ID #SBATCH --error=test.err ##錯誤提示的存放的檔案#SBATCH --qos=debug ##服務質量,debug就是互動式模式,分配資源少些,但是優先度高,另外還有normal普通模式,資源多但優先度低 source /public/home/chenqz/.bashrc ##要用的軟體的環境變數,直接把使用者的.bashrc給source了就好了 python3 test.py ##要執行的任務,看你終端所在的位置,如果已經在任務的資料夾中就不需要完整路徑了,上面的123.out和.err也一樣,都是輸出到這一位置。
互動式計算
直接進入計算節點
可以通過ssh從登陸節點訪問計算節點(可能運維沒有設定好,普通使用者也能進)。首先要訪問節點1,在節點1內才能訪問其它計算節點:
ssh comput1 #進入節點1 ssh comput55 #進入節點1後,再進入其它節點,節點55
計算節點後可以直接在命令列執行程式碼,從而在計算節點執行。但是通常計算節點都是有人佔用的,所以以這種未申請的方式使用計算節點計算效率不高。
申請資源後再進入
申請資源後再以以上方式進入節點,就可以在比較好的資源下執行互動式程式碼。使用salloc命令,以下是例項:
salloc -N 1 --cpus-per-task=1 -p low --qos=debug
各種引數格式如下(和上面的任務提交指令碼類似,就是少了#SBATCH):
-J <任務名> #--job-name=<任務名> 的簡寫,下面一條-的都是簡寫,而且不用= -N <節點數量> #煉丹一般也就一個節點 --ntasks=<程序數> #煉丹就不需要了定義了,預設一個程序就夠了 --ntasks-per-node=<單節點程序數> #一個程序的話也不需要定義這個了 --cpus-per-task=<單程序CPU核心數> --gres=gpu:<單節點 GPU 卡數> -p <使用的分割槽> --qos=<使用的 QoS>
申請後的資源也是以作業的形式佔用,可以squeue檢視:
看到申請的節點是58,然後進入這個節點,執行程式碼: