高性能调度
CCE通过集成Volcano提供高性能计算能力。
Volcano是基于Kubernetes的批处理系统。Volcano提供了一个针对BigData和AI场景下,通用、可扩展、高性能、稳定的原生批量计算平台,方便AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等能力。
应用场景1:多类型作业混合部署
随着各行各业的发展,涌现出越来越多的领域框架来支持业务的发展,这些框架都在相应的业务领域有着不可替代的作用,例如Spark,Tensorflow,Flink等。在业务复杂性能不断增加的情况下,单一的领域框架很难应对现在复杂的业务场景,因此现在普遍使用多种框架达成业务目标。但随着各个领域框架集群的不断扩大,以及单个业务的波动性,各个子集群的资源浪费比较严重,越来越多的用户希望通过统一调度系统来解决资源共享的问题。
Volcano在Kubernetes之上抽象了一个批量计算的通用基础层,向下弥补Kubernetes调度能力的不足,向上提供灵活通用的Job抽象。Volcano通过提供多任务模板功能实现了利用Volcano Job描述多种作业类型(Tensorflow、Spark、MPI、PyTorch等),并通过Volcano统一调度系统实现多种作业混合部署,解决集群资源共享问题。
应用场景2:多队列场景调度优化
用户在使用集群资源的时候通常会涉及到资源隔离与资源共享,Kubernetes中没有队列的支持,所以它在多个用户或多个部门共享一个机器时无法做资源共享。但不管在HPC还是大数据领域中,通过队列进行资源共享都是基本的需求。
在通过队列做资源共享时,CCE提供了多种机制。可以为队列设置weight值,集群通过计算该队列weight值占所有weight总和的比例来给队列划分资源;另外也可以为队列设置资源的Capability值,来确定该队列能够使用的资源上限。
例如下图中,通过这两个队列去共享整个集群的资源,一个队列获得40%的资源,另一个队列获得60%的资源,这样可以把两个不同的队列映射到不同的部门或者是不同的项目中。并且在一个队列里如果有多余的空闲资源,可以把这些空闲资源分配给另外一个队列里面的作业去使用。
应用场景3:多种高级调度策略
当用户向Kubernetes申请容器所需的计算资源(如CPU、Memory、GPU等)时,调度器负责挑选出满足各项规格要求的节点来部署这些容器。通常,满足各项要求的节点并非唯一,且水位(节点已有负载)各不相同,不同的分配方式最终得到的分配率存在差异,因此,调度器的一项核心任务就是以最终资源利用率最优的目标从众多候选机器中挑出最合适的节点。
下图为Volcano scheduler调度流程,首先将API server中的Pod、PodGroup信息加载到scheduler cache中。Scheduler周期被称为session,每个scheduler周期会经历OpenSession,调用Action,CloseSession三个阶段。其中OpenSession阶段加载用户配置的scheduler plugin中实现的调度策略;调用Action阶段逐一调用配置的action以及在OpenSession阶段加载的调度策略;CloseSession为清理阶段。
Volcano scheduler通过插件方式提供了多种调度Action(例如enqueue,allocate,preempt,backfill)以及调度策略(例如gang,priority,drf,proportion,binpack等),用户可以根据实际业务需求进行配置。通过实现Scheduler提供的接口也可以方便灵活地进行定制化开发。
应用场景4:高精度资源调度
Volcano 在支持AI,大数据等作业的时候提供了高精度的资源调度策略,例如在深度学习场景下计算效率非常重要。以TensorFlow计算为例,配置“ps”和“worker”之间的亲和性,以及“ps”与“ps”之间的反亲和性,可使“ps”和“worker”尽量调度到同一台节点上,从而提升“ps”和“worker”之间进行网络和数据交互的效率,进而提升计算效率。然而Kubernetes默认调度器在调度Pod过程中,仅会检查Pod与现有集群下所有已经处于运行状态Pod的亲和性和反亲和性配置是否冲突或吻合,并不会考虑接下来可能会调度的Pod造成的影响。
Volcano提供的Task-topology算法是一种根据Job内task之间亲和性和反亲和性配置计算task优先级和Node优先级的算法。通过在Job内配置task之间的亲和性和反亲和性策略,并使用task-topology算法,可优先将具有亲和性配置的task调度到同一个节点上,将具有反亲和性配置的Pod调度到不同的节点上。同样是处理亲和性和反亲和性配置对Pod调度的影响,task-topology算法与Kubernetes默认调度器处理的不同点在于,task-topology将待调度的Pods作为一个整体进行亲和性和反亲和性考虑,在批量调度Pod时,考虑未调度Pod之间的亲和性和反亲和性影响,并通过优先级施加到Pod的调度进程中。
应用场景5:在线离线作业混合部署
当前很多业务有波峰和波谷,部署服务时,为了保证服务的性能和稳定性,通常会按照波峰时需要的资源申请,但是波峰的时间可能很短,这样在非波峰时段就有资源浪费。另外,由于在线作业SLA要求较高,为了保证服务的性能和可靠性,通常会申请大量的冗余资源,因此,会导致资源利用率很低、浪费比较严重。将这些申请而未使用的资源(即申请量与使用量的差值)利用起来,就是资源超卖。超卖资源适合部署离线作业,离线作业通常关注吞吐量,SLA要求不高,容忍一定的失败。在线作业和离线作业混合部署在Kubernetes集群中将有效的提升集群整体资源利用率。
目前Kubernetes的默认调度器是以Pod为单位进行调度的,不区分Pod中运行的业务类型。因此无法满足混部场景对资源分配的特殊要求。针对上述问题,Volcano实现了基于应用模型感知的智能调度算法,根据用户提交的作业类型,针对其应用模型对资源的诉求和整体应用负载的情况,优化调度方式,通过资源抢占,分时复用等机制减少集群资源的空闲比例。
价值
面向AI计算的容器服务,采用高性能GPU计算实例,并支持多容器共享GPU资源,在AI计算性能上比通用方案提升3~5倍以上,并大幅降低了AI计算的成本,同时帮助数据工程师在集群上轻松部署计算应用,您无需关心复杂的部署运维,专注核心业务,快速实现从0到1快速上线。
优势
CCE通过集成Volcano,在高性能计算、大数据、AI等领域有如下优势:
- 多种类型作业混合部署:支持AI、大数据、HPC作业类型混合部署。
- 多队列场景调度优化:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。
- 多种高级调度策略:支持gang-scheduling、公平调度、资源抢占、GPU拓扑等高级调度策略。
- 多任务模板:支持单一Job多任务模板定义,打破Kubernetes原生资源束缚,Volcano Job描述多种作业类型(Tensorflow、MPI、PyTorch等)。
- 作业扩展插件配置:在提交作业、创建Pod等多个阶段,Controller支持配置插件用来执行自定义的环境准备和清理的工作,比如常见的MPI作业,在提交前就需要配置SSH插件,用来完成Pod资源的SSH信息配置。
- 在线离线业务混部:支持集群内在离线作业混部以及节点CPU和内存资源超卖,提升集群整体资源利用率。
建议搭配使用
GPU加速云服务器 + 弹性负载均衡ELB + 对象存储服务OBS