vivo AI计算平台的K8s分级配额管理实践

2018 年底,vivo ai 研究院为了解决统一高性能训练环境、大规模分布式训练、计算资源的高效利用调度等痛点,着手建设 ai 计算平台。经过四年多的持续迭代,平台建设和落地取得了很大进展,成为 vivo ai 领域的核心基础平台。平台从当初服务深度学习训练为主,到现在演进成包含 vtraining、vserving、vcontainer 三大模块,对外提供模型训练、模型推理和容器化能力的基础设施。平台的容器集群有数千个节点,拥有超过数百 pflops 的 gpu 算力。集群里同时运行着数千个训练任务和数百个在线服务。本文是 vivo ai 计算平台实战 系列文章之一,主要分享了平台在资源配额管理方面的实践。
背   景
k8s 提供了原生的 resourcequota 资源配额管理功能,基于命名空间进行配额管理,简单易用。但是随着平台资源使用场景变得越来越复杂,例如多层级业务组织配额、针对具体 cpu 核和 gpu 卡的型号配额、资源使用时长配额等,resourcequota 变得难以应对,平台面临业务资源争抢、配额管理成本增加、定位问题效率变低等问题。
本文主要介绍平台在 k8s 集群资源配额管理过程中遇到的问题,以及如何实现符合需求的配额管理组件:bizgroupresourcequota —— 业务组资源配额(简称 bizrq),用于支撑平台对复杂资源使用场景的配额管控。
resourcequota 资源配额管理遇到的问题
在使用 resourcequota 做资源配额管理时,有以下 4 个问题比较突出:
1、无法满足有层级的业务组织架构的资源配额管理
resourcequota 不能很好地应用于树状的业务组织架构场景,因为命名空间是扁平的,在实际场景中,我们希望将资源配额由父业务组到子业务组进行逐级下发分配。
2、以 pod 对象的粒度限额可能导致只有部分 pod 创建成功
resourcequota 是以 pod 对象的粒度来进行资源限额的,正常情况下在线服务或离线任务的部署,例如 deployment、argo rollout、tfjob 等,都需要批量创建 pod,可能会造成一部分 pod 由于额度不足而创建失败的情形,导致部署无法完成甚至失败,我们希望要么全部 pod 都创建成功,要么直接拒绝部署并提示资源额度不足,提升部署体验。
3、无法针对具体 cpu 核和 gpu 卡的型号进行配额管理
resourcequota 管理配额的资源粒度太粗,无法针对具体 cpu 核和 gpu 卡的型号进行配额管理,在实际场景中,不同的 cpu、gpu 型号的性能、成本差异很大,需要分开进行限额。例如我们会将 cpu 机器划分为 a1、a2、a3、a4 等机型,gpu 机器也有 t4、v100、a30、a100 等机型,他们的性能和成本都是有差异的。
4、无法限制资源使用时长
resourcequota 仅能限制当前时刻资源的已使用额度不能超过配额,但是并不能限制对资源的使用时长。在某些离线的深度模型训练场景,业务对 cpu、gpu 资源争抢比较激烈,某些业务组希望能按 cpu 核时或 gpu 卡时的方式,给团队成员发放资源配额,比如每人每周发放 1000 gpu 卡时,表示可以用 10 张卡跑 100 小时,也可用 20 张卡跑 50 小时,以此类推。
bizgroupresourcequota 分级配额管理方案
针对 resourcequota 配额管理所面临的 4 个问题,我们设计了 bizgroupresourcequota 配额管理 —— 业务组资源配额管理方案,后文简称为 bizrq。接下来,我们介绍一下 bizrq 方案。
我们通过 k8s crd(custom resource define)来自定义 bizrq 资源对象(如下图 bizrq 配额示例),从而定义 bizrq 的实现方案:
如上图配额示例所示,下面分别解释一下 bizrq 配额方案的特点:
① bizrq name
bizrq name 在 cluster scope 全局唯一,bizrq 配额对象是集群范围的,不跟命名空间相关联。在实际业务场景中,bizrq name 可以跟业务组 id 对应起来,便于实现基于树状的业务组织架构的配额管理。
② 父 bizrq name
父 bizrq name 表示当前 bizrq 的父级业务组的 bizrq 配额对象名称,假如父 bizrq name 值设置了空字符串,则表示当前 bizrq 是 root 节点。当创建非 root 的 bizrq 配额对象时,子 bizrq 的资源配额要从父 bizrq 的剩余额度中申请,并需要满足相关约束条件才能创建成功,后面也会介绍实现原理。这样就可以按常见的业务组织架构来管理配额,构成一颗“bizrq 树”:
③ 默认配额示例
默认配额示例跟 resourcequota 的资源额度配置和限额效果是一致的,bizrq 借鉴了 resourcequota 的实现,保持了一致的配置风格和使用体验。
④ cpu核型号配额示例
bizrq 支持将 cpu 核配额限制到具体型号,具体型号资源的已使用额度,也会累加到前缀相同的通用资源配额的已使用额度里,它们是可以结合使用的,如果都配置了则限额会同时生效。这样即保留了原生 resourcequota 的限额功能,又新增了不同型号资源的限额。
举例说明,比如将 limits.cpu 配额设置为 10 核,limits.cpu.a4 配额设置为 4 核,它们一开始已使用额度都是 0 核,当我们的部署对象申请了 4 核的 a4 后,那么 limits.cpu 和 limits.cpu.a4 的已使用额度都会累加上这 4 核,因为 bizrq 会判断 limits.cpu 是 limits.cpu.a4 的前缀资源,属于通用资源类型,所以要一并计算。另外,此时业务组不能再申请 a4 型号的 cpu 资源了,因为 limits.cpu.a4 的剩余额度为 0,不过 limits.cpu 剩余额度还有 6 核,所以还可以申请非 a4 型号的 cpu 资源。
那么我们能否将 limits.cpu 配额设置为 10 核,将 limits.cpu.a4 配额设置为 100 核呢(limits.cpu informer 的映射;
· clients:封装了对象的增删改查操作接口,执行查询操作时,底层会通过 cache 查询,执行变更类操作时,底层会访问 apiserver;
· indexer:可以通过 indexer 给 cache 加索引提升本地查询效率,例如实现 bizrq 功能时,可以通过建立父子关系索引,方便通过父查找所有子 bizrq;
· controller:controller 的脚手架,提供脚手架让业务层只需要关注感兴趣的事件(任务生产),及实现 reconcile 方法(任务消费),以便对 crd 定义的对象进行状态调和;
· webhook server:webhook server 的脚手架,业务层只需要实现 handler 接口,以便对拦截的请求做处理。
code-generator
实现了 bizrq 组件之后,可以通过 code-generator 工具生成 bizrq 的 informer、lister、clientset 等客户端代码,以便其他应用进行集成:
· client-gen:生成 crd 对象的标准操作方法:get、list、create、update、patch、delete、deletecollection、watch 等;
· informer-gen: 生成监听 crd 对象相关事件的 informer;
· lister-gen: 生成缓存层只读的 get、list 方法。
落地情况及后续规划
目前 bizrq 分级配额管理方案已经在平台的在线业务场景全面落地,我们基于 bizrq 组件,对在线业务的 argo rollout 部署对象进行拦截和额度校验,结合在线业务场景中的“项目 - 服务 - 流水线”等层级的配额管理需求,实现了分级配额管理界面,让用户可以自行管理各层级的资源配额,从而解决业务资源争抢、减轻了平台资源管理压力、提高了相关问题的定位和解决效率。
后续我们将持续完善 bizrq 组件的功能,例如:
·以插件式的方式支持更多种类对象的拦截和额度校验(例如离线训练任务 tfjob、有状态部署对象 statefulset 等),从而使 bizrq 分级配额管理组件能落地到更多的离在线业务场景中;
·完善自动扩缩容(hpa)场景下的额度校验。目前我们是通过分析用户 hpa 配置的最大副本数是否会导致超额,来判断用户配置的值是否合理,后续可以给 bizrq 增加一个 validating admission webhook,通过拦截 scale 对象的方式来进行额度校验,从而让校验逻辑更加健壮、完整。
另外,我们也会结合实际的业务场景,完善上层功能的使用体验。例如优化资源额度的迁入迁出、借用流程;完善资源碎片分析、给业务推荐更加合理的部署资源套餐等能力,提升用户资源配额管理的体验和效率。


美国联邦航空管理局提出了一种超声速飞机噪声的认证标准
解读48V轻度混合动力用途
培养人工智能进化的几个阶段
华为Mate20Pro体验报告 到底怎么样
漏电断路器推不上去是什么问题
vivo AI计算平台的K8s分级配额管理实践
智能镜子显示器现已成为智能家居理想生活入口之选
HTC取消3.5mm耳机孔后再通过官网送出转接器
为什么国产CMOS销量占全球的50%左右营收却只有10%
为何要实现太阳能逆变器的多样性
应用于工业消费市场的低功耗MEMS传感器的介绍
Facebook可能会希望回到它的根源
利用云存储的数据中心存储管理方案
配电柜操作流程
华为P30Pro开箱照曝光 包装盒上经典徕卡标识亮眼
东软集团在智能驾驶上的布局,似乎并非一时之想
为什么博卡、美管加、美自这些美业系统大牛们都上线了小程序?
摩托车后挡泥板三维扫描改装设计3D建模逆向工程服务
Microsoft开源了零冗余优化器版本2(ZeRO-2)
一种新型的中红外超紧凑型由石墨烯超表面组成的光调制器