调度器动态配置参数#
SkyForm AIP调度器的部分参数可以动态修改。动态修改这些配置参数不会重启调度器,在调度器内存中的作业数据不会受到影响。参数调整后,调度器会自动更新或生成新的配置文件。 这些配置文件都保存在/opt/skyformai/etc中。原有的文件会被修改成 文件名.时间戳。
只有root或AIP集群管理员可以修改调度器参数。AIP集群管理员定义在 cb.yaml 的cluster:adminnistrators里。
配置修改的命令为 aip 。
修改主机组#
命令:aip hostgroup|hg
当参数修改成功后,cb.yaml文件中的hostgroups段落会被删除,所有主机组配置存放在/opt/skyformai/etc/hg.yaml中。
新增主机组#
命令:aip hostgroup|hg create|c 主机组名 主机名 主机名 …
例子:
aip hg c research1 node10 node13
cmgroup research1
GROUP_NAME HOSTS
research1 node10 node13
条件:主机组里的主机名必须是集群中合法的主机名。
删除主机组#
命令:aip hostgroup|hg delete|d 主机组名
例子:
aip hg d research1
cmgroup research1
research1: No such user group or host group
条件:主机组名存在于调度器中,并且没有被配置到队列(queues)或limits中。
添加主机组成员#
命令:aip hostgroup|hg addmembers|am 主机组名 主机名 主机名 …
例子:
aip hg am research1 node14 node16
cmgroup research1
GROUP_NAME HOSTS
research1 node10 node13 node14 node16
条件:主机组必须已经建立,添加的主机名必须是集群中合法的主机名,而且这些主机上没有运行的作业。
减少主机组成员#
命令:aip hostgroup|hg delmembers|dm 主机组名 主机名 主机名 …
例子:
aip hg dm research1 node10 node13
cmgroup research1
GROUP_NAME HOSTS
research1 node14 node16
条件:主机组必须已经建立,减少的主机名必须是集群中合法的主机名,而且这些主机上没有运行的作业。
修改用户组#
命令:aip usergroup|ug
当参数修改成功后,cb.yaml文件中的usergroups段落会被删除,所有用户组配置存放在/opt/skyformai/etc/ug.yaml中。
备注
除了新增和删除用户组需要集群管理员的权限,用户组管理员有权限修改用户组其他参数,包括:增删组员和各种上限。用户管理员也可修改组管理员, 修改后自己就失去了该组的管理员权限。
新增用户组#
命令:aip usergroup|ug create|c [JSON用户组定义文件 | JSON用户组定义字串]
用户组定义的JSON格式如下:
{
# 用户组名,值不能为空、与已有的用户同名,或者与系统中任何一个用户同名
"Group": "组名",
# 组员,值不能为空,可含多个用户、或已有的其他组名。
# 如果成员名只有一个值为:@system,表示组名与操作系统中(如LDAP)的一个组同名,
# 成员为系统中改组的成员。调度器每小时从系统中同步一次。同步间隔可以用cb.yaml里的
# egroup_update_interval调整
"Members": ["用户1", "用户2", "用户组2"],
# 组管理员。可选填。用户必须是操作系统中已有的用户
"Admin": "",
# Fairshare串,选填,一般为空
"UserShares": "",
# 用户组总运行作业槽上限,选填,缺省为-1,即无限
"MaxSlots": -1,
# 每个组成员用户运行作业槽上限,选填,缺省为-1,即无限
"UserJobLimit": -1,
# 用户组总运行作业数上限,选填,缺省为-1,即无限
"MaxJobs": -1,
# 用户组总GPU卡数上限,选填,缺省为-1,即无限
"MaxGpus": -1
}
添加后可以用命令aip ug i或 cugroup 查看结果。
条件:用户名必须是集群操作系统中合法的用户名。
删除用户组#
命令:aip usergroup|ug delete|d 用户组名
例子:
aip ug d 我的组
条件:用户组名存在于调度器中,并且没有被配置到队列(queues)或limits中。
添加用户组成员#
命令:aip usergroup|ug addmembers|am 用户组名 用户名 用户名 …
例子:
aip ug am 我的组 u003 u004
条件:用户组必须已经建立,添加的用户名必须是集群操作系统中合法的用户名。
减少用户组成员#
命令:aip usergroup|ug delmembers|dm 用户组名 用户名 用户名 …
例子:
aip ug dm 我的组 u001 u002
条件:用户组必须已经建立,减少的用户名必须是集群操作系统中合法的用户名。
修改用户组管理员#
命令:aip usergroup|ug admin|a 用户组名 管理员用户名
用户组的管理员可以观察和管理组成员的作业、以及修改组成员、修改用户组资源上限、并修改用户组管理员(修改后自己就失去了管理员权限)。
备注
用户组管理不一定必须是该用户组的成员。
例子:
aip ug a 我的组 cadmin
修改用户组资源限制#
命令:aip usergroup|ug grouplimit|gl 组作业槽上限(MaxSlots) [组作业数上限(MaxJobs) [组GPU卡上限(MaxGpus)]]
每一项的值:
“-1”:无限
“-2”:原有的值不变
任何0或其他正整数:修改的值
例子1,修改组作业槽上限到100:
aip ug gl 我的组 100
例子2,修改组作业数上限到20:
aip ug gl 我的组 -2 20
例子3,修改组GPU卡上限到10:
aip ug gl 我的组 -2 -2 20
例子4,去掉所有上限:
aip ug gl 我的组 -1 -1 -1
例子5,修改作业槽上限到100,修改组GPU卡上限到5:
aip ug gl 我的组 100 -2 5
修改用户组成员作业槽上限#
命令:aip usergroup|ug userlimit|ul 组员作业槽上限(UserJobLimit)
修改的值:
“-1”:无限
任何0或其他正整数:修改的值
例子1,修改组成员作业槽上限到20:
aip ug ul 我的组 20
例子1,去掉组成员作业槽上限:
aip ug ul 我的组 -1
修改用户作业上限#
命令:aip user|u
当参数修改成功后,cb.yaml文件中的users段落会被删除,所有用户作业上限配置存放在/opt/skyformai/etc/u.yaml中。
修改用户运行作业槽上限#
命令:aip user|u limit|l 用户名 运行作业槽上限
例子1,修改用户u001的运行作业槽上限到64:
aip u l u001 64
cusers u001
USER/GROUP MAXPEND MAX NJOBS PEND RUN SSUSP USUSP RSV
u001 - 64 0 0 0 0 0 0
例子2,去除用户u001的运行作业槽上限:
aip u l u001 -1
cusers u001
USER/GROUP MAXPEND MAX NJOBS PEND RUN SSUSP USUSP RSV
u001 - - 0 0 0 0 0 0
修改用户最多等待的作业数#
命令:aip user|u pendlimit|pl 用户名 等待作业数上限
例子1,修改用户u001的等待作业数上限到1000:
aip u pl u001 1000
cusers u001
USER/GROUP MAXPEND MAX NJOBS PEND RUN SSUSP USUSP RSV
u001 1000 - 0 0 0 0 0 0
例子2,去除用户u001的运行作业槽上限:
aip u l u001 -1
修改队列#
命令:aip queue|q
当参数修改成功后,cb.yaml文件中的queues段落会被删除,所有队列配置存放在/opt/skyformai/etc/queue.yaml中。
备注
只有集群管理员才可以修改队列。
新增队列#
命令:aip queue create|c [JSON队列定义文件 | JSON队列定义字串]
队列定义的JSON格式如下:
{
# 队列名,值不能为空、与已有的队列同名
"Name": "队列名",
# 优先级,值不能为空。可以是任意正整数,数字越大,优先级越高
"Priority": 3,
# 说明。可选填
"Description": "",
# 主机,选填,多个主机或主机组名用空格隔开。如果为空,表示队列可用集群所有主机
"Hosts": "主机1 主机组2",
# 用户,选填,多个用户名或用户组名用空格隔开。如果为空,表示所有用户都可已用该队列
"Users": "",
# 队列运行作业槽上限,选填,缺省为-1,即无限
"Maxslots": -1,
# 每个用户在这个队列中运行作业槽上限,选填,缺省为-1,即无限
"Usermaxslots": -1,
# 是否为专属队列,选填,缺省为“no”
"Dedicated": "no",
# 缺省资源需求,选填,缺省为无
"Resreq": "",
# 队列管理员用户名,多个用户名可用空格隔开,可以管理队列中其他用户的作业,选填,缺省为无
"Administrators": ""
}
备注
队列的其他参数可以后继通过编辑文件和重启调度器生效。
添加后可以用命令aip q i或 cqueues 查看结果。
删除队列#
命令:aip queue|q delete|d 队列名
例子:
aip q d queue1
条件:队列名存在于调度器中,不是缺省队列,并且队列中没有作业,队列没有被配置在limits中。
修改队列参数#
命令:aip queue update|u JSON队列参数字串
JSON队列参数字串中Name必须指定,表示所修改的队列。参数只支持以上新增队列中可以指定的参数,其他参数需要通过编辑/opt/skyformai/etc/queue.yaml,并重启调度器生效。
例子,修改队列testqueue的用户和资源需求:
aip q u '{"Name":"testqueue","Users":"u001 u002","Resreq":"order[ut]"}'
修改调度参数#
命令:aip parameter|p update|u ‘参数JSON字串’
警告
由于系统yaml包的兼容性问题,该功能只在x86_64上测试过,在ARM上不能正常工作。
当参数修改成功后,原cb.yaml文件备份至/opt/skyformai/etc/history中,/opt/skyformai/etc/cb.yaml中的general段落会被更新。
以下参数可以放到参数JSON字串里,每个参数的定义参考 cb.yaml 里general的说明。
Memperiod#
general:memperiod参数,已完成作业在调度器内存中存放的时间,单位为秒。
Default_queue#
general:Default_queue参数,缺省队列名,多个名字放到同一字符串的值中,用空格隔开,如”medium vnc”。
Rootcanrun#
general:rootcanrun参数,值为”yes”或”no”。是否允许root用户提交作业。
Idle_action_trigger_duration#
general:idle_action_trigger_duration参数,值为大于1的正整数,单位分钟。定义检测作业CPU利用率不够后多长时间触发配置的脚本。
Elastic_job#
general:Elastic_job参数,值为”yes”或”no”,是否允许弹性作业调度。
Sched_interval#
general:sched_interval参数,值为正整数,单位秒。调度器两次调度作业的间隔。
Jm_interval#
general:jm_interval参数,值为正整数,单位秒。每台主机上的作业管理器(cbjm)定时检查作业状态的间隔。
Max_array_size#
general:max_array_size参数,值为正整数,作业阵列最大单元数。
Job_fail_close_host#
general:job_fail_close_host参数,作业连续失败后关闭主机的配置。具体语法参考 cb.yaml 。
Max_cbdata_job_num#
general:max_cbdata_job_num参数,最大cb.data文件数。
Max_stream_records#
general:max_stream_records参数,/opt/skyformai/work/data/stream中文件的最多记录(行)数。
Estream_interval#
general:estream_interval参数,cbsched定期把作业、队列、主机等数据写到一个estream_dir下的间隔时间,单位:秒。
Max_periodic_task_interval#
general:max_periodic_task_interval参数,cbsched定期检查、执行非调度任务(如作业清理,cb.data滚动等)的时间间隔,单位:秒。
Max_jobclean#
general:max_jobclean参数,cbsched每次从内存中清理结束的作业时,为了及时响应命令,内次清理的最多作业数。
User_view_alljobs#
general:user_view_alljobs参数,值为”yes”或”no”。是否允许一般用户查看所有用户的作业信息。
警告
这个参数调整后jservice需要手工重配置(csadmin jsreconfig),否则bjobs命令查到的作业数据不受影响。
例子:
aip p u '{"Memperiod":1000,"Max_jobclean":1500}'
以上命令修改Memperiod和Max_jobclean,修改后可用命令”aip p i”查看:
aip p i
{
"ParamConf": {
"Memperiod": 1000,
"Default_queue": "medium",
"Cgroup": "acct",
"Idle_action_trigger_duration": 1,
"Elastic_job": "yes",
"Sched_interval": 4,
"Jm_interval": 3,
"Max_array_size": 10000,
"Preemption_suspend": "yes",
"Job_terminate_interval": 10,
"Mailprog": ":",
"User_view_alljobs": "yes",
"Max_cbdata_num": 1024,
"Max_stream_records": 100000,
"Max_cbdata_job_num": 100000,
"Egroup_update_interval": 3600,
"Dedicated_queue_include_unavail": "yes",
"Max_jobid": 2147483646,
"Estream_interval": 30,
"Max_periodic_task_interval": 300,
"Estream_dir": "/opt/skyformai/work/data/estream",
"Max_jobclean": 1500
},
"PowerConf": {},
"ScaleConf": {}
}
修改部分limit参数#
命令:aip limit|l update|u ‘参数JSON字串’
JSON limit参数字串中Name必须指定,表示所修改的limit。当参数修改成功后,cb.yaml文件中的limits段落会被删除,所有limit配置存放在/opt/skyformai/etc/limit.yaml中。
备注
limit管理员有权限修改参数。limit管理员也可修改limit管理员用户名,修改后自己就失去了管理该limit的权限。
增删limit或修改limit其他参数可以通过修改cb.yaml或limit.yaml文件,然后重启调度器生效: csasdmin reconfig
以下参数可以放到参数JSON字串里,每个参数的定义参考 cb.yaml 里limit的说明。
Name#
所修改limit的名字,必填。该名字的limit必须已经存在与系统中。
Admin#
limit管理员用户名,可修改。
Slots#
修改slots上限。
Jobs#
修改作业数上限。
ResName#
修改资源上限,定义资源名,如gpu。ResLimit必须同时定义。
ResLimit#
修改资源使用上限。ResName必须同时定义。
例子1,用户u001是limit vnc的管理员:
$ cresources
LIMIT vnc
ADMIN: u001
APPS : cubevnc
PER_USER : all
expand : root u002 u003 cadmin u001
JOBS : 2
$ aip l u '{"Name":"vnc","Jobs":1}' #把作业数上限改成1
例子2,修改GPU使用上限:
$ cresources
LIMIT gpu1
ADMIN u002
USERS : test1
expand : u002 u003
RESOURCE : gpu : 1.0
$ aip l u '{"Name":"gpu1","ResName":"gpu","ResLimit":2}'