进击的Kubernetes调度系统(三):支持批任务的Binpack Scheduling

本文探讨了Kubernetes中通过Binpack策略提高GPU利用率的问题,以解决资源碎片导致的浪费。介绍了Binpack的实现原理,包括构建打分函数和打分过程,并展示了在实际批任务调度中的应用和效果,旨在优化GPU资源分配。
摘要由CSDN通过智能技术生成

作者:

王庆璨:阿里云技术专家,专注于大规模集群资源管理和调度。Kubernetes社区成员,主要参与Kube-scheduler社区开发。目前负责阿里云容器服务ACK资源调度和云原生AI相关工作。

张凯:阿里云高级技术专家,从事容器服务ACK 和云原生AI解决方案的研发和客户支持。拥有10余年大规模深度学习平台,云计算,SOA等领域经验。

往期回顾:

进击的Kubernetes调度系统(一):Scheduling Framework

进击的Kubernetes调度系统(二):支持批任务的Coscheduling/Gang scheduling

前言

本系列的前两篇《进击的Kubernetes调度系统 (一):Scheduling Framework》 和进击的 Kubernetes 调度系统(二):支持批任务的 Coscheduling/Gang scheduling 分别介绍了Kubernetes Scheduling Framework和如何通过扩展Scheduling Framework实现Coscheduling/Gang scheduling调度策略。当我们的批任务作业在集群里边运行起来之后,随后要关注的就是资源的利用率。特别是对于GPU卡的价格昂贵,不希望有资源的浪费。本文将介绍在批任务的调度过程中如何通过Binpack的方式,减少资源碎片,提升GPU的利用率。

为什么需要Binpack功能?

Kubernetes默认开启的资源调度策略是LeastRequestedPriority,消耗的资源最少的节点会优先被调度,使得整体集群的资源使用在所有节点之间分配地相对均匀。但是这种调度策略往往也会在单个节点上产生较多资源碎片。

下面拿一个简单的例子来说明这种问题。如下图所示,资源在节点之间平均使用,所以每个节点使用3个GPU卡,则两个节点各剩余1GPU的资源。这是有申请2GPU的新作业,提交到调度器,则因为无法提供足够的资源,导致调度失败。


1587092661680-55bf016c-e041-47b8-8bc4-2b49db8f90ff.png

如上这种情况情况,每个节点都有1个GPU卡空闲,可是又无法被利用,导致资源GPU这种昂贵的资源被浪费。如果使用的资源调度策略是Binpack,优先将节点资源填满之后,再调度下一个节点,则上图所出现的资源碎片问题得到解决。申请2GPU的作业被正常调度到节点上,提升了集群的资源使用率。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值