配置#
SkyForm AIP系统的配置文件都是YAML格式,一般存放在/opt/skyformai/etc (环境变量$CB_ENVDIR) 目录中。
调度器配置cb.yaml#
SkyForm AIP安装后形成一个缺省的cb.yaml文件,这个文件是所有集群主机共享的,所以一般放在localtop/etc里(如:/opt/skyformai/etc)。cb.yaml具有以下的结构。
本文列出cb.yaml基本的配置参数,详细参数参考参考文档 cb.yaml 。
集群定义#
类名:cluster
Cluster定义集群主机成员、管理员、集群参数等信息:
集群管理员(必填):administrators,定义至少一个管理员用户。第一个用户为主管理员,AIP安装的目录结构中work/data的owner必须是该用户。例子:
administrators: - cadmin - root
标签资源(可选项):resources
标签(必填):name
描述(可选项):description
类别:type(值必须是tag)
主机(必填):host
主机名(必填):name,大机群中主机名顺序数字结尾的,如node0001,node0002,…,node0100,可以用一行定义多个主机名:node[0001-0100]
最大作业槽数(可选项):maxslots,若为数字(如”4”), 则定义主机上的最多槽数,若为字串”cpu”,则为主机上CPU超线程数总和,缺省则为无限制。若每个主机不填,可以定义主机名为default的主机,通配maxslots,所有没有定义maxslots的主机缺省都会使用该值作为最大作业槽数。
主机具有的标签资源(可选):tags
主机类型(可选):attr,可以选择server(缺省)即计算服务器,client即固定客户端。
允许任意客户机连接(缺省:不在cb.yaml里定义的主机不能与AIP服务连接):clients: yes
警告
若集群网络是开放的,clients: yes有安全隐患,会允许任意联网的主机连接。
调度单元CPU核数(可选):define_ncpus,可取的值为:
cores: 每个调度单元的CPU核对应于一个物理核 (缺省)。
threads:每个调度单元的CPU核对应与一个超线程(hyperthread)逻辑核,一般一个物理核为两个逻辑核。
企业版:enterprise,可取的值为yes或no。如果值为yes,则必须有合法的授权key文件才可以正常工作,否则用户不能提交作业。
ssh访问控制:sshcontrol(可选):当安装AIP选择使用ssh控制(host-setup –sshcontrol)后的进一步控制。可取的值为:
none:取消ssh访问控制
job: 用户可以从任意地方ssh到有作业运行的主机上
缺省:用户不能ssh。只有同一作业的主机间可以互相ssh,这个功能允许MPI作业使用ssh分发和控制子任务
队列定义#
类名:queues
队列是作业的承载体。作业提交个AIP时必须指定一个队列,或用缺省的队列。
队列可以定义多个,每个队列的参数为:
队列名(必填):name
优先级(必填):priority值为1-100, 数值越大,优先级越高
队列作业槽配额(可选,缺省为无限制):maxslots
队列可用主机(可选,缺省可用集群所有主机):hosts。如:hosts: “node0001 node0002” 用空格隔开的多个主机名。企业版AIP这里也可以用主机组名。
可用队列的用户(可选,缺省为所有用户可用):users。如:users: a1。企业版AIP这里也可以用用户组名。
等待中的大并行作业预留小作业结束后的作业槽时间(可选,缺省为不预留),单位:分钟:slotreservetime。 这个功能对于有大的并行作业的进群很重要。否则空出来的作业槽会被队列中的小作业所占,大作业得到作业槽的机会很小。
作业运行时长限制(可选,缺省为无限):runlimit,单位:分钟。超过运行时长的作业会被自动杀掉。
主机挂后作业自动重新调度(可选,缺省为不重新调度):rerunonhostfail: yes
作业以某些退出码退出后重调度(可选,缺省为不重新调度):rerunonexitcode: 1 3 5,这个例子是当作业退出码为1、3、5作业自动重新调度运行。
公平分享调度算法(企业版功能):fairshare: ‘[default,1]’
抢占(企业版功能),定义可被抢占作业的低优先级队列名,如果没有资源,本队列里的等待作业可以抢占低优先级队列中运行作业的资源:preemption: low
通用调度参数#
类名:general
缺省队列名(不可缺省):default_queue,其值必须是上面所定义的其中一个队列的值
调度器在内存里保存结束作业信息的时间:memperiod。缺省为一个小时
用Linux cgroup约束作业所用资源:cgroup,可选的参数为:
“acct”: 调度器用cgroup跟踪作业进程,确保计量准确性。
“cpu”:调度器根据主机的maxslots计算作业任务可用CPU的份额,如maxslots为8,则一个任务至少可用1/8主机里CPU的总和。
“gpu”: AIP企业版功能。支持提交作业时使用need[gpu=xx]申请GPU的作业内约束只能使用所分配的GPU。
禁止root用户运行作业。rootcanrun: no
缺省:root用户可与普通用户一样运行作业。
多GPU卡共享调度策略:gpu_share_spread,当一台主机上的多个GPU卡使用共享模式时,即每个GPU卡被多个作业共享,该参数值为”yes”表示调度作业尽量分散到各个卡上,实现负载平衡。缺省取值为”no”,表示调度作业占用尽量少的GPU卡。
企业版的功能。详情参考文档 cb.yaml。
用户组定义#
企业版的功能。
类名:usergroups - 组名:name: 名字
成员:members: 以空格隔开的用户名
组管理员:administrator: 组管理员用户名。组管理员可以管理组内成员的作业。
组最大作业槽数:maxslots: 全组最多可用的CPU核数
每个组员最大作业槽数:usermaxslots: 每个组员最多可用的CPU核数
组最大作业数:maxjobs: 全组所有可运行作业的最大数
组最大GPU卡数:maxgpus:全组所有运行作业可用的GPU卡数总和
主机组定义#
企业版的功能。
类名:hostgroups - 组名:name: 名字
成员:members: 以空格隔开的集群内配置的主机名
配额限制#
企业版的功能。定义各个维度的配额限制。
类名:limits - 配额名:name: 名字
配额用于队列名:queues(配额用于所有列出的队列) 或 per_queue(配额用于每个列出的队列):多个以空格隔开的队列名
配额用于主机名:hosts(配额用于所有列出的主机) 或 per_host(配额用于每个列出的主机):多个以空格隔开的主机名
配额用于项目名:projects(配额用于所有列出的项目) 或 per_project(配额用于每个列出的项目):多个以空格隔开的项目名
配额用于用户名:users(配额用于所有列出的用户) 或 per_user(配额用于每个列出的用户):多个以空格隔开的用户名
配额用于主机名:apps(配额用于所有列出的应用) 或 per_app(配额用于每个列出的应用):多个以空格隔开的应用名
配额定义: - slots:最大CPU核数
jobs:最多运行作业数
resources:资源定义,例子:[gpu,4] 最多4个GPU卡
计量计费配置cbcrond.yaml#
计量输出类名:usage
enabled: true或者false,是否输出计量数据,计量数据存放在/opt/skyformai/work/usages
outputperiod: 输出间隔分钟,一般为15,即每15分钟一次
其他参数详见/opt/skyformai/etc/cbcrond.yaml cbcrond.yaml 里的例子。
典型的EDA负载集群配置#
电子设计自动化(EDA)的负载一般为运行时间数分钟到数小时的作业,一般作业量都较大,几千到几百万不等。 单个作业一般在单台主机上跑,有些需要大内存。
EDA集群的配置有以下特点:
用CPU逻辑核。缺省AIP使用CPU物理核调度作业,定义define_cpus: threads:每个调度单元的CPU核对应与一个CPU逻辑核。
不使用核绑定。缺省AIP的配置中,每台主机的maxslots与CPU核数相同(maxslots: cpu),这样每个主机都启用作业的 CPU核绑定。需要定义cpubind: no来禁用作业CPU核绑定,这样一些多线程的EDA应用可以获得足够的CPU资源。
操作系统系统打开交换区(swap),这个可以用 chinfo 来查看,确保主机上的maxswap有值。打开swap是Linux 内的配置,AIP只是自动检测。关于如何配置Linux的swap,请搜索互联网。
很多EDA应用需要用大内存,为了防止内存过载,在队列或相应的主机中设置调度负载阈值,当内存低于一定值的时候停止 调度作业。
LSF兼容性:参数lsf_compatible: yes,这是确保作业的输出最后提供与LSF兼容的输出结果,一些EDA应用会以此判断。
一些EDA应用会运行命令lsid来判断是否是LSF环境,生成/opt/skyformai/etc/product文件,里面放置一行”LSF 10.1”, 这样AIP的lsid命令输出的第一行就会显示”LSF 10.1…”。
一些企业使用脚本管理EDA工作流,提交作业后循环调用bjobs命令查询作业状态。这对调度器产生一定的压力,影响调度性能。 启用jservice,使bjobs命令从jservice获得作业状态,而不直接与调度器打交道,配置/opt/skyformai/etc/jservice.yaml, 具体例子见下。
cb.yaml:
cluster:
name: aip
administrator:
- cadmin
resources:
- name: linux6
type: tag
- name: linux7
type: tag
define_cpus: threads # 用CPU逻辑核
enterprise: yes
clients: yes
lsf_compatible: yes
hosts:
- name: mgt01
maxslots: 0 # 主管理主机不运行作业
- name: comp01
tags:
- linux6
thresholds:
- "mem: 1G/0.7G" # 内存小于1GB时停止接受新的作业,小于0.7G时暂停上面运行的作业
- name: comp02
tags:
- linux7
thresholds:
- "mem: 2G/1G" # 内存小于2GB时停止接受新的作业,小于1G时暂停上面运行的作业
- name: default # 所有主机的通用参数设置
maxslots: cpu
cpubind: no # 不用CPU核绑定
queues:
- name: high
priority: 10
- name: medium
priority: 3
general:
default_queue: medium
mailprog: ":" # 作业结束后不发邮件
cgroup: acct # 利用Linux cgroup跟踪作业进程,确保杀掉作业时没有进程遗漏
典型的CAE(工程设计仿真)、HPC集群的配置#
HPC应用一般为MPI作业,单个作业需要跨机运行。同时对于CAD图形应用,需要有GPU提供图形加速。
HPC的配置有以下考虑:
使用CPU物理核调度作业。AIP缺省用物理核调度。
允许CPU绑定,以达到最佳性能。
图形作业使用共享GPU时,在多GPU的主机上实现多GPU间的负载均衡。
cb.yaml:
cluster:
name: aip
administrator:
- cadmin
define_cpus: cores # 用CPU物理核
enterprise: yes
clients: yes
hosts:
- name: mgt01
maxslots: 0 #主管理主机不运行作业
- name: comp01
- name: comp02
- name: default # 所有主机的通用参数设置
maxslots: cpu
cpubind: yes # 启用CPU核绑定
queues:
- name: high
priority: 10
memlimit: percore # 作业内存限制按核平均分配
- name: medium
priority: 3
memlimit: percore # 作业内存限制按核平均分配
general:
default_queue: medium
gpu_share_spread: yes # 每台主机上GPU负载均衡的调度
mailprog: ":" # 作业结束后不发邮件
cgroup: acct # 利用Linux cgroup跟踪作业进程,确保杀掉作业时没有进程遗漏
jservice.yaml:
jservice_enabled: no # 禁用jservice,作业状态查询由调度器提供服务
cbcrond_enabled: yes # 启动cbcrond提供用量统计
典型的超算中心和智算中心集群配置#
超算和智算中心确保资源分配和资源使用控制。计量和计费为关键。配置有以下考虑:
使用CPU物理核调度作业。AIP缺省用物理核调度。
允许CPU绑定,以达到最佳性能。
利用Linux cgroup控制GPU的使用
cb.yaml:
cluster:
name: aip
administrator:
- cadmin
define_cpus: cores # 用CPU物理核
enterprise: yes
clients: no # 禁用浮动客户端
hosts:
- name: mgt01
maxslots: 0 #主管理主机不运行作业
- name: comp01
- name: comp02
- name: login
attr: client # 登录节点,配置成客户端
- name: default # 所有主机的通用参数设置
maxslots: cpu
cpubind: yes # 启用CPU核绑定
queues:
- name: high
priority: 10
memlimit: percore # 作业内存限制按核平均分配
- name: medium
priority: 3
memlimit: percore # 作业内存限制按核平均分配
general:
default_queue: medium
gpu_share_spread: yes # 每台主机上GPU负载均衡的调度
mailprog: ":" # 作业结束后不发邮件
cgroup: acct gpu # 利用Linux cgroup跟踪作业进程,确保杀掉作业时没有进程遗漏,并控制GPU的使用
jservice.yaml:
jservice_enabled: no # 禁用jservice,作业状态查询由调度器提供服务
cbcrond_enabled: yes # 启动cbcrond提供用量统计