在进行管理之前,必须知道Slurm调度系统分为两个基本层面:Account(账户)和User(用户)。基于这两个基本层面,Slurm形成了“关联”(Assoc)。

Account类似于group的概念,是由多个User(用户)组成,在大集群上可以用来统一计算用户组的机时,通过对Account设置,可以对该用户组的全部用户进行条件约束。例如:在集群上需要限制某个用户组的使用总核数,则可以将这些用户放置在一个Account下,设置其可用的CPU总数、GRES等资源的限制。

User则落实到具体的某个用户,除了可以在Account上对全体用户进行限制外,还可以单独限制某个用户的最大资源。

1. 查看关联关系

1.1 查看全部关联关系
# sacctmgr list assoc
   Cluster    Account       User  Partition     Share GrpJobs       GrpTRES GrpSubmit     GrpWall   GrpTRESMins MaxJobs       MaxTRES MaxTRESPerNode MaxSubmit     MaxWall   MaxTRESMins             QOS   Def QOS GrpTRESRunMin
---------- ---------- ---------- ---------- --------- ------- ------------- --------- ----------- ------------- ------- ------------- -------------- --------- ----------- ------------- -------------------- --------- -------------
  abhpc-ai       root                               1                                                                                                                                                  normal                         
  abhpc-ai       root       root                    1                                                                                                                                                  normal                         
  abhpc-ai tensorflow                               1                                                                                                                                                  normal                         
  abhpc-ai tensorflow      abhpc                    1                                                                                                                                                  normal                         
  abhpc-ai tensorflow       lily                    1                                                                                                                                                  normal                         
1.2 slassoc命令

全部显示关联未免过于凌乱,可以使用以下命令简洁地输出关联信息:

# slassoc
   Cluster    Account       User                  QOS  Partition       GrpTRES
---------- ---------- ---------- -------------------- ---------- -------------
  abhpc-ai       root                          normal                          
  abhpc-ai       root       root               normal                          
  abhpc-ai tensorflow                          normal                          
  abhpc-ai tensorflow      abhpc               normal                          
  abhpc-ai tensorflow       lily               normal

2. Account和User的管理

通过以下命令可以查看到Account管理的参数:

# sacctmgr --help
......
add account        - Clusters=, DefaultQOS=, Description=, Fairshare=,
                     GrpTRESMins=, GrpTRES=, GrpJobs=, GrpMemory=,   
                     GrpNodes=, GrpSubmitJob=, GrpWall=, MaxTRESMins=,
                     MaxTRES=, MaxJobs=, MaxNodes=, MaxSubmitJobs=,
                     MaxWall=, Names=, Organization=, Parent=,      
                     and QosLevel=                                  
modify account     - (set options) DefaultQOS=, Description=,       
                     Fairshare=, GrpTRESMins=, GrpTRESRunMins=,       
                     GrpTRES=, GrpJobs=, GrpMemory=, GrpNodes=,     
                     GrpSubmitJob=, GrpWall=, MaxTRESMins=, MaxTRES=,
                     MaxJobs=, MaxNodes=, MaxSubmitJobs=, MaxWall=,
                     Names=, Organization=, Parent=, and QosLevel=  
                     RawUsage= (with admin privileges only)         
                     (where options) Clusters=, DefaultQOS=,        
                     Descriptions=, Names=, Organizations=,         
                     Parent=, and QosLevel=
......

同样通过以下命令可以查看到add user部分的参数:

# sacctmgr --help
......
add user           - Accounts=, AdminLevel=, Clusters=,             
                     DefaultAccount=, DefaultQOS=, DefaultWCKey=,   
                     Fairshare=, MaxTRESMins=, MaxTRES=,            
                     MaxJobs=, MaxNodes=, MaxSubmitJobs=, MaxWall=,
                     Names=, Partitions=, and QosLevel=             
modify user        - (set options) AdminLevel=, DefaultAccount=,    
                     DefaultQOS=, DefaultWCKey=, Fairshare=,        
                     MaxTRESMins=, MaxTRES=, MaxJobs=, MaxNodes=,   
                     MaxSubmitJobs=, MaxWall=, NewName=,            
                     and QosLevel=,                                 
                     RawUsage= (with admin privileges only)         
                     (where options) Accounts=, AdminLevel=,        
                     Clusters=, DefaultAccount=, Names=,            
                     Partitions=, and QosLevel=
......
2.1 新建一个account的命令如下:
# sacctmgr add account [账号名称]
2.2 添加用户到指定的Account(例如tensorflow):
# sacctmgr add user account=tensorflow
2.3 修改用户属性
# sacctmgr modify user [用户名] set [属性]=[设定值]

用户的属性值可以查阅帮助文档

3. Account和User的权限管理

Account和User的权限使用GrpTRES来进行限制:

GrpTRES=<TRES=max TRES,…>
Maximum number of TRES running jobs are able to be allocated in aggregate for this association and all associations which are children of this association. To clear a previously set value use the modify command with a new value of -1 for each TRES id.
NOTE: This limit only applies fully when using the Select Consumable Resource plugin.

例如,限制lily用户的CPU核数为40,节点数为2,GPU最大使用为4:

# sacctmgr modify user lily set Grptres="cpu=40,node=2,gres/gpu=4"
# slassoc
   Cluster    Account       User                  QOS  Partition                        GrpTRES
---------- ---------- ---------- -------------------- ---------- ------------------------------
  abhpc-ai       root                          normal
  abhpc-ai       root       root               normal
  abhpc-ai tensorflow                          normal
  abhpc-ai tensorflow      abhpc               normal
  abhpc-ai tensorflow       lily               normal                  cpu=40,gres/gpu=4,node=2

重置该用户全部限制则为:

# sacctmgr modify user lily set Grptres="cpu=-1,node=-1,gres/gpu=-1"
   Cluster    Account       User                  QOS  Partition                        GrpTRES
---------- ---------- ---------- -------------------- ---------- ------------------------------
  abhpc-ai       root                          normal
  abhpc-ai       root       root               normal
  abhpc-ai tensorflow                          normal
  abhpc-ai tensorflow      abhpc               normal
  abhpc-ai tensorflow       lily               normal                  

同样,可以对整个Account进行限制,其含义是Account包含的全部用户累计总和不得超过最大限制。例如:

# sacctmgr modify account tensorflow set Grptres="cpu=40,node=2,gres/gpu=4"
# slassoc
   Cluster    Account       User                  QOS  Partition                        GrpTRES
---------- ---------- ---------- -------------------- ---------- ------------------------------
  abhpc-ai       root                          normal                                           
  abhpc-ai       root       root               normal                                           
  abhpc-ai tensorflow                          normal                  cpu=40,gres/gpu=4,node=2
  abhpc-ai tensorflow      abhpc               normal                                           
  abhpc-ai tensorflow       lily               normal

重置该Account的全部限制为:

# sacctmgr modify account tensorflow set Grptres="cpu=-1,node=-1,gres/gpu=-1"
   Cluster    Account       User                  QOS  Partition                        GrpTRES
---------- ---------- ---------- -------------------- ---------- ------------------------------
  abhpc-ai       root                          normal
  abhpc-ai       root       root               normal
  abhpc-ai tensorflow                          normal
  abhpc-ai tensorflow      abhpc               normal
  abhpc-ai tensorflow       lily               normal

4. 管理员计费系统

如果集群涉及到计费问题,则需要统计用户(User)或账户(Account)在某段时间内的使用机时,在用户教程中已经提供了用户机时的统计方法,但同一Account下的其他用户的作业是互相不可见的,因此,作为管理员可以对单个用户计费,也可以对整个Account进行机时计费,以下举例说明。

4.1 对用户lily自2019年1月1日0时起使用的机时进行统计:
# sacct -u lily -S 2019-01-01T00:00:00 -o "jobid,partition,account,user,alloccpus,cputimeraw,state,workdir%60" -X |awk 'BEGIN{total=0}{total+=$6}END{print total}'
4.2 对名为tensorflow的account自2019年1月1日0时起使用的机时进行统计:
# sacct -A tensorflow -S 2019-01-01T00:00:00 -o "jobid,partition,account,user,alloccpus,cputimeraw,state,workdir%60" -X |awk 'BEGIN{total=0}{total+=$6}END{print total}'

注意这里的机时单位都是秒,换算成核时需要除以3600。

也可以通过sreport命令来进行机时统计,这里默认的单位是分钟。例如,统计ame用户从2019年1月1日起的全部机时:

1
sreport cluster AccountUtilizationByUser start=2019-01-01 user=ame