【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

为什么 K8s 需要 Volcano?

  • 2019-11-20
  • 本文字数:2090 字

    阅读完需:约 7 分钟

为什么K8s需要Volcano?

Volcano 是基于 Kubernetes 的批处理系统,源自于华为云开源出来的。Volcano 方便 AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。


为什么 K8s 需要 Volcano

K8s 自带的的资源调度器,有一个明显的特点是:依次调度每个容器。但在 AI 训练或者大数据,这种必须多个容器同时配合执行的情况下,容器依次调度是无法满足需要的,因为这些计算任务包含的容器们想要的是,要么同时都成功,要么就都别执行。


比如,某个大数据应用需要跑 1 个 Driver 容器+10 个 Executor 容器(对应 AI 训练的话,就是 1 个 PS 容器+10 个 Worker 容器)。如果容器是一个一个的调度,假设在启动最后一个 executor 容器(对应 AI 是 Worker 容器)时,由于资源不足而调度失败无法启动,那么前面的 9 个 executor 容器虽然运行着,其实也是浪费的。


AI 训练也是一样的道理,必须所有的 Worker 同时运行,才能进行训练,坏一个,其他的容器就等于白跑。而 GPU 被容器霸占着却不能开始计算,成本是非常高的。


所以当你的(1)总体资源需求<集群资源的时候,普通的 K8s 自带调度器可以跑,没问题。但是当(2)总体资源需求>集群资源的时候,K8s 自带调度器会因为随机依次调度容器,使得部分容器无法调度,从而导致业务占着资源又不能开始计算,死锁着浪费资源。那么场景(1)和场景(2)谁说常态呢?不用说,肯定是(2)了,谁能大方到一直让集群空着呢对吧。这种情况就必须需要增强型的 K8s 资源调度器 Volcano 了。

资源调度领域

当用户向 K8s 申请容器所需的计算资源(如 CPU、Memory、GPU 等)时,调度器负责挑选出满足各项规格要求的节点来部署这些容器。通常,满足各项要求的节点并非唯一,且水位(节点已有负载)各不相同,不同的分配方式最终得到的分配率存在差异,因此,调度器的一项核心任务就是以最终资源利用率最优的目标从众多候选机器中挑出最合适的节点。


除了资源维度上的要求,实际调度中还有容灾和干扰隔离上的考虑:比如同一应用的容器不允许全部部署到同一台节点上,很多应用会要求每台节点上只允许有一个实例。另外,某些应用组件之间还存在互斥关系(如资源争抢),严重影响应用的性能,因此也不允许它们被部署到同一台节点上。这些限制条件的引入,使得想新写一款调度器,能替代原生 K8s 调度器并不容易。

算法分析

Volcano 首先要解决的问题就是 Gang Scheduling 的问题,即一组容器要么都成功,要么都别调度。这是最基本的用来解决资源死锁的问题,可以很好提高集群资源利用率(在高业务负载时)。


除此之外,它还提供了多种调度算法,例如 priority 优先级,DRF(dominant resource fairness), binpack 等。 我们今天就是挖一挖 Volcano 内部的各种调度算法实现。


3.1 Gang Scheduling


这种调度算法,首先是有’组’的概念,调度结果成功与否,只关注整一’组’容器。


具体算法是,先遍历各个容器组(代码里面称为 Job),然后模拟调度这一组容器中的每个容器(代码里面称为 Task)。最后判断这一组容器可调度容器数是否大于最小能接受底限,可以的话就真的往节点调度(代码里面称为 Bind 节点)。



3.2 DRF(dominant resource fairness)


这种调度算法,主要是 Yarn 和 Mesos 都有,而 K8s 没有,需要补齐。概括而言,DRF 意为:“谁要的资源少,谁的优先级高”。这样可以满足更多的作业,不会因为一个胖业务,饿死大批小业务。注意:这个算法选的也是容器组(比如一次 AI 训练,或一次大数据计算)。



3.3 binpack


这种调度算法,目标很简单:尽量先把已有节点填满(尽量不往空白节点投)。具体实现上,binpack 就是给各个可以投递的节点打分:“假如放在当前节点后,谁更满,谁的分数就高”。因为这样就能尽量将应用负载靠拢至部分节点,非常有利于 K8s 集群节点的自动扩缩容功能。注意:这个算法是针对单个容器的。



3.4 proportion(Queue 队列)


Queue 功能是 Yarn 调度器有的功能,K8s 需要补齐。不过我对 Queue 这个取名有些不太满意。因为它实际是用来控制集群总资源分配比例的。比如某厂有 2 个团队,共享一个计算资源池。管理员设置:A 团队最多使用总集群的 60%,B 团队最多使用总集群的 40%。投递的任务量,超过该团队的可用资源怎么办?那就排队等呗,所以特性取名 Queue。



3.5 最终权重


由于 Volcano 的调度算法插件实在太多,每个插件的决策又有可能互相干扰。所以为了在各个算法间做权衡,又给插件设置了权重,这样可以控制每种调度算法插件的影响因子。比如 NodeOrder 算法里面,就是在优选阶段(注:K8s 调度,分预选阶段和优选阶段。预选就是排除不符合的节点。优选就是给所有符合的节点打分)给节点打分的算法。各个算法有自己的权重可以配置。

Volcano

Volcano 项目的前身是 Kube-Batch,一个带着想解决 K8s 不支持 Gang Scheduling 问题初衷的项目。后来由于 AI 和大数据等业务领域也开始对 K8s 有述求,团队成员希望有一种喷薄而出的感觉,所以带上具体场景实践经验,重新将项目命名为 Volcano–火山,希望能够推动 K8s 在各个场景下向火山一样热烈绽放。


项目地址


添加小助手微信,加入【容器魔方】技术社群。



公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-11-20 19:133221

评论

发布
暂无评论
发现更多内容

大前端工程师进阶之路,Node全栈为前端带来更多可能

孙叫兽

大前端 全栈 Node

Three.js杂记(二)——绘制点、线、面

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

Three.js杂记(三)—— 物体运动

空城机

JavaScript 大前端 WebGL 3D可视化 three.js

一气之下开发了个群聊机器人

诡途

Python 办公自动化 群聊机器人

飞桨刷新分子性质预测榜单,助力AI药物研发

百度大脑

AI 药物研发 百度飞桨

想当程序员,如何判断自己是否适合当前端程序员?

孙叫兽

程序员 大前端 引航计划

Three.Js杂记(一)——起步

空城机

大前端 WebGL 3D可视化 three.js

爬虫入门经典(七) | 一文带你爬取淘宝电场

不温卜火

python 爬虫

Git教程 - Git 命令与操作

码语者

git DevOps

寻找被遗忘的勇气(二十二)

Changing Lin

3月日更

初来乍到,请多关照

空城机

杂记

如何巧妙的去除数组中的空格?

程序媛观澜

c++ 字符串

波卡生态DeFi系统开发方案

薇電13242772558

区块链 defi

它终于来了!

Python研究所

Python

爬虫入门经典(十八) | 滑动验证码识别

不温卜火

python 爬虫

2021年ONNX开发者大会即将召开

百度大脑

百度飞桨 ONNX

手把手教学基于深度学习的遥感影像倾斜框算法训练与分析

cv君

人工智能 深度学习 AI 智能 视觉

【实战问题】-- 缓存穿透,缓存击穿和缓存雪崩的区别以及解决方案

秦怀杂货店

Java redis 缓存 架构 分布式

飞桨中国行首站重庆 解读产业 智造

百度大脑

百度 飞桨 中关村智酷

数据分析实战项目-蛋壳公寓投诉分析

诡途

Python 数据分析 蛋壳公寓

2.4 Go语言从入门到精通:条件和循环

xcbeyond

3月日更 Go 语言

助力香港成为全球寿命最长的城市,我们如何看医管局的数字化转型?

有只小耳朵

数字化转型 人才培养

爬虫入门经典(十二) | 一文带你快速爬取豆瓣电影

不温卜火

python 爬虫

C 语言性能优化:循环展开

1

编程 程序员 性能优化 C语言 循环展开

爬虫入门经典(十五) | 邪恶想法之爬取百度妹子图

不温卜火

python 爬虫

一文看懂特权访问管理(PAM)

龙归科技

云计算 云存储

实时 摔倒识别 /运动分析/打架等异常行为识别/控制手势识别等所有行为识别全家桶 原理 + 代码 + 数据+ 模型 开源!

cv君

AI 目标检测 视频理解 引航计划

首席AI架构师进阶之旅开启!第4期60位AICA学员硬核开学

百度大脑

AI 百度飞桨

爬虫入门经典(四) | 如何爬取豆瓣电影Top250

不温卜火

python 爬虫

前置机器学习(一):数学符号及希腊字母

caiyongji

机器学习

python 爬虫之selenium可视化爬虫

诡途

Python 爬虫 selenium

为什么K8s需要Volcano?_架构_华为云原生团队_InfoQ精选文章