Slurm基础用法

目录

  • 节点状态查看
  • 追踪任务
  • 运行任务
  • 使用示例

节点状态查看

  1. sinfo可以查看现有的节点,分区:
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
cpu*         up 30-00:00:0      1   comp cn042
cpu*         up 30-00:00:0     45    mix cn[001-031,036-041,043-050]
gpu          up 30-00:00:0      4    mix gn[001-004]
agpu         up 30-00:00:0      1    mix gn101

关键词 含义
PARTITION 分区名,大型集群为了方便管理,会将节点划分为不同的分区设置不同权限
AVAIL 可用状态:up 可用;down 不可用
TIMELIMIT 该分区的作业最大运行时长限制, 30:00 表示30分钟,如果是2-00:00:00表示2天,如果是infinite表示不限时间
NODES 节点数量
STATE 状态:drain: 排空状态,表示该类结点不再分配到其他;idle: 空闲状态;alloc: 被分配状态;mix:部分被占用,但是仍有可用资源
  1. scontrol show partition [PARTITION_NAME],查看分区的状态信息
  2. scontrol show node [NODE_NAME],查看节点的状态信息
  3. srun -p gpu --gres=gpu:volta:2 nvidia-smi,查看指定显卡的信息

追踪任务

  1. squeue -u username 来查看目前username下面所有运行的项目:
[liuhy@admin playground]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               140       cpu     test    liuhy  R       0:01      1 comput1

其中各列的含义如下:
PARTITION:分区是cpu还是gpu
NAME:运行的程序的name,例如 java,python,blackbird等
ST:状态,PD排队;R运行;S挂起;CG正在退出
TIME:耗时
NODES:该任务用了几个节点
NODELIST(REASON):作业未运行时,它显示未运行的原因;当作业在运行时,显示作业是在哪个节点运行的

错误的原因如下:
Slurm基础用法_第1张图片

  1. scontrol show job JOBID,其中JOBID是squeue得到的
[liuhy@admin playground]$ scontrol show job 140
JobId=140 JobName=test
   UserId=liuhy(502) GroupId=users(100) MCS_label=N/A
   Priority=283 Nice=0 Account=root QOS=normal
   JobState=RUNNING Reason=None Dependency=(null)
   Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0
   RunTime=02:00:58 TimeLimit=14-00:00:00 TimeMin=N/A
   SubmitTime=2021-08-18T01:12:52 EligibleTime=2021-08-18T01:12:52
   AccrueTime=2021-08-18T01:12:52
   StartTime=2021-08-18T01:12:55 EndTime=2021-09-01T01:12:55 Deadline=N/A
   SuspendTime=None SecsPreSuspend=0 LastSchedEval=2021-08-18T01:12:55
   Partition=cpu AllocNode:Sid=unn2:10030
   ReqNodeList=(null) ExcNodeList=(null)
   NodeList=cn004
   BatchHost=cn004
   NumNodes=1 NumCPUs=12 NumTasks=1 CPUs/Task=12 ReqB:S:C:T=0:0:*:*
   TRES=cpu=12,mem=120G,node=1,billing=12
   Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
   MinCPUsNode=12 MinMemoryCPU=10G MinTmpDiskNode=0
   Features=(null) DelayBoot=00:00:00
   OverSubscribe=OK Contiguous=0 Licenses=(null) Network=(null)
   Command=java
   ...

会显示很多信息,其中值得注意的有NumNodes=1 NumCPUs=12 NumTasks=1 CPUs/Task=12 TRES=cpu=12,mem=120G,node=1 MinCPUsNode=12 MinMemoryCPU=10G
这些显示的是这个程序占用的资源

  1. 历史作业可以用sacct来查看,默认情况下,用户仅能查看属于 自己的历史作业。直接使用 sacct 命令会输出从当天 00:00:00 起到现在的全部作业
[liuhy@admin playground]$ sacct
       JobID    JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
104                bash        gpu       root          1  COMPLETED      0:0
140                test        cpu       root         12  COMPLETED      0:0
141                test        cpu       root         12 CANCELLED+      0:0
141.batch         batch                  root         12  CANCELLED     0:15
141.extern       extern                  root         12  COMPLETED      0:0
142               lllll        cpu       root          1     FAILED      2:0
142.extern       extern                  root          1  COMPLETED      0:0
142.0             lllll                  root          1     FAILED      2:0

如果用sacct -S MMDD,则会输出从 MM 月 DD 日起的所有历史作业。默认情况会输出作业 ID,作业名,分区,账户,分配的 CPU,任务结束状态,返回码。

[liuhy@admin playground]$ sacct --format=jobid,user,alloccpu,allocgres,state%15,exitcode
       JobID      User  AllocCPUS    AllocGRES           State ExitCode
------------ --------- ---------- ------------ --------------- --------
104              liuhy          1        gpu:1       COMPLETED      0:0
104.extern                      1        gpu:1       COMPLETED      0:0
105              liuhy          1                    COMPLETED      0:0
140.batch                      12                    COMPLETED      0:0
141.batch                      12                    CANCELLED     0:15
141.extern                     12                    COMPLETED      0:0
142              liuhy          1                       FAILED      2:0
142.0                           1                       FAILED      2:0

运行任务

  1. 可以直接使用srun命令,其中一些比较有用的参数有:
参数用法 意义
-p cpu 指定分区为CPU
--nodes=N 指定使用的节点数量
--nodelist=comput1 指定特定节点
--cpus-per-task=4 指定 CPU 核心数量
--mem-per-cpu=10G 指定每个CPU核心的内存
--gres=gpu:1 指定GPU卡数
--ntasks=ntasks 指定运行的任务个数

使用示例

  1. 用12个cpu核并行运行一个单任务:srun --mem-per-cpu=10G --cpus-per-task=12 --nodes=1 --ntasks=1,总内存大小是120G

Reference:
Slurm使用参考
SLURM 系统入门使用指南
Slurm Document

你可能感兴趣的:(分布式系统,分布式)