文件名
版本:10.25.0
概述
cb.yaml 文件是
SkyForm AI 服务的强制配置。它至少定义了集群结构和队列结构。每个部分都是必需的。 该文件采用严格的 YAML 格式。包含特殊字符的文本字符串需要用单引号引起来(例如
'xxx')。
内容
cluster部分
general部分
usergroups部分
users部分
hostgroups部分
queues部分
limits部分
power部分
scale部分
cluster部分
集群部分包含控制
cbls、cbexe、cbsched 和 cbjm 的集群配置参数。
additional_ports:
默认情况下,AIP
使用随机端口跨主机复制文件(crcp 和 csub -f)。每次并发复制都需要在源主机和目标主机上使用唯一的端口。如果主服务器和计算机服务器之间有防火墙,则需要开放防火墙上的一系列端口才能使
AIP 正常工作。
AIP
服务需要 16322 - 16328 之间的端口。此参数指定的其他端口用于文件复制和
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
默认情况下,当在
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
如果此参数的值为“y”或“yes”,则作业输出将遵循 LSF 样式,包含作业执行和资源使用情况信息。默认情况下,此参数的值为“n”,即作业输出不包含额外数据。
默认值:no
参数影响的AIP
daemon:cbjm
一个整数,表示load_interval的倍数。如果计算节点在 (host_inactivity_limit
+ host_number * master_inactivity_limit)
* load_interval 秒后仍未收到上一主节点的消息,它将尝试成为主节点,其中
host_number 是主机在 hosts 部分中的位置。主节点的 host_number 为 0。
默认值:2
参数影响的AIP
daemon:cbls
指定以空格('
')分隔的主候选主机名。
默认值:如果未指定此参数,则 hosts 部分中的前 3 个主机为 Master 候选。如果主机总数小于 3,则默认所有主机均为 Master 候选。
参数影响的AIP
daemon:cbls, cbsched, cbjm
指定此参数时,仅当作业执行主机的可用内存低于此值(以 MB 为单位)时才会强制执行作业内存限制。
默认值:未指定。默认情况下,无论主机可用内存有多少,都会强制执行作业内存限制。
例如:mem_enforce_minfree: 100。使用
csub -M 提交的作业带有内存限制,或者作业具有队列级别内存限制。仅当作业首次执行主机的可用内存小于
100MB 时,才会强制执行作业内存限制。否则,即使作业的内存使用量大于内存限制,作业仍会继续运行。
参数影响的AIP
daemon:cbsched, cbjm
定义集群的名称。如果缺失,则默认集群名称为“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
shared_fs:
默认情况下,AIP
会在主服务器上调用 Linux 的“df”命令来监控已挂载文件系统的可用空间。有时,它无法识别共享文件系统,例如
GPFS。在这种情况下,管理员可以配置此参数来告诉 AIP 需要监控哪个文件系统。
例如:shared_fs: gpfs1
可以通过指定以空格
(' ') 分隔的文件系统字符串来监控多个文件系统。指定此参数将覆盖 AIP 识别共享文件系统(文件系统名称包含列字符 (:))的默认规则。
默认:识别包含列字符(:)的共享文件系统名称(如NFS)。
参数影响的AIP
daemon:cbls
shared_fs_interval:
默认情况下,系统每
5 秒检查一次共享文件系统。这可能会增加系统负载。要降低负载,请将
shared_fs_interval 指定为更大的秒数。
默认值:5秒
参数影响的AIP
daemon:cbls
当使用
--sshcontrol 设置主机(host-setup)时,会安装一个 pam 模块来控制用户何时可以 ssh 到主机。
当此参数的值为“yes”时,用户可以在
1.
主机属于专用队列,并且用户可以使用专用队列,或者
2.
用户在主机上有一个作业,并且该用户从运行该作业的主机 SSH 连接到运行同一作业的另一台主机(即并行作业的主机之间的
SSH)。不允许从同一主机发起 SSH 连接。
所有其他
ssh 登录均被阻止。
如果该参数的值为“none”,则ssh控制被禁用。
如果此参数的值为“job”,则用户可以在以下情况下 ssh 到主机:
1.
主机属于专用队列,并且用户可以使用专用队列,或者
2.
无论 ssh 来自哪里,用户在主机上都有作业。
在所有情况下,除非被系统阻止,否则始终允许 root 和
AIP 管理员使用 ssh。
默认值:无(禁用
ssh 控制)
参数影响的AIP
daemon:cbsched
resources:
资源子节是可选的。它定义了要附加到集群中每个主机的标签类型资源列表。定义完成后,用户可以通过在资源规范中指定资源标签来运行作业。调度程序将选择带有关联标签的主机作为作业执行候选。
每个资源标签都具有以下属性(变量):
name:
标签的名称。这是必填项。
description:
标签的描述。这是可选的。
type:
类型的值应为“tag”。这是强制性的。
资源部分中的变量是
SkyForm AI 资源传感器 RESS 中使用的资源变量的子集。更多详细信息,请参阅ress (8)。
例子:
- name: linux7
description: CentOS 7
type: tag
参数影响的AIP
daemon:cbls
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 (8)。
默认值:server
cpubind:
当指定“maxslots: cpu”时,是否启用 CPU 绑定(取值“y”或“n”)。如果未指定,则当 maxslots 等于主机 CPU 核心数时启用 CPU 绑定。否则,禁用
CPU 绑定。当 maxlots 不等于主机 CPU 核心数时,此参数不会覆盖行为。
默认:遵循“默认”主机。如果未指定,则使用“默认”主机。
define_ncpus:
它采用“cores”或“threads”的值。这将覆盖集群范围的参数“define_ncpus”。
tags:
与主机关联的标签资源列表。此项为可选。
例子:
tags:
-
linux7
-
compute
默认值:未指定
thresholds:
主机的调度阈值列表。阈值格式为:“load_name sched_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:
- "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。
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
当用户在作业运行中未指定队列名称时,指定默认队列名称。此项为必填项。
当用户提交作业而未明确指定队列时,AIP 会将作业放入此列表中第一个满足作业规范的队列中,但要遵守其他限制,例如请求的主机、队列状态、允许的用户等。
例如:default_queues: medium foruser1 foruser2
memperiod:
指定已完成作业的信息在调度程序内存中保留的时间段(以秒为单位)。此项为可选。
将已完成的作业保留一小时的示例:memperiod:8000
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”,以防止作业进程逃逸。
Linux
内核 2.x(例如 CentOS 6)或更低版本不支持 Cgroup。
rootcanrun:
默认情况下,root
用户可以运行作业。要禁用此功能,请定义“rootcanrun:
no”。
默认值:yes
idle_action_trigger_duration:
指定队列级别作业空闲操作运行的时间间隔(以分钟为单位)。此参数与队列部分中的“job_idle”一起使用。
例子:
idle_action_trigger_duration: 2
gpu_share_spread:
默认情况下,当多个作业共享一个 GPU 时,即使用 -R "need[gpu=0.x]" 参数提交作业时,调度程序会将作业打包到具有多个
GPU 的主机上尽可能少的 GPU 上。通过将此参数指定为“yes”,调度程序会在安装了多个 GPU 的主机上分散 GPU 分配比例(即作业所需的 GPU 少于一个)。例如,如果第一个作业计划使用
0.5 个 GPU #0,则第二个作业将被计划使用
#GPU1,即使第二个作业仅需要 0.5 个 GPU。
默认值:no
job_accept_interval:
将一个作业调度到主机后,在将第二个作业调度到同一主机之前等待的调度轮次数。默认情况下,主机在每个作业调度间隔内可以接受多个作业。由于主机上可运行的作业总数没有限制,因此可能会一次性将大量作业调度到主机。
如果该值设置为非零正整数,则意味着主机在调度一个作业后等待(job_accept_interval * sched_interval)秒,然后再调度第二个作业。
在队列级别(队列部分)设置的job_accept_interval将覆盖此部分中设置的job_accept_interval的值。
job_terminate_interval:
指定终止作业时发送
SIGINT、SIGTERM 和 SIGKILL 信号的时间间隔(以秒为单位)。作业终止时,系统会依次向该作业发送 SIGINT、SIGTERM
和 SIGKILL 信号,并在发送这些信号之间设置一个 job_terminate_interval 的休眠时间。这允许作业在必要时进行清理。
sched_interval:
调度器启动一个调度周期的时间间隔(以秒为单位)。在大型或繁忙的环境中,此值应该更长,例如 15。
jm_interval:
作业管理器每次更新作业状态和作业资源使用情况信息的时间间隔(以秒为单位)。在大型环境中,此数字应该更长,例如 30。
默认值:3(秒)
通过提供“y”值来指定是否支持弹性作业。
默认值:no
指定调度程序
CBSCHED 更新扩展流文件的间隔(以秒为单位)。这些文件将写入主服务器上的
/tmp/.aipestream 目录。它们包含最新的作业状态、队列状态、用户状态和主机状态。
默认值:30(秒)
值“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
默认:“:”,即不发送电子邮件
当用户的作业完成或出现错误时,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 之间。
max_cbacct_num:
work/data目录中的最大 cb.acct
文件数量。
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
文件中继续进行。
max_jobid:
指定作业
ID 限制。作业 ID 限制是 AIP 分配的最大作业 ID,也是系统中作业的最大数量。
指定从
999,999 到 2,147,483,646 的任意整数(出于实际目的,指定小于该值的任何
9 位整数)。
max_stream_records:
在写入由
max_stream_records 定义的记录数后,AIP
调度程序会写入一个 STREAM_END 事件,关闭文件
cb.stream.0,将其重命名为 cb.stream.1,并创建一个新的 cb.stream.0 来继续写入作业事件,之前的 cb.stream.1 将被覆盖。
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”或未设置(默认),则作业抢占会终止被抢占的作业,然后将其重新放入队列。
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:
指定群组管理用户。该用户可以查看群组成员的作业信息。每个群组只能指定一名管理员。
fairshare:
指定公平分享定义。
例如:fairshare:'[default,1]'
默认值:无公平分享
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部分指定主机组,可用于队列和限制部分。一个主机可以属于多个主机组。主机组可以嵌套,即一个组可以是另一个组的成员。
参数影响的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:
maxslots:
队列中正在运行的作业的最大作业槽位数量。此项为可选。如果未定义,则没有运行作业槽位限制。
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 (1) -R 选项。与 csub -R 选项相同,多个部分之间以空格分隔。不支持多个资源需求(例如“4{mem>10}
5{rusage[gpu=1]}”)。
users:
指定哪些用户/用户组可以使用该队列。此项为可选。
hosts:
指定队列中的作业可以运行在哪些主机/主机组上。此项为可选。
usermaxslots:
指定每个用户的运行作业槽位限制。这是可选的。
rerunonhostfail:
如果值为“y”,则当作业执行主机发生故障时,作业将自动重新运行。
默认值:n
rerunonexitcode:
指定一组作业退出代码,以空格分隔,用于自动重新运行作业。特殊值“!0”表示当作业的退出代码非零时,作业将自动重新运行。这通常用于服务作业。
slotreservetime:
启用队列中待处理的并行作业可以预留的处理器和内存预留时间(以分钟为单位)。在此时间之后,如果作业尚未积累足够的作业槽来启动,则会释放其所有预留的作业槽。
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) 手册页。
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)。
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
interactive:
指定队列如何接收交互式作业。如果未指定,则队列可以接收交互式和非交互式作业。值“only”表示队列不接收非交互式作业。值“no”表示队列仅接收非交互式作业。
dedicated:
如果值为“y”或“yes”,则该队列为专属队列,专供特定用户组使用。全部 CPU 小时数和 GPU 小时数都为用户计量,无论是否有任何作业正在运行。这不会影响任何调度行为。
gpu_enforce:
如果设置为“yes”,则使用非调度 GPU 的作业进程将被调度程序强制终止。使用 GPU 的作业必须在提交作业时指定 -R rusage[gpu=x]。如果未设置,则默认为“no”,即使用非调度 GPU 的进程不会被调度程序终止。
swaplimit:
此队列中作业的总虚拟内存限制(以 KB 为单位)。此限制适用于整个作业,无论该作业包含多少个进程。
当作业超出其交换限制时采取的操作是按顺序发送 SIGQUIT、SIGINT、SIGTERM 和 SIGKILL。
terminate_when:
配置队列在指定情况下调用
kill_action 而不是 stop_action。
语法:terminate_when: WINDOW | LOAD
WINDOW
表示如果运行窗口关闭,则终止作业。LOAD 表示当负载超过暂停阈值时终止作业。使用
WINDOW 时,必须指定队列run_window。使用 LOAD 时,必须指定负载阈值。
thresholds:
指定主机的调度阈值列表。阈值的格式为:“load_name sched_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。
limitconf
它指定包含
limits 部分的文件名。该文件应与 cb.yaml 位于同一目录中。目前仅支持“limit.yaml”文件名。
limits部分
限制部分指定用户、项目、队列和主机或这些消费者的任意组合的作业槽、作业和资源消耗的限制。
指定消费者时,保留字“all”表示系统中的所有消费者单元。例如:queues 或 per_queue 中的“all”表示系统中配置的每个队列。
特殊字符
'~' 表示“除”。例如,“queues: 'all ~low'”表示系统中配置的除“low”队列之外的所有队列。
所有值都必须用引号引起来,以避免 YAML 解析程序因特殊字符“~”、“[”、“]”等崩溃。
参数影响的AIP daemon:cbsched
name:
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
power部分
power部分指定省电调度参数。此部分为可选。如果未指定(默认),则管理员通过 AIP 对主机执行的所有电源操作都将被禁用。
省电调度允许
AIP 在主机空闲时间达到配置的时间段时自动执行关机命令以关闭主机,并在队列中有待处理的作业且有省电主机时自动执行开机命令。
参数影响的AIP daemon:cbsched
idle_time:
指定
AIP 触发关机操作以节省电量的最短主机空闲时间(以分钟为单位)。配置“电源”部分时,此字段为必填项。
pend_time:
指定触发节能主机恢复电源的最短作业挂起时间(以分钟为单位)。默认值为 10 分钟。
cycle_time:
指定最大电源循环时间(以分钟为单位)。如果在此时间段后发生电源操作,并且主机电源状态未发生变化,则 AIP 会认为电源操作失败,并在
cbsched.log.<master> 中记录一条消息。默认值为
5 分钟。
suspend_rate:
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动态添加。
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 分钟。