CNCF Volcano 核心架构和场景分析

云原生批量计算的发展历程

随着业务业务场景不断丰富,批量计算也由传统的HPC逐渐扩展到大数据、AI等多种场景,但各个领域独立发展,呈现出生态割裂、技术栈不兼容,资源利用率低等问题,严重影响批量计算的进一步发展

云原生技术以其丰富的生态和灵活的扩展性受到各个社区及厂商的倾迈,并以云原生技术为基础构建统一的批量计算系统,提升资源使用率

云原生批量计算面临的挑战

  1. 作业管理
  • Pod级别调度, 无法感知上层应用
  • 缺少作业概念、缺少完善的生命周期管理
  • 缺少任务依赖、作业依赖支持

2. 领域框架支持

  • 对领域计算框架支持不足,比如:MPI、Tensorflow、mxnet、pytorch等
  • 1:1 的operator部署,运维复杂

3. 调度和性能

  • 缺少Job为base的调度策略,比如:job ordering,job priority,job preemption,job fair-share
  • 缺少高级调度策略,比如:task-topology,IO-Awareness,backfil
  • 性能无法满足batch需求,比如:throughput,roundtrip

4. 资源共享,异构计算

  • 缺少作业队列概念
  • 缺少灵活的集群资源规划,提供多租户场景下资源公平使用以及高效复用
  • 缺少对异构资源的深度支持

云原生批量计算项目-Volcano

CNCF Volcano 总览

  1. 统一的作业管理

提供完善作业生命周期管理,统一支持几乎所有主流的计算框架,如pytorch,MPI,Horovod,Tensorflow,spark-operator,flink-operator等

2. 丰富的高阶调度策略

公平调度,任务拓扑调度、基于SLA调度、作业抢占、回填、弹性调度、混部等

3. 细粒度的资源管理

提供作业队列,队列资源预留、队列容量管理、多租户的动态资源共享

4. 性能优化和异构资源管理

调度性能优化,并结合Kubernetes提供扩展性、吞吐、网络、运行时的多项优化,异构硬件支持x86,Arm,GPU晟腾,昆仑等

CNCF Volcano关键进展

Volcano 架构和核心能力

Volcano 架构

  1. Volcano APIs

提供Job/JobFlow、Queue、PodGroup等核心概念,便于定义批量计算作业部署运行及资源分配需求

2. Volcano Scheduler

丰富的高阶调度策略:公平调度、任务拓扑调度、基于SLA调度、作业抢占、回填、弹性调度、混部等

插件化算法集成框架:支持用户通过不同action和plugin组合定制算法策略,满足不同场景需要等。

3. Volcano Controller

实现完整的作业生命周期管理、作业队列、队列资源预留、队列容量、多租户资源动态共享等核心能力

4. 节点插件

配合调度提供大规模在离线作业混部支持

多元算力支持,包括x86,Arm,GPU,晟腾,昆仑等

核心概念

  1. Job
  • 支持多Pod Template
  • 生命周期管理 / 错误处理

2. 租户/namespace / Resource Quota

  • 以namespace作为租户的映射
  • 以Resource Quota 定义租户namespace的资源限额

3. 资源共享

  • 使用队列来实现资源共享
  • 支持租户/资源池之间共享资源
  • 支持多种租户/资源池资源共享策略/算法

作业管理:Job

Volcano Job :

  • 统一类型接口,支持业界主流作业类型,如mpi,pytorch,tensorflow,mxnet 等
  • 细粒度作业生命周期管理
  • 易扩展的作业插件机制
    • Env
    • Svc
    • Ssh
    • Tensorflow
  • Coordinate with Scheduler
  • 提供作业依赖支持

资源共享:Queue

  1. 集群级别资源对象,与用户/namespace解耦
  2. 可用于租户/资源池之间共享资源
  3. 支持每个队列独立配置Policy,如FIFO,fair share,priority ,SLA等

动态资源共享

  1. 队列资源预留/队列容量
  2. 基于权重提供队列间资源共享

在下面中,Queue1中有6CPU资源,Queue2中没有分配,当把Job提交到Queue2的时候,会从Queue1中的部分资源中放入到Queue2中,同时如果Queue1中有任务在提交,会将原本属于Queue1的资源回归到Queue1中。

公平调度

Volcano 典型场景和案例

场景一:弹性调度

场景二:作业拓扑感知调度

场景三:CPU拓扑感知调度

场景四:为Spark提供批量调度

场景五:在离线作业混部

  1. 在线服务有峰谷,资源请求根据峰值设置
  2. 有些用户不知道其服务的资源使用情况,是否有请求过多的资源
  3. 高分配率,低利用率,(在线作业往往按照最高的峰值来分配资源),CPU平均利用率小于15%

一些关键技术

  1. qos-feature:操作系统级别的Qos支持
    1. qos/CPU快速抢占
    2. 具有优先级的Qos内存回收
    3. qos/NET和IO监控和隔离
  2. kubelet:更新/更改Qos模型,支持真实业务负载上报,资源超分、作业驱逐
  3. 调度器
    1. 多类型业务智能混合调度
    2. 基于时间的调度策略,实现资源分时复用

Volcano作为CNCF首个云原生批量计算项目,支持几乎所有的主流计算框架,提供丰富的高级调度策略及多元算力支持,可在人工智能、大数据、基因测序等海量数据计算和分析场景得到快速应用,弥补了Kubernetes批处理调度能力的空缺 ,并已构建起完善的上下游生态。项目目前已有450+位来自全球各地的贡献者和50+落地案例