1. 程式人生 > 實用技巧 >高效能集群系統使用簡易記錄

高效能集群系統使用簡易記錄

  集群系統通常使用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,然後進入這個節點,執行程式碼: