配置#

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集群的配置有以下特点:

  1. 用CPU逻辑核。缺省AIP使用CPU物理核调度作业,定义define_cpus: threads:每个调度单元的CPU核对应与一个CPU逻辑核。

  2. 不使用核绑定。缺省AIP的配置中,每台主机的maxslots与CPU核数相同(maxslots: cpu),这样每个主机都启用作业的 CPU核绑定。需要定义cpubind: no来禁用作业CPU核绑定,这样一些多线程的EDA应用可以获得足够的CPU资源。

  3. 操作系统系统打开交换区(swap),这个可以用 chinfo 来查看,确保主机上的maxswap有值。打开swap是Linux 内的配置,AIP只是自动检测。关于如何配置Linux的swap,请搜索互联网。

  4. 很多EDA应用需要用大内存,为了防止内存过载,在队列或相应的主机中设置调度负载阈值,当内存低于一定值的时候停止 调度作业。

  5. LSF兼容性:参数lsf_compatible: yes,这是确保作业的输出最后提供与LSF兼容的输出结果,一些EDA应用会以此判断。

  6. 一些EDA应用会运行命令lsid来判断是否是LSF环境,生成/opt/skyformai/etc/product文件,里面放置一行”LSF 10.1”, 这样AIP的lsid命令输出的第一行就会显示”LSF 10.1…”。

  7. 一些企业使用脚本管理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的配置有以下考虑:

  1. 使用CPU物理核调度作业。AIP缺省用物理核调度。

  2. 允许CPU绑定,以达到最佳性能。

  3. 图形作业使用共享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提供用量统计

典型的超算中心和智算中心集群配置#

超算和智算中心确保资源分配和资源使用控制。计量和计费为关键。配置有以下考虑:

  1. 使用CPU物理核调度作业。AIP缺省用物理核调度。

  2. 允许CPU绑定,以达到最佳性能。

  3. 利用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提供用量统计