当我们手里有一个固定资源的集群时,需要做两件事:1. 资源管理,2. 成本效率管理;为了让进程跑在合适的机器我们需要任务调度器(深度学习任务跑在带GPU的物理机上),为了提高资源利用率(降本提效)则需要资源调度器(根据标签、算法进行调度)。
参考论文:The evolution of cluster scheduler architectures
如图1,是集群调度器架构的演进的5种分类,从中心化调度、两级调度、分布式调度到混合调度。这些调度器主要解决的问题是在同一个时刻(秒级/分钟级)选择最优的调度策略,匹配最优的资源并且把资源给到位。
无论是公司内基于Kubernetes/yarn等管理的集群,还是云上的弹性计算资源本质上都是一个大的固定集群,在某一时刻没被使用的资源也是需要向所有使用该集群的用户进行收费。只有提高集群整体的利用率才能让大家都降本提效,超卖不在本话题讨论内(本质上在蹭人家花钱没用的资源,具体节省的钱有没有回馈给用户仅取决于市场的竞争惨烈度)。
如图2,是一个业界常见的场景,资源的使用率随着时间进行周期变化,虽然一个周期内目标总资源使用量是1000,但是由于波峰是1500,所以最终总资源池为1500。
如图3,其实大家是希望可以达到削峰填谷的效果的,将波峰时间执行的作业移动到波谷执行,让总资源池降到目标总资源量,达到成本效率最高。
首先明确图2发生的原因不是技术引起的而是业务,2/8定律基本在各个场景都有,大家在处理同一类型的作业偏向于在某个周期固定的节点进行处理;例如大数据场景每天夜间都要做ETL把数据预加工好,第二天早上出报表或给其他下游任务使用。
虽然图3 的解法是大家都想做的,但是很难做,为什么呢?
那么我们用什么方法来达到图3的目标呢?
一种解法:把规则从自顶向下改为自底向上,让用户根据自己的利益进行投票。
基本要素:
上述基本要素中最核心的是可以收费,如果共享资源对于用户看起来都是免费的情况下,就不会有人主观原因花时间进行任务成本管理。其次就是要有足够多的低优先级可被杀、重跑,将这些负载迁移到波谷阶段。最后才是用户根据自己的诉求,根据任务标签进行精细化调度。
根据上述要素就会有以下几个场景:
上述解决方案其实大家日常就能见到,例如网约车、餐厅、机票等。资源有限情况下,服务提供商根据资源在不同时段的利用率进行价格波动,来达到收益最高;用户则是根据手里的现金进行投票来满足不同时段的需求。从简单模型上来说,是可以达到最优结果的,不过模型要是引入了其他变量就不好聊了,例如大数据价格歧视等。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。