云原生AI通过数据计算类任务的编排、管理,以及对各种异构计算资源的容器化统一调度和运维,显著提高GPU/NPU等异构计算集群的资源使用效率和AI工程交付速度。阿里云容器服务ACK以组件化,可拼装,可扩展,可定制的灵活方式,提供了云原生AI能力的产品支持。本文介绍ACK云原生AI套件的主要功能。下图展示了ACK云原生AI套件的系统架构。

K-AI-1
说明 云原生AI有两种用户角色:

异构资源效率优化

  • GPU共享调度和算力隔离:支持丰富的GPU设备分配策略。单Pod单GPU卡共享和隔离,常用于支持模型推理场景;单Pod多GPU卡共享和隔离,常用于支持分布式模型训练代码的开发;按GPU卡的Binpack和Spread分配策略,可以针对GPU卡的使用密度和出现坏卡时高可用性的平衡。
    • 丰富的共享策略:阿里云自研的GPU共享调度能力将多个模型推理应用运行在同一个GPU上,显著降低成本。
    • 隔离保稳定:通过阿里云自研cGPU方案,在无需修改应用容器的前提下,提供了GPU显存和算力的隔离。
  • GPU拓扑感知调度:通过Node节点获取异构计算资源的拓扑结构,调度器端基于节点的拓扑信息,完成调度决策,考虑包括NVLINK,PcleSwitch,QPI以及RDMA NIC,提供最佳的调度选择,实现最优的运行性能。
  • GPU资源的全方位监控:提供节点和应用视角的监控指标,设备(软硬件)异常自动检测和告警;支持独占GPU和共享GPU不同场景。

数据访问性能提升

在计算和存储分离的大背景驱动下,开源软件Fluid的目标是为AI与大数据云原生应用提供一层高效便捷的数据抽象,将数据从存储抽象出来,通过以Alluxio和JIndoFS为缓存引擎,以便达到以下目的:

  • 通过数据亲和性调度和分布式缓存引擎加速,实现数据和计算之间的融合,从而加速计算对数据的访问。
  • 将数据独立于存储进行管理,并且通过Kubernetes的命名空间进行资源隔离,实现数据的安全隔离。
  • 将来自不同存储的数据联合起来进行运算,从而有机会打破不同存储的差异性带来的数据孤岛效应。

AI任务调度

针对AI计算类任务的特性,提供了支持Gang Scheduling、Capacity Scheduling、Binpack等任务调度策略,提升集群的资源利用率

  • Gang Scheduling:作业的所有子任务都能满足资源需求才整体分配,否则不分配任务资源。避免由于资源死锁,导致大作业挤占小作业。
  • Capacity Scheduling:通过提供弹性配额的设置,确保用户的资源分配的基础上通过资源共享的方式来提升整体资源的利用率。
  • Binpack:作业优先集中分配在某个节点,当节点资源不足时,依次在下一节点集中分配,适合单机多卡训练任务,避免跨机数据传输。防止资源碎片。

异构资源弹性伸缩

通过智能的削峰填谷,避免不必要的云上资源消费;支持弹性模型训练和模型推理。

  • 弹性训练:支持容错和弹性调度的分布式深度学习,可以极大提升集群的总体利用率,同时显著减少用户提交作业之后等待作业启动的时间。
  • 弹性推理:结合阿里云丰富的弹性能力,包括停机不回收、弹性资源池、定时弹性、竞价实例弹性、Spotfleet模式及自动扩缩容AI推理任务。

集群任务、用户和资源的可观测性

提供任务、用户配额和集群资源的监控大盘,能有效帮助您合理评估投入产出。