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

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

   可以再開一個shell看看跑代碼時的CPU佔用:

 

  佔用率很高666.6%,而如果不申請的話,佔用率不會超過10%。