前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Volcano设计原理全面解读,一看就懂!

Volcano设计原理全面解读,一看就懂!

作者头像
CNCF
发布2020-11-17 15:26:45
1.9K0
发布2020-11-17 15:26:45
举报
文章被收录于专栏:CNCFCNCF

Volcano是一个Kubernetes云原生的批量计算平台,也是CNCF的首个批量计算项目。

Volcano 方便AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。本篇文章将从Volcano的设计原则来带大家更进一步了解Volcano。

点击查看Volcano的架构解读:

Volcano架构解读:基于Kubernetes的云原生批量计算平台

先来了解一些基本概念:

Queue:

  • 队列,Cluster级别的资源对象,可声明资源配额,由多namespace共享,提供soft isolation

Job

  • 批量计算作业定义,支持定义作业所属队列,生命周期策略、所包含的任务模板以及持久卷等信息

PodGroup

  • 任务组,与queue绑定,占用队列的资源;与Volcano Job是1:1的关系,主要是供 schedule调度时使用的

Command

  • 支持外部干预运行中的作业,作用对象是Volcano Job

Volcano 设计原则与考虑

Volcano Job API 设计

设计目标:

1)提供统一接口,支持多种类型批 量计算任务,可以描述复杂类型 的作业

Job API的定位是一个bach-system,支持多种类型的作业,好比说大数据、AI、HPC,包含了多种作业类型。所以我们希望提供一个统一的接口去简化用户的使用,无论哪种类型、哪个场景的作业,都可以通过统一的接口运行起来,这是我们设计的时候一个很重要的考虑点。

2)灵活扩展性,满足定制化需求

其次就是灵活性,虽然说不同类型的作业,通过一个作业能够跑起来,但其实不同的场景,有不同定制化化需求,所以我们在设计这个Job API的时候,能提供定制化的需求,可以支持大部分的场景。

Volcano多任务模板

TaskSpec结构体里除包含最基本的信息外,还有一个policies, policy就定义了Task的生命周期。因为一个Job里会有多个 Task,就像下图描述的如何用Vocano运行一个Tensorflow的Job,Task里面就有多个角色,不同的角色可以定义它自己的 port template,这样的话我们就可以通过一个统一的Volcano Job支持不同的作业类型。

Volcano作业插件机制

1) 作业内任务互相访问的需求

2) 作业内任务索引

3) ssh免密登录

它其实有一些定制化的需求。好比说分布式训练这种作业,它在多个pod跑起来之后,它的pod和pod之间需要有网络互访,做数据同步。 对于像这种类型的需求,我们通过插件化的机制做成job plugin,让用户去通过这种方式去支撑它的场景。

在这里面我们看到我们定义的接口叫PluginInterface。PluginInterface的定义当一个作业在增删改查,或者Job在创建的时候,用户可以去实现这个函数,去做定制化的需求。以下三个作业的插件是我们默认已经支持的,简单配置就可以使用:

svc:

不同类型的任务之间互访

env:

任务索引,例如Tensorflow Worker index

ssh:

ssh秘钥对创建及挂载,主要供MPI作业使用

接下来我们看一下作业插件是怎么使用的。它使用起来其实非常简单,刚才说的那三个插件,只要在job spec里面的plugins字段,再加上插件的名字(如有需要还可以添加参数,本课示例未添加)就可以运行起来了。

下图是一个Volcano跑Tensorflow的Job。

除了刚才提到的统一job、定制化的需求,还有一个很重要的方面就是作业生命周期的管理。作业的状态以及pod状态是非常多的,上节课我们也提到大概有七八种pod的状态,这些pod在发生不同事件时,对于作业的状态都会有影响。由于不同的场景需求是不一样的,这就要求我们在支持生命周期管理时,提供丰富的用户可配置机制的生命周期管理。

除了作业生命周期管理之外,还有一个就是作业状态的设计。上一节课里面我们提到我们在Volcano里增加了很多Pod的状态。现在这里面提到的是作业的状态,作业的状态有8种,Controller 维护 State 子类的实例,State定义接口,封装与Controller 特定状态相关的行为,每个子类实现一个与Controller 特定状态相关的行为。

Scheduler架构

Scheduler的配置是可以动态去配置,动态加载的。

我们来看接口,下图这块定义的是action和plugin的接口,非常简单,你看在action里面它主要的一个函数就是把资源分配到队列,这一个函数,在这个action里面就可以定义资源分配的整个的逻辑。而plugin里面主要两个主要的函数就是on session open和on session close。

那我们要用起来的时候,我们应该怎么去配置?这里面讲的统一的配置策略,有几个重要的元素:Actions、Plugins、Option、Tiers。

End

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档