【云驻共创】教你如何彻底摆脱Kubernetes集群资源抢占难题

Victue 发表于 2021/06/03 19:30:41 2021/06/03
【摘要】 企业进行与AI相关的业务时常因为构建AI不利而导致业务收益下降或者业务无法完成。启智章鱼项目(OPENI-OCTOPUS)是一个集群管理和资源调度系统,支持在GPU集群中运行AI任务作业(比如深度学习任务作业)。平台提供了一系列接口,能够支持主流的深度学习框架。基于Kubernetes开发资源调度平台,以镜像方式管理任务运行环境,一次配置随处可用。

一、背景介绍

企业在进行构建AI时经常遇到许多问题,例如模型不够好,不符合实际需要。模型太大,需要巨大的算力,然而算力又与时间和金钱挂钩。又或者是数据量不够,无法完成算法训练等。鹏城实验室的启智章鱼平台可以很好的为企业解决这一问题。

1.1 鹏城实验室

鹏城实验室是国家网络通信领域新兴科研机构,主要聚焦通信、网络和智能三个方向。从事战略性、前瞻性、基础性重大科学问题和关键核心技术研究。高端人才聚集,目前拥有31位院士、160多位国际会士、国家杰青等。与华为、国家超算深圳中心、中国电子、清华大学、北京大学、南方科技大学、香港中文大学等全国150余家院校和科研机构开展了深度合作。 

图片1.png

1.2 启智章鱼平台

启智章鱼(OPENI-OCTOPUS)是一个集群管理和资源调度系统,由鹏城实验室、北京大学、中国科学技术大学进行开发和维护。

主要拥有以下特征:

  • 完全开源:遵守Open-Intelligence许可
  • 利用Kubernetes部署、管理和调度
  • 支持在集群运行AI任务作业,支持GPUNPUFPGA,华为升腾芯片,寒武纪MLU等硬件
  • 适用于AI的高性能网络,支持IB网络
  • 提供监控分析工具,包括网络,平台和AI作业的监控分析
  • 支持主流的深度学习框架
  • 采用微服务结构

图片2.png


上图直观的展示了平台所包含的功能模块。

  • 下层部分为底层硬件适配,包括GPUNPUFPGA等都可接入平台。
  • 中间部分为启智章鱼平台核心内容,服务部分管理系统经API服务器集成PrometheusKubebox服务、模型Hub等功能工具,计算部分计算节点的功能包含AI作业监控、Kubebox客户端、模型客户端等功能工具。
  • 上层部分主要为服务功能的实现,包括数据引擎、模型仓库、异地互联等,其中异地互联可以使得异地的集群相互连接。

二、业务场景与挑战

启智章鱼平台主要是为了完成科研领域、交通、医疗、金融等场景下算法的训练、模型的开发、推理等任务。例如,智能交通的车辆跟踪、智慧医疗的医疗影像识别、智慧金融的量化算法开发等都可以使用本平台构建。

在三个层面对应解决三个问题:

  • 模型层 —— 模型孤岛
  • 数据层 —— 数据孤岛
  • 资源层 —— 算力孤岛

在模型层面:使用多态异构模型引擎,提供神经网络模型表示和异构模型转换集成。

在数据层面:使用多源异质数据引擎,提供多源异构数据融合和半自动数据标注。

在资源层面:使用AI分布式计算引擎,提供异构硬件统一表示和硬件任务适配调度。

图片3.png



业务场景及对应的挑战

  • 场景:面向的业务场景非常复杂,以面向实验室内外的科研AI任务为主,包括智慧交通、医疗、金融等领域的算法训练与推理等。多个不同领域的开发和推理都需要在启智章鱼平台实现。
  • 挑战:缺少一个高性能计算平台,满足复杂场景的业务诉求。
  • 场景:高端异构硬件资源优势,150P+级算力集群和10PB级高速存储。实现最大化利用资源。
  • 挑战:高效利用异构硬件资源,支持灵活调度策略,需解决资源抢占难题,避免关键任务资源饿死现象。实现高性能调度器。
  • 场景:支持快速和灵活部署,系统运行可靠稳定,方便外部团队使用。
  • 挑战:系统架构需可扩展,服务高可用

 

三、选择Volcano

为了有效地应对上述三大挑战,调研之后,对比多个方案:

  • 自研或者开源

在对比自研和开源后,发现开源不仅减少开发量,且开源项目能力可满足基本诉求。

  • 开源组件的抉择

Default scheduler

Yarn

Kube-batch

Volcano

研究发现,Default scheduler 对于批量处理任务不太友好。Yarn 基于Hadoop,但是平台已经不再使用HadoopKube-batch Volcano前身,所以最后选择了Volcano

图片4.jpg


  • Volcano的独特价值

完善的架构和生态,社区发展状态好。

支持自定义调度流程,灵活。

队列调度,Gang scheduling,适用不同类型的任务,模型开发,模型训练,模型推理,将其分为不同的任务队列进行调度,更好管理。

Binpack等插件,减少集群的资源使用碎片,提高资源利用率。

 

四、基Volcano二次开发

调研之后,发现Volcano对于部分场景仍不满足要求,需要对Volcano进行二次开发

4.1 二次开发 - 资源状态统计与管理

首先进行资源状态统计与管理的二次开发,这里资源指代的是用户提交任务后,生成的JobTask等任务资源。

需求

以一个例子说明为什么需要做资源状态统计与管理的二次开发。

在集成学习中,有一个结合模块,若干个个体学习器。结合模块根据每个个体学习器的输出最后综合输出一个结果。关键之处在于结合模块,一旦结果输出完成,任务将立即全部停止,无需等待其他个体学习器运行的结果。

图片5.png

也就是说,整个作业当作一个Job, 结合模块就是MainTask,其他个体学习器就是普通Task。只要MainTask运行成功,输出结果了,就立即退出,无视Task运行状态。

图片6.png

从该场景出发,面对不同的复杂业务场景,应该找到一个资源管理灵活的策略。

由此,得出三个开发需求

  • 关注JobTaskReplica三个层级状态
  • 资源的统计与回显
  • 自定义策略与状态管理

 

实现

在启智章鱼和Volcano与开发进行交互中,可以发现启智章鱼Volcano都会去监听Kubernetes关于状态的信息,只要用户提交一个任务之后,Volcano会主动监听和改变任务的状态,改变之后,Kubernetes会通知启智章鱼,处理状态信息。

核心部分在于Volcano如何改变Job状态:

  • 实现JobTaskReplica的三级别状态机。不但可以满足每个层级之间内部状态转移的条件实现方式,每个层级与每个层级的状态转移也可以实现,实现三个层级的状态转移使得资源状态统计与回显更加详细,Job生命周期管理拥有更高的细粒度。
  • 实现自定义EventPolicy。依赖于第一点三层层级状态机,每个层级的状态转移条件都由自己来触发,在触发中更加灵活,拥有更加灵活的Job生命周期管理用于支撑上层业务开发。
  • 实现生命周期回调钩子,例如计费功能是在job的开始与结束统计计算时长实现,支撑多样化业务场景需求。

 

图片7.png

4.2 二次开发 - Privilege Action

在任务进行中,经常存在以下问题:

  • 任务队列资源饿死现象,大作业一直等待,迟迟得不到运行
  • 紧急作业、关键作业不能等待,需要优先调度
  • 用户作业可能在线开发,不可随意终止等问题

Volcano已有能力:

  • 同队列中不同优先级Job的抢占,无法区分Job所来自的租户身份
  • Pod为单位进行驱逐
  • 立即抢占

 

需求

在启智章鱼平台上,Volcano已有能力并不能满足项目要求。存在用户实时编辑,但是人区被立即抢占,任务并未保存等情况。因此,需求如下:

  • 同队列中作业来自不同租户,不同租户拥有不同优先级和抢占权限
  • Job为单位进行驱逐。抢占的时候以Job为单位整个抢占,而不是以Pod为单位
  • 延时抢占,给予用户时间去保存和结束他的任务

 

实现

图片8.png

如图,左边是在调度器中实现的流程图、中间是Kubernetes服务,右边是启智章鱼核心服务。首先判断是否抢占,再判断资源是否满足,最后更新Job状态到Kubernetes服务中,将Job状态传递到启智章鱼Octopus中。启智章鱼Octopus可以决定是否启动定时器功能实现延时抢占。

具体实现延时抢占:

  • 同队列中作业来自不同租户,不同租户拥有不同优先级和抢占权限

为任务增加是否为抢占任务属性Preempt

抢占任务只抢占属于同个队列中优先级较低的任务

图片9.png

  • Job为单位进行驱逐

驱逐待选的Pod按照所属JobID排序,可减少受影响的Job数量

由调度器通知启智章鱼,在业务层对Job进行停止

  • 延时抢占

Job状态机增加PrivilegedWillEvicted状态

进入PrivilegedWillEvicted状态的Job不可被其他Job抢占

如果抢占或被抢占的Job状态发生变化,另一方的状态也要相应改变

图片10.png

 

五、收益

通过对Volcano的二次打开,主要有能力增强和性能优化两方面的进步。

能力增强

  • 满足分布式大规模训练任务的需求
  • 支持多种AI计算框架
  • 插件化调度器,支持自定义开发,适应复杂业务场景
  • 多队列调度,实现硬件资源的分组与组间动态资源分配

 

性能优化

  • 硬件资源利用率大幅提高,达到90%以上
  • 作业平均调度时延大幅降低,由使用Yarn调度器的平均任务等待时间60秒降到现在的10
  • 系统稳定增强,集群节点资源利用率平衡度好,减少了节点间因资源使用差异度引起的运维工作

 

体现在实际项目上,截至2021年4月份,启智章鱼数据具体为:

  • 管理120+个节点,总GPU卡数为1K张,GPU在超负荷情况下使用率可达90%以上
  • 各节点间资源利用率平衡性较好,差异度低于20%
  • 2019年上线以来,运行作业数为120k+

图片11.png

六、总结

基于Volcano的启智章鱼,已能满足绝大多数科研任务的需要


Volcano原生能力完美适配AI训练所需的基本功能


基于Volcano的二次开发,完善了复杂场景下多样化的调度需求


启智章鱼相比于传统高性能计算平台拥有明显的性能和功能优势

图片12.png


Volcano   !好使!

备注:本文整理自鹏城实验室启智章鱼:教你如何彻底摆脱Kubernetes集群资源抢占难题,点击回看

查看活动详情:https://bbs.huaweicloud.com/blogs/266530

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。