使用Slurm作业管理系统,当前debug作业队列设置为节点可以共享,但作业独占CPUcore/GPU资源。多个用户可以提交作业到同一个节点上,但是节点上CPUcore/GPU资源只能被单一作业占有使用。
作业管理系统常用命令如下:
1、sinfo查看系统资源
sinfo得到的结果是当前账号可使用的队列资源信息,如下图所示:
其中,
第一列PARTITION是队列名,默认能使用的队列名为debug。
第二列AVAIL是队列可用情况,如果显示up则是可用状态;如果是inact则是不可用状态。
第四列NODES是节点数。
第五列STATE是节点状态,idle是空闲节点,alloc是已被占用节点,comp是正在释放资源的节点,其他状态的节点都不可用,mix是该节点有作业在运行或有程序占用cpu导致的。
第六列NODELIST是节点列表。
sinfo的常用命令选项:
命令示例
功能
sinfo-ngpu001
指定显示节点gpu001的使用情况
sinfo-pdebug
指定显示队列debug情况
其他选项可以通过sinfo--help查询。
squeue得到的结果是当前账号正在运行作业的状态,如果squeue没有作业信息,说明作业已退出。
第一列JOBID是作业号,作业号是唯一的。
第二列PARTITION是作业运行使用的队列名。
第三列NAME是作业名。
第四列USER是超算账号名。
第五列ST是作业状态,R表示正常运行,PD表示在排队,CG表示正在退出,S是管理员暂时挂起,只有R状态会计费。
第七列NODES是作业使用的节点数。
第八列NODELIST(REASON)对于运行作业(R状态)显示作业使用的节点列表;对于排队作业(PD状态),显示排队的原因。
squeue的常用命令选项:
squeue-j396
查看作业号为396的作业信息
squeue-ugliu
查看集群账号为gliu的作业信息
squeue-pdebug
查看提交到debug队列的作业信息
squeue-wgpu001
查看使用到gpu001节点的作业信息
其他选项可通过squeue--help命令查看。
srun[options]program命令属于交互式提交作业,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。
srun命令示例:
srun-pdebug-wgk[11-15]-N2-n12-t20--gres=gpu:2my_job.sh
-pdebug指定提交作业到debug队列;
-wgk[11-15]指定使用节点gk[11-15];
-N2指定使用2个节点;
-n12指定运行的任务数为12,默认情况下一个CPU核一个任务
--gres申请其他通用资源,例如GPU卡等。参数的值为:“gpu:2”表明需要申请2块GPU显卡资源。
注意:
提交作业时不显式指定显卡资源,默认情况下不能使用显卡进行计算。即忽略–gres参数,作业只能使用CPU计算资源。
Srun的一些常用命令选项:
参数选项
-N3
指定节点数为3
-n12
指定任务数为12,默认一个CPU核一个任务
-pdebug
指定提交作业到debug队列
-wgk[11-15]
指定提交作业到gk11/gk12/gk13/gk14/gk15节点
-xgm[11-12]
排除gm11、gm12节点
-oout.log
指定标准输出到out.log文件
-eerr.log
指定重定向错误输出到err.log文件
-JJOBNAME
指定作业名为JOBNAME
-t20
限制运行20分钟
--gres=gpu:2
为作业分配2块GPU显卡资源(最大值为8)
srun的其他选项可通过srun--help查看。
sbatch一般情况下与srun一起提交作业到后台运行,需要将srun写到脚本中,再用sbatch提交脚本。这种方式不受本地网络波动影响,提交作业后可以关闭本地电脑。sbatch命令没有屏幕输出,默认输出日志为提交目录下的slurm-xxx.out文件,可以使用tail-fslurm-xxx.out实时查看日志,其中xxx为作业号。
*可通过module来加载运行环境如
moduleloadgcccuda
示例1、单节点(20核)
#!/bin/bash
#SBATCH--job-name=test#作业名
#SBATCH--partition=gpu#cpu队列
#SBATCH-n20#总核数20
#SBATCH--ntasks-per-node=20#每节点核数
#SBATCH--output=%j.out
#SBATCH--error=%j.err
示例2:单节点GPU
#SBATCH--job-name=dgx2_test
#SBATCH--partition=dgx2
#SBATCH--gres=gpu:4
#SBATCH-n4
#SBATCH--ntasks-per-node4
#SBATCH--mail-type=end
#SBATCH--mail-user=YOU@EMAIL.COM
./cudaTensorCoreGemm
示例3:MPI多节点并行
#SBATCH-ojob.%j.out
#SBATCH--partition=C032M0128G
#SBATCH--qos=low
#SBATCH-JmyFirstMPIJob
#SBATCH--nodes=2
#SBATCH--ntasks-per-node=32
#SBATCH--time=120:00:00
moduleloadintel/2017.1
moduleloadvasp/5.4.4-intel-2017.1
srunhostname-s|sort-n>slurm.hosts
mpirun-n64-machinefileslurm.hostsvasp_std>log
示例4(一次提交多任务)
编写脚本job3.sh,内容如下:
srun-n8A.exe&
srun-n8B.exe&
srun-n8C.exe&
wait
然后在命令行执行sbatch-N1-pdebugjob3.sh,这里是单节点同时提交3个任务,每个任务使用8个进程。这里“wait”需要3个任务全部执行完毕,作业才会退出。
sbatch的一些常用命令选项基本与srun的相同,具体可以通过sbatch--help查看。
与srun一样,若作业需要使用GPU显卡资源,需要在sbatch脚本中或在sbatch的命令行的参数中使用--gres=gpu:n(n为显卡数量)
salloc命令用于申请节点资源,一般用法如下:
1、执行salloc-pdebug;
2、执行squeue查看分配到的节点资源,比如分配到gj16;
3、执行sshgj16登陆到所分配的节点;
4、登陆节点后可以执行需要的提交命令或程序;
5、作业结束后,执行scancelJOBID释放分配模式作业的节点资源。
6、scancel取消已提交的作业
scancel可以取消正在运行或排队的作业。
scancel的一些常用命令示例:
scancel343
取消作业号为343的作业
scancel-ntest
取消作业名为test的作业
scancel-pdebug
取消提交到debug队列的作业
scancel-tPENDING
取消正在排队的作业
scancel-wgpu001
取消运行在gpu001节点上的作业
scancel的其他参数选项,可通过scancel--help查看。
scontrol命令可以查看正在运行的作业详情,比如提交目录、提交脚本、使用核数情况等,对已退出的作业无效。