cb.yaml#
配置文件#
cb.yaml
概要#
cb.yaml文件是 SkyForm AI 服务的强制配置。它至少定义了集群结构和队列结构。每个部分都是必需的。 该文件采用严格的 YAML 格式。包含特殊字符的文本字符串需要用单引号引起来(例如 ‘xxx’)。
内容#
cluster部分
general部分
usergroups部分
users部分
hostgroups部分
queues部分
limits部分
apps部分
power部分
scale部分
参数#
cluster部分#
集群部分包含控制cbls、cbexe、cbsched 和 cbjm 的集群配置参数。
additional_ports:#
默认情况下,AIP 使用随机端口跨主机复制文件(crcp 和 csub -f)。每次并发复制都需要在源主机和目标主机上使用唯一的端口。如果主服务器和计算机服务器之间有防火墙,则需要开放防火墙上的一系列端口才能使 AIP 正常工作。
- AIP 服务需要 16322 - 16329 之间的端口:
cbls UDP: 16322
cbexe TCP: 16323
cbjm TCP: 16325
cbsched TCP: 16324
cbcrond TCP: 16326
jservice TCP: 16329
AIP个每个作业槽(一台主机上的作业槽数一般等于主机上总的CPU核数)分配的端口为16331 + 作业槽(0 ~ n)。
此参数指定的其他端口用于文件复制和 cview 命令。端口范围取决于 cview 和 crcp 的并发操作数。例如:“additional_ports: 16001-16300”,即 300 个端口。
例子:
additional_ports: 16001-16300
默认值:未定义
参数影响的AIP daemon:cbls, cbexe, cbjm, cbsched
administrators:#
administrators参数是必需的。它定义了集群管理员用户名列表。至少需要定义一个用户。
列表中的第一位用户是主管理员。
例子:
administrators:
- cadmin
- root
参数影响的AIP daemon:cbls,cbsched,影响的目录/opt/skyformai/work,这个目录的必须由第一个管理员拥有。
allow_docker_run_change_user:#
默认情况下,Docker 容器以提交作业的用户身份运行。这是为了确保 Docker 容器不会将其权限提升为 root 用户,从而避免裸机环境中的安全问题。
如果此参数的值为“y”,则允许用户在“csub -do”选项中添加“–user uid:gid”来指定在 Docker 容器作业内运行的用户 ID。
例子:
allow_docker_run_change_user: yes
csub -do“--user root:root”-di centos:7 python3 myprog.py
默认值:no
参数影响的AIP daemon:cbjm,cbexe
allowed_dynamic_cidrs:#
默认情况下,AIP 不允许动态主机加入集群。通过指定此参数和 CIDR 列表,AIP 将允许 IP 地址属于该 CIDR 的主机动态加入集群。
例如:
allowed_dynamic_cidrs:
- 10.210.0.0/16
- 10.211.2.0/24
- 10.211.3.3/32
- 10.211.3.4/32
默认值:无,不允许动态主机
参数影响的AIP daemon:cbls
define_ncpus:#
如果已定义,则将每台主机上的CPU 总数反映如下:“cores”表示主机上的核心总数,“threads”表示主机上超线程的总数。此参数会被主机级别参数“define_ncpus”覆盖。
默认值:cores
参数影响的AIP daemon:cbls, cbjm
dynamic_host_timeout:#
指定动态主机不可用后自动删除的时间间隔(以分钟为单位)。指定值-1 可禁用动态主机的自动删除功能。
默认值:5(分钟)
参数影响的AIP daemon:cbls
enterprise:#
如果设置为“y”,则禁用 AIP 免费版本。在此模式下,如果密钥无效或缺失,调度程序将退出并显示错误日志。
默认值:no
参数影响的AIP daemon:cbls, cbsched
env_prefix:#
指定AIP 环境变量的前缀。
AIP 会为作业设置一些以“CB”为前缀的环境变量(例如 CB_JOBID)。在某些情况下,前缀“CB”已被作业的其他环境变量使用。请使用其他值(例如“AIP”)覆盖前缀“CB”,这样 CB_JOBID 就会被 AIP_JOBID 覆盖。
修改env_prefix 参数时始终运行 csadmin reconfig。
默认值:无,即不覆盖前缀“CB”。
参数影响的AIP daemon:cbsched, cbjm
gpu_action_cmd:#
如果AIP 检测到任何 GPU 多函数调用,它会调用一个外部程序,该程序的路径在 gpu_action_cmd 中指定。此命令以 root 身份运行,无需设置任何环境变量。
如果未指定此参数,则默认情况下,当检测到GPU 出现故障时将不会采取任何措施。
该程序将使用参数“miss”调用($gpu_action_cmd miss)。当所有 GPU 都恢复后,该程序也会使用参数“full”调用($gpu_action_cmd full)。
参数影响的AIP daemon:cbls
host_inactivity_limit:#
表示load_interval倍数的整数,它控制计算节点将其负载信息发送到主节点的最大时间以及主节点向所有计算节点发送心跳消息的频率。
计算节点可以在load_interval到(host_inactivity_limit - 2) * load_interval 秒之间的任何时间发送其负载信息。主节点将至少每 load_interval * host_inactivity_limit 秒向每个主机发送一次主节点公告。
默认值:3
参数影响的AIP daemon:cbls
job_rusage_override:#
默认情况下,当在queue: resspec 中指定了队列级别的 rusage 部分时,作业级别的 rusage 部分将被忽略。将此参数设置为“y”后,当作业在 -R 选项中指定了 rusage 部分时,队列级别的 rusage 部分将被忽略。
默认值:n。不覆盖。队列级别使用部分始终有效。
参数影响的AIP daemon:cbsched
load_interval:#
指定主控主机与所有其他主机之间的负载交换间隔(以秒为单位)。该值不能小于5。在极其繁忙的主机或网络中,或者在包含大量主机的集群中,负载可能会干扰主控主机与所有其他主机之间的周期性通信。将 load_interval 设置为较长的值可以降低网络负载并略微提高可靠性,但代价是响应动态负载变化的速度会变慢。
默认值:5(秒)
参数影响的AIP daemon:cbls
localdir:#
启用调度程序作业数据的复制。指定仅存在于第一个AIP Master 主机上的本地目录路径。此目录用于保存调度程序作业数据和会计文件的主要副本。副本将存储在 AIP_top/work 中。
修改localdir 参数时始终运行 csadmin reconfig。
默认值:无,即不使用重复的数据副本。所有数据都存储在AIP_top/work 目录中。
参数影响的AIP daemon:cbsched
logdir:#
AIP 守护进程日志(cbcrond 除外)的目录。默认情况下,AIP 守护进程日志存储在 AIP_top/log 中。对于大型集群(超过 1000 台主机),建议使用此参数将守护进程日志存储在 /var/log/aip 中。
默认值:/opt/skyformai/log
参数影响的AIP daemon:cbls, cbexe, cbjm, cbsched, jservice, cbcrond
lsf_compatible:#
如果此参数的值为“y”或“yes”,则作业输出将遵循 LSF 样式,包含作业执行和资源使用情况信息。作业内的环境变量都改成以LSB_开头的,等同与设置了“env_prefix: LSB”。默认情况下,此参数的值为“n”,即作业输出不包含额外数据。
默认值:no
参数影响的AIP daemon:cbjm
master_inactivity_limit: 一个整数,表示load_interval的倍数。如果计算节点在(host_inactivity_limit + host_number * master_inactivity_limit) * load_interval 秒后仍未收到上一主节点的消息,它将尝试成为主节点,其中 host_number 是主机在 hosts 部分中的位置。主节点的 host_number 为 0。
默认值:2
参数影响的AIP daemon:cbls
master_list:#
指定以空格(’ ‘)分隔的主候选主机名。
默认值:如果未指定此参数,则hosts 部分中的前 3 个主机为 Master 候选。如果主机总数小于 3,则默认所有主机均为 Master 候选。
参数影响的AIP daemon:cbls, cbsched, cbjm
mem_enforce_minfree:#
指定此参数时,仅当作业执行主机的可用内存低于此值(以MB 为单位)时才会强制执行作业内存限制。
默认值:未指定。默认情况下,无论主机可用内存有多少,都会强制执行作业内存限制。
例如:mem_enforce_minfree: 100。使用 csub -M 提交的作业带有内存限制,或者作业具有队列级别内存限制。仅当作业首次执行主机的可用内存小于 100MB 时,才会强制执行作业内存限制。否则,即使作业的内存使用量大于内存限制,作业仍会继续运行。
参数影响的AIP daemon:cbsched, cbjm
name:#
定义集群的名称。如果缺失,则默认集群名称为“aip”。例如:
name: aip
参数影响的AIP daemon:cbls
no_resreq_check:#
默认情况下,作业提交会检查用户指定的资源需求,如果用户请求的资源量超过集群的资源量,则会拒绝提交。这要求作业提交查询主服务器以获取集群中所有资源的信息。在非常大的集群环境中,这将花费很长时间(超过10 秒),从而导致作业提交速度变慢。要禁用此检查,请将此参数指定为任意值,例如 no_resreq_check: nocheck。
默认值:未指定,即csub 检查资源需求。
参数影响的AIP daemon:cbsched
runaway_job_grace_period:#
当作业运行时间达到上限时,cbjm会执行终止作业的操作,默认情况下,cbjm 首先发送 SIGUSR2 信号。在 runaway_job_grace_period 之后,它会发送 SIGINT 信号、SIGTERM 信号,最后发送 SIGKILL 信号。
cbjm启动时,该值显示在 cbjm.log 中。
默认值:10 (分钟)
参数影响的AIP daemon:cbjm
sshcontrol:#
当使用–sshcontrol 设置主机(host-setup)时,会安装一个 pam 模块来控制用户何时可以 ssh 到主机。
当此参数的值为“yes”时,用户可以在
主机属于专用队列,并且用户可以使用专用队列,或者
用户在主机上有一个作业,并且该用户从运行该作业的主机 SSH 连接到运行同一作业的另一台主机(即并行作业的主机之间的 SSH)。不允许从同一主机发起 SSH 连接。
所有其他ssh 登录均被阻止。
如果该参数的值为“none”,则ssh控制被禁用。
如果此参数的值为“job”,则用户可以在以下情况下 ssh 到主机:
主机属于专用队列,并且用户可以使用专用队列,或者
无论 ssh 来自哪里,用户在主机上都有作业。
在所有情况下,除非被系统阻止,否则始终允许root 和 AIP 管理员使用 ssh。
默认值:无(禁用ssh 控制)
参数影响的AIP daemon:cbsched
resources:#
资源子节是可选的。它定义了要附加到集群中每个主机的标签类型资源列表。定义完成后,用户可以通过在资源规范中指定资源标签来运行作业。调度程序将选择带有关联标签的主机作为作业执行候选。
每个资源标签都具有以下属性(变量):
- name:
标签的名称。这是必填项。
- description:
标签的描述。这是可选的。
- type:
类型的值应为“tag”标签,或“number”数值。
- direction:
资源数值的升降。描述数值型资源的多少属性,如可用内存是数值越大资源越多(decrease),而网络流量是数值越大资源越少(increase)。
- assign:
指定型资源。取值为“y”或“n”,缺省为n。有些资源如网络带宽或内存在分配时没有指定的单位,而GPU和端口在分配时由调度器指定具体某个资源,以免各个作业间互相发生冲突。
- slotresource:
作业槽资源。取值为“y”或“n”,缺省为n。即每个任务需要分配一份资源,如内存,GPU等,而有些资源是作业级的,即不管一个作业有多少个任务,都只需分配一份资源,如存储容量。
- instances:
定义共享资源的主机。格式为:instance instance …。instance的格式为 [all|default|others|host1 …]
对于静态资源,必须在此处定义资源总量。动态资源(如用RESS获取的资源)不能定义资源总量。
instance 是共享资源实例的主机名列表。可以为实例指定保留字 all、others 和 default:
all: 表示整个集群中只有一个资源实例,并且此资源由所有主机共享。使用 not 运算符 (~) 将主机从 all 规范中排除。例如:(2@[all ~host3 ~host4]) 表示集群中由 host1 host2 … hostn 组成的所有服务器主机共享 2 个资源单元,host3 和 host4 除外。如果您拥有大型集群但只想排除少数主机,则此方法非常有用。
规范中必须使用括号。not 运算符只能与 all 关键字一起使用。它与 others 和 default 关键字一起使用无效。
others: 表示字段中未明确列出的其余服务器主机构成了该资源的一个实例。例如:2@[host1] 4@[others] 表示 Apple 主机上有 2 个资源单元,所有其他主机共享 4 个资源单元。
default——表示集群中每个主机上都有一个资源实例,即资源实际上不共享,并且是每个主机的本地资源。
- interval:
动态资源(RESS提供)的采样间隔,单位为秒。最小值为5秒。
资源部分中的变量与SkyForm AI 资源传感器 RESS 中使用的资源变量基本相同。更多详细信息,请参阅 ress
例子:
- name: linux7 # 标签资源
description: CentOS 7
type: tag
- name: proxy # 静态数值型资源
description: Number of ports configured in Proxy
type: number
direction: decrease
assign: yes
slotresource: no
instances: "1000@[all]"
- name: localdisk # 动态数值型资源,由RESS更新资源值
description: Available local disk in GB
type: number
direction: decrease
instances: "[default]"
interval: 15
参数影响的AIP daemon:cbls
hosts:#
hosts 子节是必需的。它定义了属于集群的主机列表。
每个主机具有以下属性(变量):
name:#
指定主机名,该名称必须在系统中可解析。这是必需的。该名称可以采用类似“node[0001-0100]”的值,系统会在内部将其扩展为 100 个主机。
maxslots:#
指定主机上可用的最大作业槽位数量。此项为可选。
该值可以是数字或单词“cpu”。如果未定义,则表示主机上的最大作业槽位数量不受限制。如果定义了单词“cpu”,则表示主机上的最大作业槽位数量等于主机上安装的CPU 核心数。这还可以将作业进程与 CPU 核心绑定,以确保作业执行性能。对于跨多台主机运行的并行作业,CPU 绑定仅在第一台执行主机上启用。
attr:#
其值为“server”、“client”或“remote”。“server”表示主机运行 AIP 服务并可以运行作业。“client”表示主机未运行 AIP 服务,或者 AIP 服务被忽略,主机无法运行作业。“remote”表示主机是服务器,但不运行 AIP 服务。它要求aip_top /sbin 中存在可执行文件 cbls.remote。AIP 守护进程从 clbs.remote 的输出中获取负载信息。当作业被调度到主机时,该作业会被调度到主服务器。需要配置作业启动器以远程启动作业到主机。详情请参阅 cbls.remote 。
默认值:server
cpubind:#
当指定“maxslots: cpu”时,是否启用 CPU 绑定(取值“y”或“n”)。如果未指定,则当 maxslots 等于主机 CPU 核心数时启用 CPU 绑定。否则,禁用 CPU 绑定。当 maxlots 不等于主机 CPU 核心数时,此参数不会覆盖行为。
默认:遵循“默认”主机。如果未指定,则使用“默认”主机。
define_ncpus:#
它采用“cores”或“threads”的值。这将覆盖集群范围的参数“define_ncpus”。
thresholds:#
主机的调度阈值列表。阈值格式为:“load_namesched_threshold/stop_threshold”。
load_name的值为“mem”、“swp”和“ut”(CPU 利用率在 0.0 - 1.0 范围内)。sched_threshold 和 stop_threshold 是浮点值。当负载达到“sched_threshold”时,调度程序将停止向主机调度更多作业。当负载达到“stop_threshold”时,调度程序将停止在主机上运行作业。
对于“mem”、“swp”、“tmp”,默认单位为 MB。您可以在数值后添加字母“G”将单位更改为 MB,或添加字母“T”将单位更改为 TB。
负载索引名称与“cinfo”的输出相同:“r15s”、“r1m”、“r15m”、“ut”、“pg”、“io”、“up”、“it”、“tmp”、“swp”或“mem”。
该阈值支持多个时间窗口,每个值的格式为:“sched_threshold1/stop_threshold1 [weekday:]小时[:分钟]-[weekday:]小时[:分钟] sched_threshold2/stop_threshold2 [weekday:]小时[:分钟]-[weekday:]小时[:分钟]”。
或者格式可以是:“sched_threshold/stop_threshold default (weekday1-weekday2)hour:minute-hour:minute;(weekday3,weekday4,week5)hour:minute-hour:minute”
日期数字代表星期几,类似于crontab,即 0 或 7 代表星期日,1 代表星期一,等等。
示例1:
thresholds: - "ut 0.7/0.9" - "mem 250/200"在上面的例子中,作业调度条件是“mem >= 250 && ut <= 0.7”,作业停止(挂起)条件是“mem < 200 || ut > 0.9”。
示例2:
- "mem1G/0.5G 1:8:00-5:20:00 0.6G/0.3G 5:20:00-1:8:00"上面的例子意味着阈值为周一早上8 点到周五晚上 8 点 1G/0.5G,周五晚上 8 点到周一早上 8 点 0.6G/0.3G。
示例3:
- "mem 100/50default50/30 (1-5)8:00-20:00,(0,6)6:00-22:00"以上示例表示,工作日8:00 - 20:00 以及周末 6:00 - 22:00 的阈值分别为 50MB/30MB。除此以外,阈值(默认值)为 100MB/50MB。
proxy:#
远程主机的代理主机名。提交到远程主机的作业将被分派到指定的代理主机。
例子:
proxy:host1默认:对于远程主机,代理主机是主主机。
umap:#
如果作业执行主机的用户空间与主服务器不同,则可以在此处指定可用于运行作业的用户列表,以供集群动态使用。命令cumap <hostname> 会显示该主机上的动态用户映射。
例子:
umap: u[001-100] u123默认值:主机未启用用户映射
map_to_single_user:#
默认情况下,远程主机上的用户映射不允许不同的本地用户同时映射到同一个远程用户。如果远程用户数量受限,请将值设置为1,以禁用上述控制,并将无限数量的本地用户映射到单个远程用户。
例子:
map_to_single_user: 1
参数影响的AIP daemon:cbls, cbexe, cbsched, cbjm
clients:#
允许AIP 接受浮动客户端主机。值为“yes”。
例子:
clients: yes
在客户端主机上,需要以与服务器相同的方式安装AIP。但必须停止并禁用 aip 服务。配置文件 cb.yaml 必须与 AIP 服务器使用的 cb.yaml 相同。
默认值:no,即不允许浮动客户端。
参数影响的AIP daemon:cbls
general部分#
general部分定义了调度程序的通用属性。更改此部分中的任何参数都需要重新配置调度程序才能生效。命令为:“csadmin reconfig”。
参数影响的AIP daemon:cbsched
default_queues:#
当用户在作业运行中未指定队列名称时,指定默认队列名称。此项为必填项。
当用户提交作业而未明确指定队列时,AIP 会将作业放入此列表中第一个满足作业规范的队列中,但要遵守其他限制,例如请求的主机、队列状态、允许的用户等。
例如:default_queues: medium foruser1 foruser2
memperiod:#
指定已完成作业的信息在调度程序内存中保留的时间段(以秒为单位)。此项为可选。
将已完成的作业保留一小时的示例:memperiod:8000
默认值:4000(秒)
cgroup:#
Linux cgroup 集成,用于强制执行 CPU 使用率、内存使用率和 GPU 使用率。值为“cpu”、“mem”、“gpu”、“acct”或以上任意词语的组合。默认情况下,作业的 cgroup 资源不强制执行。
例如:cgroup: acct cpu gpu
现代操作系统,Ubuntu 22、EL 9 及以上,cgroup 使用 v2。“gpu”cgroup 控制使用 cgroup v1。
当cgroup“acct”启用时,AIP 使用 CPU cgroup 来控制作业进程。“cpu”不仅启用“acct”,还会强制执行作业的 CPU 使用率。我们强烈建议启用“cgroup: acct”,以防止作业进程逃逸。
AIP在Linux 内核 2.x(例如 CentOS 6)或更低版本上不支持 Cgroup。
默认:cgroup 未启用。
rootcanrun:#
默认情况下,root 用户可以运行作业。要禁用此功能,请定义“rootcanrun: no”。
默认值:yes
egroup_update_interval:#
定义自动同步系统用户组成员的间隔,单位秒。系统用户组是usergroups里与系统中同名的用户组,但组成员为”@system”的哪些用户组。这些组的成员由调度器从系统中定期同步。
默认值:3600(1小时)
最小值:600(10分钟)
idle_action_trigger_duration:#
指定队列级别作业空闲操作运行的时间间隔(以分钟为单位)。此参数与队列部分中的“job_idle”一起使用。
例子:
idle_action_trigger_duration: 2
默认值:1(分钟)
job_accept_interval:#
将一个作业调度到主机后,在将第二个作业调度到同一主机之前等待的调度轮次数。默认情况下,主机在每个作业调度间隔内可以接受多个作业。由于主机上可运行的作业总数没有限制,因此可能会一次性将大量作业调度到主机。
如果该值设置为非零正整数,则意味着主机在调度一个作业后等待(job_accept_interval* sched_interval)秒,然后再调度第二个作业。
在队列级别(队列部分)设置的job_accept_interval将覆盖此部分中设置的job_accept_interval的值。
默认值:0
job_terminate_interval:#
指定终止作业时发送SIGINT、SIGTERM 和 SIGKILL 信号的时间间隔(以秒为单位)。作业终止时,系统会依次向该作业发送 SIGINT、SIGTERM 和 SIGKILL 信号,并在发送这些信号之间设置一个job_terminate_interval 的休眠时间。这允许作业在必要时进行清理。
默认值:10(秒)
sched_interval:#
调度器启动一个调度周期的时间间隔(以秒为单位)。在大型或繁忙的环境中,此值应该更长,例如15。
默认值:4(秒)
jm_interval:#
作业管理器每次更新作业状态和作业资源使用情况信息的时间间隔(以秒为单位)。在大型环境中,此数字应该更长,例如30。
默认值:3(秒)
elastic_job:#
通过提供“y”值来指定是否支持弹性作业。
默认值:no
estream_interval:#
指定调度程序CBSCHED 更新扩展流文件的间隔(以秒为单位)。这些文件将写入 estream_dir 目录中,缺省为 /tmp/.aipestream。 它们包含最新的作业状态、队列状态、用户状态和主机状态。
默认值:30(秒)
最小值:10(秒)
estream_dir:#
指定调度器扩展stream数据的目录。若修改了该参数,目录必须手工创立,并保证集群第一管理员有写的权限,否则estream不能 正常工作,jservice也不能正常工作。
默认值:调度器主机(master)上的/tmp/.aipestream
mailonmaster:#
值“yes”表示通知发送邮件或自定义程序从主控主机执行。“no”表示在作业的第一个执行主机上执行。
默认值:no
mailprog:#
AIP 在作业开始和结束时用于发送电子邮件的邮件程序的路径和文件名。
这是AIP 用于向用户发送系统消息的电子邮件程序。
当AIP需要向用户发送电子邮件时,它会调用此处定义的程序。 您可以编写自己的自定义邮件程序,并将此参数设置为该程序的存储路径。
提供任何邮件程序的名称。为了方便起见,AIP 提供以下邮件程序:
sendmail:支持Linux 上的 sendmail 协议 如果修改此参数,AIP 管理员必须在主机上运行 csadmin reconfig。
在Linux 上: AIP 通常使用 /usr/lib/sendmail 作为邮件传输代理向用户发送邮件。AIP 使用以下参数调用“mailprog”:-oi -FAIP -f job_user mailto。
“mailprog” 必须从标准输入读取邮件正文。邮件的结尾以文件结束符(END-OF-FILE) 标记。任何能够接受参数和输入并正确投递邮件的程序或 Shell 脚本都可以使用。
任何用户都必须能够执行“mailprog”。
示例:mailprog: /serverA/tools/skyformai/bin/notify
默认:”:”,即不发送电子邮件
mailto:#
当用户的作业完成或出现错误时,AIP 会向用户发送电子邮件;如果 AIP 系统出现严重错误,则会向 AIP 管理员发送电子邮件。默认情况下,AIP 会将邮件发送给运行守护进程的主机上提交作业的用户;这假设您的电子邮件系统会将邮件转发到中央邮箱。
“mailto”参数改变AIP使用的邮寄地址。“mailto”是用于构建邮寄地址的格式字符串。
常见格式有:
“!U” - 邮件发送到本地提交用户的帐户名 主机。如果找到子字符串“!U”,则将其替换为用户的帐户名。
“!U@company_name.com” - 邮件发送给用户@ company_name.com。
“!U@!H” - 邮件发送至 用户@submission_hostname 。 子字符串!H 被替换为提交主机的名称。 该值需要用引号引起来,因为字符“!”在YAML 中具有特殊含义。 所有其他字符(包括任何其他“!”)都会被准确复制。
如果修改了此参数,AIP 管理员必须通过执行命令“csadmin reconfig”重新配置调度程序。
mailsize_limit:#
限制包含AIP 作业输出信息的电子邮件的大小(以 KB 为单位)。
AIP 系统会将作业信息(例如 CPU、进程和内存使用情况、作业输出以及错误)通过电子邮件发送给提交用户帐户。某些作业可能会创建大量输出。为防止大型作业输出文件干扰您的邮件系统,请使用“mailsize_limit”设置包含作业信息的电子邮件的最大大小(以 KB 为单位)。请指定一个正整数。
如果作业输出电子邮件的大小超出“mailsize_limit”,则输出将保存到JOB_SPOOL_DIR 下的文件中;如果 JOB_SPOOL_DIR 未定义,则保存到默认的作业输出目录中。该电子邮件会告知用户作业输出的位置。
如果使用csub的-o选项,则不会根据“mailsize_limit”检查作业输出的大小。
如果您使用“mailprog”参数指定的可以使用CB_MAILSIZE 环境变量的自定义邮件程序,则无需配置 CB_MAILSIZE_LIMIT。
默认值:未启用。AIP 作业输出电子邮件的大小没有限制。
max_array_size:#
用户在单次作业提交中可创建的作业阵列的最大索引值。该值必须介于2 到 1,000,000,000 之间。
默认值:10000
max_cbacct_num:#
work/data目录中的最大cb.acct 文件数量。
默认值:0,即无限制。
max_cbdata_num:#
work/data 目录下 cb.data 文件的最大数量。设置为 0 或负数表示无限制。
默认值:1024
max_cbdata_job_num:#
已从cbsched 内存中清除的已完成作业的最大数量,以触发 cb.events 文件翻转。
当cb.events 文件滚动更新时,所有已清理的作业将被写入新文件 cb.events.<timestamp>。新的 cb.events 包含 cbsched 内存中所有活动作业和已完成作业。
一旦达到限制,AIP 就会启动一个新的事件日志文件。旧的事件日志文件将保存为 cb.events.<timestamp>。事件日志记录将在新的 cb.events 文件中继续进行。
默认值:10000
max_jobclean:#
定义调度器在每次从内存中清理已完成作业时最多清理的作业数。调度器在做清理时会停止对外的服务,如果过每次清理作业数太大,会影响对命令的响应。 当每次清理的作业数到达这个最大值时,cbsched.master.log中有一条清理所有时间的日志。
默认值:2000
最小值:10
max_jobid:#
指定作业ID 限制。作业 ID 限制是 AIP 分配的最大作业 ID,也是系统中作业的最大数量。
指定从999,999 到 2,147,483,646 的任意整数(出于实际目的,指定小于该值的任何 9 位整数)。
默认值:2147483646
最小值:999999,最大值:2147483646
max_periodic_task_interval:#
调度器运行非调度任务的最长间隔,如数据清理、输出扩展stream、混动cb.data等。这个间隔的最小周期是sched_interval (缺省为4秒)。这个参数定义最长时间,单位为秒。
默认值:600 (10分钟)
最小值:10 (秒)
max_stream_records:#
在写入由max_stream_records 定义的记录数后,AIP 调度程序会写入一个 STREAM_END 事件,关闭文件 cb.stream.0,将其重命名为 cb.stream.1,并创建一个新的 cb.stream.0 来继续写入作业事件,之前的 cb.stream.1 将被覆盖。
默认值:100000
job_fail_close_host:#
当一段时间内作业失败次数超过指定次数时,关闭主机。
语法:number_of_job_failes[time_period_minute]
第一个值是触发主机关闭的作业失败次数。第二个值是作业失败的测量时间段,以分钟为单位。默认情况下,如果未指定此参数,则不会测量任何作业失败。如果未指定time_period_minute,则时间段为 5 分钟。
默认:未指定,即不启用该功能。
preemptable_resources:#
用于启用基于资源的作业抢占的配置。只有在值(以空格分隔的资源名称列表)中定义的资源才能触发作业抢占。
当高优先级队列中的作业因其所需资源不可用而处于等待状态,且该资源在“preemptable_resources”中定义时,AIP 会将正在使用该资源的低优先级作业重新排队,直到资源可供高优先级作业运行。这通常用于 GPU 或应用程序许可证抢占。
要启用抢占策略,需要在高优先级队列配置中设置参数“preemption”。详情请参阅队列部分。
启用基于资源的作业抢占会自动禁用作业抢占暂停(“preemption_suspend”)。
例如:preemptable_resources: gpu
默认值:未指定可抢占资源。
preemption_suspend:#
指定基于槽位的抢占行为。如果设置为“y”,则作业抢占会暂停被抢占的作业。如果设置为“n”或未设置(默认),则作业抢占会终止被抢占的作业,然后将其重新放入队列。
默认值:n,作业抢占将重新排队被抢占的作业。
user_view_alljobs:#
如果值为“yes”,则普通用户可以查看所有作业信息、用户组信息、主机组信息、所有用户信息。
默认值:no
ugconf#
它指定包含用户组部分的文件名。该文件应与cb.yaml 位于同一目录中。目前仅支持“ug.yaml”文件名。
usergroup部分#
用户组部分指定用户和用户组的层次结构,可用于队列和限制部分。一个用户可以属于多个用户组。用户组可以嵌套,即一个组可以是另一个组的成员。
参数影响的AIP daemon:cbsched
name:#
指定用户组的名称。该名称不得与任何现有用户相同。由于此限制,使用OS 用户组时请务必谨慎。
members:#
指定属于该组的用户名。可以列出多个用户,每个用户之间用空格分隔。特殊术语“@system”表示该组是操作系统用户组,其成员信息应从操作系统用户数据库(例如 LDAP、NIS)中获取。
特殊术语“@external”表示组成员来自外部程序“/opt/skyformai/sbin/egroup”。egroup 由调度程序以“/opt/skyformai/sbin/egroup -u group_name”的格式执行。预期输出是以空格分隔的用户组成员列表。
成员定义也可以使用“all ~username”来定义除‘username’之外的所有用户。
administrator:#
指定群组管理用户。该用户可以查看群组成员的作业信息。每个群组只能指定一名管理员。
默认值:该用户组无管理员
maxslots:#
指定组的作业槽限制。
例如:maxslots: 10
默认值:对用户组无限制
usermaxpend:#
指定组中每个用户的最大等待作业数。此项为可选。默认情况下,每个用户的等待作业数没有限制。
默认值:没有最大等待作业限制
usermaxslots:#
指定组中每个用户的运行作业槽位限制。此项为可选。默认情况下,每个用户的运行作业槽位没有限制。
每位用户只能拥有一个职位槽位限制。如果用户属于多个用户组,则适用该用户所属的最后一个用户组的usermaxslots 值。此限制也可能会被用户部分中指定的槽位限制所覆盖(见下文)。
默认值:每个用户无限制
maxjobs:#
指定该组要运行的最大作业数。
默认值:无限制
maxgpus:#
指定组一次可使用的最多GPU 数量。
默认值:无限制
users部分#
users部分指定用户作业槽位限制。如果同一用户在 usergroups 部分中指定了作业槽位限制,则该限制将被覆盖。在此部分中,值 -1 表示受限。
参数影响的AIP daemon:cbsched
name:#
指定用户名。保留字“default”表示该规范默认适用于所有用户,除非被特定用户条目覆盖。
maxslots:#
指定用户运行作业槽的限制。
默认值:-1,即无限制
maxpend:#
指定用户等待作业槽的限制。
默认值:-1,即无限制
hgconf#
它指定包含hostgroups 部分的文件名。该文件应与 cb.yaml 位于同一目录中。目前仅支持“hg.yaml”文件名。
hostgroups部分#
hostgroups部分指定主机组,可用于队列和限制部分。一个主机可以属于多个主机组。主机组可以嵌套,即一个组可以是另一个组的成员。
参数影响的AIP daemon:cbsched
name:#
指定主机组的名称。该名称不能与此文件中配置的任何主机名相同。
members:#
指定属于该组的主机名。可以列出多个主机名,每个主机名之间用空格分隔。
members 的值可以包含保留字“all”,表示读取 cb.yaml 时配置的所有主机,但不包括通过命令 caddhost 动态添加的主机。主机名前缀“~”表示“排除”。例如,“all ~h1”表示除主机/主机组 h1 之外的所有主机。之前定义的组名可以作为成员包含在“members”字段中。
queueconf#
它指定包含队列部分的文件名。该文件应与cb.yaml 位于同一目录中。目前仅支持“queue.yaml”文件名。
queues部分#
队列部分定义了集群的队列列表。每个队列都有一组属性。
参数影响的AIP daemon:cbsched
name:#
指定队列名称。这是必需的。
administrators:#
队列管理员列表。队列管理员可以对队列中任何用户的作业执行操作。默认值为未定义,这意味着用户必须是集群管理员才能对队列中的作业进行操作。
赋值可以使用用户组名称。
默认值:无管理员
description:#
指定队列的可选描述。
默认值:无描述
priority:#
相对数字。数字越大,队列的优先级越高。此项为必填项。数字范围一般为1-100。
maxslots:#
队列中正在运行的作业的最大作业槽位数量。此项为可选。如果未定义,则没有运行作业槽位限制。
默认值:-1 无限制
fairshare:#
指定队列的公平共享结构。如需均等共享,请使用文本“[default,1]”。此项为可选。
默认值:无公平份额
preemption:#
指定一个或多个低优先级队列,这些队列之间用空格分隔,可以被抢占。拥有者抢占时可以抢占同有限的拥有者队列(见ownership_hosts)。抢占可以在“general”部分中基于资源或作业槽位进行配置。有关详细信息,请参阅参数“preemptable_resources”和“preemption_suspend”。
默认值:未定义,即队列不抢占。
ownership_hosts:#
指定队列拥有的一组主机(包括主机组)。将此参数与“preemption”参数结合使用,意味着如果这些拥有的主机被“preemption”参数指定的队列中的作业占用,则此队列中等待的作业将抢占“preemption”队列中的作业。
此外,最好在队列中指定主机偏好,以便优先拥有的主机来运行此队列中的作业。
例子:
- name: dev
priority: 3
preemption: testq
ownership_hosts: hostgroup1
hosts: hostgroup1+ others
在上面的例子中,dev 队列中的作业优先在 hostgroup1 的主机上运行。它拥有 hostgroup1 的所有主机。如果 testq 中的作业正在 hostgroup1 的任何主机上运行,则dev 队列中等待的作业将抢占 testq 中在 hostgroup1 主机上运行的作业,无论testq队列的优先级如何。
此功能可保证单个用户群的SLA(服务水平协议)。
默认值:无所有权主机
resspec:#
指定队列中所有作业的默认资源需求。此为可选参数。语法请参阅 cjobs。 -R 选项。与 csub -R 选项相同,多个部分之间以空格分隔。不支持多个资源需求(例如“4{mem>10} 5{rusage[gpu=1]}”)。
默认值:无资源要求
users:#
指定哪些用户/用户组可以使用该队列。此项为可选。
默认:所有用户都可以使用该队列。
hosts:#
指定队列中的作业可以运行在哪些主机/主机组上。此项为可选。
默认值:队列中的作业可以在集群中的所有主机上运行。
hostmaxslots:#
指定队列在每台主机上运行作业的槽位限制。这是可选的。
默认值:队列主机没有运行作业槽限制。
usermaxslots:#
指定每个用户的运行作业槽位限制。这是可选的。
默认值:每个用户没有运行作业槽限制。
rerunonhostfail:#
如果值为“yes”,则当作业执行主机发生故障时,作业将自动重新运行。
默认值:no
rerunonexitcode:#
指定一组作业退出代码,以空格分隔,用于自动重新运行作业。特殊值“!0”表示当作业的退出代码非零时,作业将自动重新运行。这通常用于服务作业。
默认值:作业在特定退出代码时不会重新排队
slotreservetime:#
启用队列中等待的并行作业可以预留的处理器和内存预留时间(以分钟为单位)。在此时间之后,如果作业尚未积累足够的作业槽来启动,则会释放其所有预留的作业槽。
默认:未启用处理器预留。
cgroup:#
指定队列里作业是否使用cgroup控制进程、CPU使用、内存使用、和GPU使用。这个参数会覆盖系统级的cgroup参数(general: cgroup)。值为acct、cpu、mem、gpu的组合,多项之间用空格隔开。例子:
queues:
- name: medium
priority: 2
cgroup: cpu mem
general:
cgroup: acct
这个例子里,系统级的cgroup是acct,而队列medium中的作业只受cpu和mem的cgroup控制。
队列作业的cgroup控制缺省使用系统级设置的cgroup值。队列cgroup的定义覆盖系统级的。如果队列要去除系统级cgroup的控制,则cgroup的值为**remove**。例子:
queues:
- name: medium # 队列medium中的作业不受cgroup控制
priority: 2
cgroup: remove
- name: vnc # 队列vnc中的作业继承系统中cgroup的控制
priority: 2
general:
cgroup: acct gpu
job_starter:#
指定队列级作业包装程序的路径。作业启动器会在执行前为已提交的作业创建特定的环境。该参数的值可以是任何可用于启动作业的可执行文件(即,可以接受作业作为输入参数)。也可以选择指定其他字符串。
语法:job_starter: stater [ starter ] [“%USRCMD”] [ starter ]
默认情况下,用户命令在作业启动器之后运行。可以使用特殊字符串%USRCMD 来表示用户作业在作业启动器命令行中的位置。%USRCMD 字符串可以用引号括起来,也可以在其后跟其他命令。
例如:
job_starter: csh -c "%USRCMD;sleep 10"
job_idle:#
定义作业空闲因子阈值,介于0.0 和 1.0 之间,表示 CPU 时间/运行时间,以及可选的“检测后”值,表示仅在作业运行超过“检测后”分钟后才检测作业空闲,以及可选的“空闲操作”,由主集群管理员在检测到空闲作业后执行。
语法:job_idle: idle_factor_threshold [ detect_after [ idle_action ]]
默认情况下,job_idle未定义,即不检测作业空闲。如果定义了作业空闲因素阈值,则默认的“检测后”值为 20 分钟。如果未定义“空闲操作”,则检测到作业空闲后不会采取任何操作。
例如:
job_idle: 0.05 5 /opt/skyformai/sbin/idle_action_script
“idle_action”程序由集群的主管理员在主服务器上执行。环境变量CB_IDLE_JOBS 在运行“idle_action”程序之前设置。它包含队列中所有检测到的空闲作业的作业 ID 和作业的空闲因子。多个作业之间用空格分隔。CB_IDLE_JOBS 值的示例为“102 0.01 103 0.00”。
exclusive:#
定义一个独占队列。值为“enforce”,所有提交到该队列的作业都是独占的, 即作业只会被调度到没有其他作业运行的主机上。若只是支持独占作业,请使用值“yes”。
默认情况下,队列不接受独占作业提交。
nice:#
调整此队列中作业的Linux 调度优先级。默认值 0(零)表示 Linux 交互式作业将保持默认调度优先级。此值会逐个队列调整作业的运行时优先级,以控制其对其他批处理或交互式作业的影响。更多详细信息,请参阅nice (1) 手册页。
默认值:0
corelimit:#
对于属于此队列中的作业的所有进程,每个进程(硬)core文件的大小限制(以 KB 为单位)。
默认值:无限制。
filelimit:#
此队列中所有属于某个作业的进程的(硬)文件大小限制(以KB 为单位)(参见getrlimit (2))。您可以在数字末尾添加 M 或 G,以使限制单位为 MB 或 GB,例如 filelimit: 10G
默认值:无限制。
job_accept_interval:#
将一个作业调度到某台主机后,在将第二个作业调度到同一主机之前,需要等待的调度轮次数。 默认情况下,此值与general部分中设置的job_accept_interval相同,其默认值为0。
队列级别设置的值将覆盖集群级别(在general部分)设置的job_accept_interval。
memlimit:#
内存驻留设置了属于该队列中某个作业的所有进程的大小限制。
值格式:[default_limit] maximum_limit | percore
设置可分配给作业进程的最大物理内存量。
默认情况下,如果指定了默认内存限制,则当达到默认内存限制时,提交到队列的没有作业级内存限制的作业将被终止。
如果只指定一个限制,则该限制为最大内存限制(或称硬限制)。如果指定两个限制,则第一个限制为默认内存限制(或称软限制),第二个限制为最大内存限制。
默认情况下,限制的单位是KB。要指定 MB 或 GB,请在数字末尾添加 M 或 G,例如 14G。
如果值为“percore”,则作业的内存使用量受运行主机上平均可用内存乘以请求的核心数的限制。 主机上的可用内存量等于已安装内存减去主机级别或队列级别的内存调度阈值(以较大者为准)。
默认值:无限制。
processlimit:#
限制可作为作业一部分的并发进程的数量。
值格式:[default_limit] maximum_limit
默认情况下,如果指定了默认进程限制,则当达到默认进程限制时,提交到队列的没有作业级进程限制的作业将被终止。
如果仅指定一个限制,则该限制为最大进程限制(或称硬限制)。如果指定两个限制,则第一个限制为默认进程限制(或称软限制),第二个限制为最大进程限制。
默认值:无限制。
runlimit:#
指定作业运行时间的上限,以及可选的默认运行时间上限(以分钟为单位)。格式:[default_limit] maximum_limit。
默认情况下,处于RUN 状态的时间超过指定的最大运行限制的作业将被 AIP 终止。您可以选择提供自己的终止作业操作来覆盖此默认设置。
如果提交的作业级别运行限制(csub -W) 小于最大运行限制,则当达到最大运行限制时,作业将被终止。如果提交的作业级别运行限制大于最大运行限制,则将被队列拒绝。
如果指定了默认运行限制,则当达到默认运行限制时,提交到队列的没有作业级运行限制的作业将被终止。
如果仅指定一个限制,则该限制为最大运行限制(或称硬限制)。如果指定两个限制,则第一个限制为默认运行限制(或称软限制),第二个限制为最大运行限制。分钟数可以大于59。因此,三个半小时可以指定为 3:30 或 210。
默认:无运行限制。
例如:runlimit: 20 60 # 最大运行限制为 60 分钟,默认 20 分钟
例如:runlimit: 60 # 最大运行限制为 60 分钟
pre_exec:#
指定在作业执行前在执行主机上运行的命令。如果同时指定了作业级别预执行命令(csub -E) 和队列级别预执行命令,则作业级别预执行将在队列级别预执行命令之后运行。预执行和后执行命令在 /bin/sh -c 和 /tmp 下运行。stdin/stdout/stderr 设置为 /dev/null。PATH 环境变量设置为:/bin;/usr/bin;/usr/sbin。
如果预执行命令以非零退出代码退出,则视为失败,并将作业重新排队至队列的头部。
默认值为空,即不执行预执行命令。
post_exec:#
指定在作业执行后的第一个主机上运行的命令。其行为类似于pre_exec(参见上文)。
默认值为空,即没有执行后命令。
pre_post_exec_user:#
为队列级别的执行前和执行后命令指定与默认值不同的用户名。
默认值:执行作业的用户
kill_action:#
更改作业终止操作的行为。该值可以是信号名称(例如SIGTSTP),也可以是命令路径(不能是 ckill 或 crequeue,因为这会导致死锁)。
为作业设置的所有环境变量也可用于命令操作。以下附加环境变量已设置:CB_JOBPGIDS - 作业当前进程组 ID 列表。CB_JOBPIDS - 作业当前进程 ID 列表。
默认的作业终止操作是:发送SIGINT 信号。如果作业仍在运行,则在 10 秒后发送 SIGTERM 信号。如果作业仍在运行,则再过 10 秒发送 SIGKILL 信号。
stop_action:#
更改作业暂停操作的行为。值可以是信号名称(例如SIGTSTP),也可以是命令路径(不能是 cstop,否则会导致死锁)。
为作业设置的所有环境变量也可用于命令操作。此外,还设置了额外的环境变量CB_JOBPGIDS 和 CB_JOBPIDS(有关这些变量的含义,请参阅 kill_action)。CB_SUSP_REASONS 也已设置,它是一个整数,表示暂停原因的位图,定义在 cbsched.h 中。
默认的作业暂停操作是:对于普通串行作业发送SIGSTOP,对于并行或交互式作业发送 SIGTSTP。
resume_action:#
更改作业恢复操作的行为。该值可以是信号名称(例如SIGTSTP),也可以是命令路径(不能是 cresume,因为这会导致死锁)。默认是向所有作业进程发送 SIGCONT 信号。
为作业设置的所有环境变量也适用于命令操作。此外,还设置了额外的环境变量CB_JOBPGIDS 和 CB_JOBPIDS(有关这些变量的含义,请参阅 kill_action)。
默认的作业恢复操作是:发送SIGCONT。
run_window:#
允许队列中的作业运行的时间段。当窗口关闭时,AIP 会暂停队列中正在运行的作业,并停止从队列中调度作业。当窗口重新打开时,AIP 会恢复已暂停的作业并开始调度其他作业。可以在同一行上定义多个时间窗口,并用空格分隔。
时间窗口语法:[day:]hour[:minute]。注意 day=[0-6]:0 表示星期日,1 表示星期一,6 表示星期六。如果只有一个字段,则默认为 hour;如果有两个字段,则默认为 hour[:minute]。
例如:5:19:00-1:8:30 表示从星期五 19:00 到星期一 8:30。
默认情况下,运行窗口未定义,这意味着队列始终处于活动状态。
dispatch_window:#
此队列中的作业被调度的时间窗口。一旦调度完成,作业将不再受调度窗口的影响。调度窗口的规范语法与run_window 语法相同(参见上文)。默认情况下,dispatch_window 未定义,这意味着队列始终处于打开状态。
jobsizes:#
一系列规范表示作业大小,以作业槽位数量(csub -n) 以及队列可接受的 GPU 数量(可选)表示。提交的作业如果槽位请求数量与这些数量不同,则会被拒绝。格式为:job_slots/gpu_numbers。
示例:
jobsizes:
- 4/2 # 4个CPU和2个GPU
- 8/4 # 8个CPU和4个GPU
- 16 # 16个CPU和任意数量的GPU
- /8 #任意数量的CPU和8个GPU
缺省:没有定义,队列可以接受任意小于作业槽数和GPU数请求的作业。
interactive:#
指定队列如何接收交互式作业。如果未指定,则队列可以接收交互式和非交互式作业。 值“only”表示队列不接收非交互式作业。值“no”表示队列仅接收非交互式作业。
dedicated:#
如果值为“y”或“yes”,则该队列为专属队列,专供特定用户组使用。全部 CPU 小时数和 GPU 小时数都为用户计量,无论是否有任何作业正在运行。这不会影响任何调度行为。
gpu_enforce:#
如果设置为“yes”,则使用非调度 GPU 的作业进程将被调度程序强制终止。使用 GPU 的作业必须在提交作业时指定 -R rusage[gpu=x]。如果未设置,则默认为“no”,即使用非调度 GPU 的进程不会被调度程序终止。
备注
这个参数已经被cgroup取代,以后的版本中会去除。
swaplimit:#
此队列中作业的总虚拟内存限制(以KB 为单位)。此限制适用于整个作业,无论该作业包含多少个进程。
当作业超出其交换限制时采取的操作是按顺序发送SIGQUIT、SIGINT、SIGTERM 和 SIGKILL。
默认值:无限制。
terminate_when:#
配置队列在指定情况下调用kill_action 而不是 stop_action。
语法:terminate_when: WINDOW | LOAD
WINDOW 表示如果运行窗口关闭,则终止作业。LOAD 表示当负载超过暂停阈值时终止作业。使用 WINDOW 时,必须指定队列run_window。使用 LOAD 时,必须指定负载阈值。
thresholds:#
指定主机的调度阈值列表。阈值的格式为:“load_namesched_threshold/stop_threshold”。
load_name的值为“mem”、“swp”和“ut”(CPU 利用率在 0.0 - 1.0 范围内)。sched_threshold 和 stop_threshold 是浮点值。当负载达到“sched_threshold”时,调度程序将停止向主机调度更多作业。当负载达到“stop_threshold”时,调度程序将停止在主机上运行作业。
对于“mem”、“swp”和“tmp”,单位均为 MB。对于“mem”、“swp”和“tmp”,默认单位均为 MB。您可以在数值后添加字母“G”将单位更改为 MB,或添加字母“T”将单位更改为 TB。
负载索引名称与“cinfo”的输出相同:“r15s”、“r1m”、“r15m”、“ut”、“pg”、“io”、“up”、“it”、“tmp”、“swp”或“mem”。
该阈值支持多个时间窗口,每个值的格式为:“sched_threshold1/stop_threshold1 [weekday:]小时[:分钟]-[weekday:]小时[:分钟] sched_threshold2/stop_threshold2 [weekday:]小时[:分钟]-[weekday:]小时[:分钟]”。
或者格式可以是:“sched_threshold/stop_threshold default (weekday1-weekday2)hour:minute-hour:minute;(weekday3,weekday4,week5)hour:minute-hour:minute”
日期数字代表星期几,类似于crontab,即 0 或 7 代表星期日,1 代表星期一,等等。
示例1:
thresholds:
- "ut 0.7/0.9"
- "mem 250/200"
在上面的例子中,作业调度条件是“mem >= 250 && ut <= 0.7”,作业停止(挂起)条件是“mem < 200 || ut > 0.9”。
示例2:
- "mem 1G/0.5G 1:8:00-5:20:00 0.6G/0.3G 5:20:00-1:8:00"
上面的例子意味着阈值为周一早上8 点到周五晚上 8 点 1G/0.5G,周五晚上 8 点到周一早上 8 点 0.6G/0.3G。
示例3:
- "mem 100/50 default 50/30 (1-5)8:00-20:00,(0,6)6:00-22:00"
以上示例表示,工作日8:00 - 20:00 以及周末6:00 - 22:00 的阈值分别为 50MB/30MB。除此以外,阈值(默认值)为 100MB/50MB。
vgpu:#
指定是否限制作业在共享GPU上资源的使用。当作业请求小于1个GPU卡时,这个GPU卡会由多个作业共享。 共享时每个作业使用的GPU的算力以及GPU现存由GPU根据负载自行分配,必要时GPU会用分时的方法管理共享。
当vgpu参数配置成“y”时,调度器会使用第三方的CUDA插件限制作业使用的GPU算力和显存。如一个作业申请0.5个GPU, 则该作业被限制只能使用0.5个GPU卡的算力和0.5的GPU显存。
缺省:n,作业申请小于1个GPU时,作业使用的实际GPU资源由GPU自行决定。
limitconf#
它指定包含limits 部分的文件名。该文件应与 cb.yaml 位于同一目录中。目前仅支持“limit.yaml”文件名。
limits部分#
限制部分指定用户、项目、队列和主机或这些消费者的任意组合的作业槽、作业和资源消耗的限制。
指定消费者时,保留字“all”表示系统中的所有消费者单元。例如:queues 或 per_queue 中的“all”表示系统中配置的每个队列。
特殊字符’~’ 表示“除”。例如,“queues: ‘all ~low’”表示系统中配置的除“low”队列之外的所有队列。
所有值都必须用引号引起来,以避免YAML 解析程序因特殊字符“~”、“[”、“]”等崩溃。
参数影响的AIP daemon:cbsched
name:#
指定限制名称。此为必填字段。
admin:#
该限制的管理员用户名。管理员有权限可以通过命令aip l u 修改部分该limit的参数。参考 调度器动态配置参数 。
queues | per_queue:#
以空格分隔的队列列表。这是可选的。
hosts | per_host:#
以空格分隔的主机或主机组列表。这是可选的。
projects | per_project:#
以空格分隔的项目列表。这是可选的。
apps | per_app:#
按空格列出的应用程序名称。这是可选的。
users | per_user:#
系统中的用户列表。用户组名称也可用于表示整个用户组及其子组。如果消费者类型为“per_user”,则限制将应用于指定用户组中的每个用户。此项为可选。
以上的定义值允许用“all”代表所有,并用~name排除。如“all ~user1 ~user2”表示除了user1和user2外的所有用户。
slots:#
使用可选的时间窗口指定作业槽位的限制。仅接受单个数字,可选时间窗
例如:slots: ‘[2 1:08:00-5:18:00] [5 9:00-19:00]’
jobs:#
指定作业数量的限制。仅接受单个数字,可选时间窗
例如:jobs: ‘[2 1:08:00-5:18:00] [5 9:00-19:00]’
resources:#
指定资源限制。格式:[res,limit time_window] [res,limits time_window] …
例如:资源:“[mem,5000] [gpu,4 9:00-18:00]”
时间窗口的格式为:[day:]hour[:minute]-[day:]hour[:minute]。天数代表星期几,类似crontab,即0或7为星期日,1为星期一等。
例子1:不允许指定项目以外的作业使用priority和idle队列。
- name: limit1
projects: all ~p1 ~p2 ~p3
queues: priority idle
slots: 0
例子2:每个项目最多300个作业槽。
- name: projectlimit
per_project: all
slots: 300
apps部分#
apps部分控制应用的调度速率,避免每秒分发太多作业造成基础架构中某些资源的瓶颈,如FLEXlm许可证服务器、共享存储等。
参数影响的AIP daemon:cbsched
name:#
应用名。这个名字与作业提交( csub )时的-A或-app匹配。以这个应用名提交的作业收到job_rate的限制。
job_rate:#
每秒分发的最大作业数。调度器控制每秒内分发的最多以这个应用名提交的作业数。
例子:
apps:
- name: vcs
job_rate: 1000
以上的配置控制csub -A vcs 的作业每秒不超过1000个作业被调度和分发。
power部分#
power部分指定省电调度参数。此部分为可选。如果未指定(默认),则管理员通过 AIP 对主机执行的所有电源操作都将被禁用。
省电调度允许AIP 在主机空闲时间达到配置的时间段时自动执行关机命令以关闭主机,并在队列中有等待的作业且有省电主机时自动执行开机命令。
参数影响的AIP daemon:cbsched
idle_time:#
指定AIP触发关机操作以节省电量的最短主机空闲时间(以分钟为单位)。配置“电源”部分时,此字段为必填项。
默认情况下,该值为0,表示禁用省电功能。
pend_time:#
指定触发节能主机恢复电源的最短作业挂起时间(以分钟为单位)。默认值为10 分钟。
cycle_time:#
指定最大电源循环时间(以分钟为单位)。如果在此时间段后发生电源操作,并且主机电源状态未发生变化,则AIP 会认为电源操作失败,并在 cbsched.log.<master> 中记录一条消息。默认值为 5 分钟。
suspend_rate:#
触发省电操作时每分钟关闭的最大主机数量。默认值为60。
resume_rate:#
当作业处于等待状态且存在节能主机时,每分钟启动的最大主机数量。默认值为300。
exclude_hosts:#
排除在节能策略之外的主机列表。如果未指定,则排除主主机和主候选主机。
如果指定了此参数,请确保主服务器和主服务器候选服务器在列表中。
power_down_cmd:#
在主控主机上执行的用于关闭主机的命令。该命令以主管理员(即“administrators”部分中定义的第一个用户)的身份执行。命令语法为“command host1 host2 …”。
power_up_cmd:#
在主控主机上执行的启动主机的命令。该命令以主管理员(即“administrators”部分中定义的第一个用户)的身份执行。命令语法为“command host1 host2 …a”。
power_restart_cmd:#
在主控主机上执行的用于重启主机的命令。该命令以主管理员(即“administrators”部分中定义的第一个用户)的身份执行。命令语法为“command host1 host2 …”。此命令不用于省电调度。它是管理员手动重启主机的命令。
power_down_filter | power_up_filter:#
这两个参数用于实现电源关闭和电源开启策略。如果已配置,调度程序将以电源关闭和电源开启候选主机作为参数执行命令。该命令应返回主机列表(以空格分隔),以指示哪些主机可以执行与电源相关的电源操作。
例如,如果您使用“power”参数来实现 AIP 与其他调度程序之间的资源共享,这些命令可用于检查“power up”主机是否有来自其他调度程序的工作负载,而这些调度程序无法加入 AIP 集群。
例子:
开机过滤器:ssh k8smaster k8sidlenodes
在上面的例子中,该命令应该返回没有运行pod 并且可以加入 AIP 集群的节点数。
默认值:未定义,不执行任何检查。
power_sched_interval:#
节能调度外插程序调用的时间间隔(以秒为单位)。默认情况下,它会调用内置的节能调度程序。 如果存在可执行文件/opt/skyformai/sbin/power_ext_sched,则会以此间隔调用该文件来替换 内置的节能调度程序。
当调用“power_ext_sched”时,cbsched将 JSON 格式的数据通过管道传输到 power_ext_sched 程序,即 power_ext_sched 应该从其 stdin 读取 JSON 数据,以便外部调度程序做出决策并采取行动。
此JSON 的示例输出是 /opt/skyformai/sbin/power_ext_sched.input.json。
默认值:60 秒。
scale部分#
scale部分指定自动缩放调度参数。此部分是可选的。如果未指定(默认),则禁用自动缩放。
自动伸缩调度监控特定队列中的作业和动态主机空闲情况,根据配置触发自动伸缩动作。
参数影响的AIP daemon:cbsched
scale_pend_time:#
指定触发扩容操作前,作业在scale_queues中等待的最小分钟数。配置scale部分时,此字段为必填项。
有效值必须大于或等于1。调度程序每分钟检查一次作业等待时间。如果 cbsched 重新启动或重新配置,则计时器将被重置。
scale_idle_time:#
指定应通过scale_down_action删除动态添加的主机(横向扩展主机)的最小分钟数。
有效值必须大于或等于1。调度程序每分钟检查一次空闲主机。如果 cbsched 重新启动或重新配置,则计时器会重置。默认值为 5 分钟。
scale_max_slots:#
指定要扩展的最大作业槽数(这些可以通过自动扩展操作scale_up_action动态添加。
有效值必须等于或大于1。默认值为无限制。
scale_up_action:#
指定集群扩展(动态添加主机)的绝对路径。该可执行文件可以接受一个参数,该参数表示scale_queues中等待时间超过scale_pend_time的作业数量。
该操作由cbsched 以主集群管理员用户身份执行。
此参数仅在指定scale_pend_time且有效时有效。若不指定此参数,则不进行任何扩容操作。默认值为none,即自动扩容不采取任何操作。
scale_down_action:#
指定缩减集群规模(从中移除动态添加的主机)的绝对路径。该可执行文件可以接受一个或多个参数,这些参数是空闲时间超过scale_idle_time的主机名。
该操作由cbsched 以主集群管理员用户身份执行。
如果未指定此参数,则不会采取缩减操作。
scale_up_buffer:#
指定在扩展时需要预配的作业槽数量(除等待作业所需的数量外)。默认值为0。
scale_down_buffer:#
指定即使检测到空闲也要保持正常运行的动态预配主机数量。默认值为0。
scale_queues:#
指定自动扩缩策略应监控的一个或多个队列。多个队列名称应以空格分隔。
默认情况下,系统中的所有队列均受监控。
scale_sched_interval:#
指定调度器触发伸缩操作的分钟数,默认值为5 分钟。
例子#
见AIP安装完成后/opt/skyformai/etc/cb.yaml
单机集群简单配置:
cluster:
name: aip
administrators:
- cadmin
hosts:
- name: mgt
- name: default
maxslots: cpu
define_ncpus: threads
clients: yes
enterprise: no
general:
default_queue: medium
cgroup: acct
mailprog: ":"
queues:
- name: medium
priority: 3
- 配置文件
- 概要
- 内容
- 参数
- cluster部分
- additional_ports:
- administrators:
- allow_docker_run_change_user:
- allowed_dynamic_cidrs:
- define_ncpus:
- dynamic_host_timeout:
- enterprise:
- env_prefix:
- gpu_action_cmd:
- host_inactivity_limit:
- job_rusage_override:
- load_interval:
- localdir:
- logdir:
- lsf_compatible:
- master_list:
- mem_enforce_minfree:
- name:
- no_resreq_check:
- runaway_job_grace_period:
- shared_fs:
- shared_fs_interval:
- sshcontrol:
- resources:
- hosts:
- clients:
- general部分
- default_queues:
- memperiod:
- cgroup:
- rootcanrun:
- egroup_update_interval:
- idle_action_trigger_duration:
- gpu_share_spread:
- job_accept_interval:
- job_terminate_interval:
- sched_interval:
- jm_interval:
- elastic_job:
- estream_interval:
- estream_dir:
- dedicated_queue_include_unavail
- mailonmaster:
- mailprog:
- mailto:
- mailsize_limit:
- max_array_size:
- max_cbacct_num:
- max_cbdata_num:
- max_cbdata_job_num:
- max_jobclean:
- max_jobid:
- max_periodic_task_interval:
- max_stream_records:
- job_fail_close_host:
- preemptable_resources:
- preemption_suspend:
- user_view_alljobs:
- ugconf
- usergroup部分
- users部分
- hgconf
- hostgroups部分
- queueconf
- queues部分
- name:
- administrators:
- description:
- priority:
- maxslots:
- fairshare:
- preemption:
- ownership_hosts:
- resspec:
- users:
- hosts:
- hostmaxslots:
- usermaxslots:
- rerunonhostfail:
- rerunonexitcode:
- slotreservetime:
- cgroup:
- job_starter:
- job_idle:
- exclusive:
- nice:
- corelimit:
- filelimit:
- job_accept_interval:
- memlimit:
- processlimit:
- runlimit:
- pre_exec:
- post_exec:
- pre_post_exec_user:
- kill_action:
- stop_action:
- resume_action:
- run_window:
- dispatch_window:
- jobsizes:
- interactive:
- dedicated:
- gpu_enforce:
- swaplimit:
- terminate_when:
- thresholds:
- vgpu:
- limitconf
- limits部分
- apps部分
- power部分
- scale部分
- cluster部分
- 例子