本文介绍弹性资源调度、AI任务调度、异构资源调度和任务队列调度,帮助用户提升集群的资源利用率和作业运行效率。

弹性调度

ACK为不同弹性资源提供了混合调度的能力。

功能描述参考文档
弹性调度阿里云提供了不同种类的弹性资源,如ECS和ECI,以及不同的付费类型如包年包月、按量付费和抢占实例等。

弹性调度提供差异化调度ECS和ECI资源的能力,支持自定义弹性资源优先级调度策略。在应用发布或扩容过程中,按照自定义资源策略,设置应用实例Pod被调度到不同类型节点资源的顺序。同时在缩容过程中按照原调度顺序逆序缩容。

例如在扩容过程中,优先使用已有资源池中的ECS资源,当ECS资源分配完之后,再使用ECI资源。当应用缩容时,可以优先缩容ECI节点,在提升效率的同时降低您的使用成本。

任务调度

ACK为批量计算的任务提供了Gang scheduling和Capacity Scheduling调度能力。

功能描述参考文档
Gang schedulingAll-or-Nothing作业要求所有的任务在同一时间被调度,如果只是部分任务启动的话,启动的任务将持续等待剩余的任务被调度。在极端情况下,所有作业都处于挂起状态,从而导致死锁。

为了解决这个问题,阿里云提供Gang Scheduling功能,保障所有相关联的进程能够同时启动,防止因部分进程的异常而导致整个关联进程组的阻塞的问题。

使用Gang scheduling
Capacity Scheduling当集群中有多个用户时,通过Kubernetes原生的ResourceQuota方式进行固定资源分配,因为不同的用户使用资源的周期和方式不同,会造成集群的整体资源利用率较低。

ACK借鉴Yarn Capacity Scheduling的设计思路,基于Scheduling Framework的扩展机制,在调度侧通过引入弹性配额组,实现Capacity Scheduling功能,在确保用户资源分配的基础上,通过资源共享的方式来提升集群的整体资源利用率。

使用Capacity Scheduling

异构资源调度

ACK为CPU、GPU等异构资源提供了GPU共享调度、GPU/CPU拓扑感知调度等能力。ACK调度GPU使用的节点标签信息,请参见ACK调度GPU使用的节点标签说明

功能描述参考文档
共享GPU调度GPU共享调度可以降低使用GPU的经济成本,保障程序运行的稳定性。
ACK Pro版集群支持以下GPU设备分配策略:
  • 单Pod单GPU卡共享和隔离,常用于支持模型推理场景。
  • 单Pod多GPU卡共享和隔离,常用于支持分布式模型训练代码的开发。
  • 按GPU卡的Binpack和Spread分配策略,常用于提升GPU卡利用率和GPU高可用的场景。
共享GPU调度专业版
GPU/CPU拓扑感知调度调度器基于节点异构资源的拓扑信息,如GPU卡之间的NVLink、PcleSwitch等通信方式、CPU的NUMA拓扑结构等,在集群维度进行最佳的调度选择,为工作负载提供更好的性能。
FPGA调度在进行FPGA计算时,通过Kubernetes集群统一管理FPGA设备。根据应用的需求,把资源调度到具有FPGA设备的节点上。利用阿里云Kubernetes的FPGA节点标签进行调度

任务队列调度

ACK为AI/ML工作负载和批处理工作负载提供自定义的任务队列调度能力。详细信息,请参见使用任务队列ack-kube-queue