44 | Kubernetes GPU管理与Device Plugin机制
张磊
该思维导图由 AI 生成,仅供参考
你好,我是张磊。今天我和你分享的主题是:Kubernetes GPU 管理与 Device Plugin 机制。
2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术界蔓延到了工业界,所谓的 AI 元年,就此拉开帷幕。
当然,机器学习或者说人工智能,并不是什么新鲜的概念。而这次热潮的背后,云计算服务的普及与成熟,以及算力的巨大提升,其实正是将人工智能从象牙塔带到工业界的一个重要推手。
而与之相对应的,从 2016 年开始,Kubernetes 社区就不断收到来自不同渠道的大量诉求,希望能够在 Kubernetes 集群上运行 TensorFlow 等机器学习框架所创建的训练(Training)和服务(Serving)任务。而这些诉求中,除了前面我为你讲解过的 Job、Operator 等离线作业管理需要用到的编排概念之外,还有一个亟待实现的功能,就是对 GPU 等硬件加速设备管理的支持。
不过, 正如同 TensorFlow 之于 Google 的战略意义一样,GPU 支持对于 Kubernetes 项目来说,其实也有着超过技术本身的考虑。所以,尽管在硬件加速器这个领域里,Kubernetes 上游有着不少来自 NVIDIA 和 Intel 等芯片厂商的工程师,但这个特性本身,却从一开始就是以 Google Cloud 的需求为主导来推进的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Kubernetes GPU管理与Device Plugin机制 Kubernetes社区面临着在集群中运行机器学习框架的需求,尤其是对GPU等硬件加速设备管理的迫切需求。本文详细介绍了Kubernetes的GPU支持机制和Device Plugin的实现方式。Kubernetes利用Extended Resource字段传递GPU信息,并通过调度器计算可用资源量。为了管理硬件加速设备,Kubernetes引入了Device Plugin机制,通过gRPC连接kubelet,定期向其汇报节点上的GPU列表,并将GPU数量以Extended Resource的方式传递给API Server。调度器根据缓存中的GPU数量进行Pod与Node的绑定,而kubelet则负责为容器分配GPU。目前,Kubernetes社区已经实现了许多硬件插件,如NVIDIA GPU等,为Kubernetes提供了丰富的硬件支持。 然而,文章也指出了Device Plugin的局限性,如无法处理异构设备和复杂硬件属性的情况,以及API的可扩展性不足。此外,文章还提出了对当前Device Plugin的改进和完善的思考。作者呼吁读者结合自身需求,探讨对Device Plugin的改进方向,以及对当前设计是否足够满足需求的看法。 总的来说,本文深入介绍了Kubernetes的GPU管理和Device Plugin机制,同时也指出了其存在的局限性和改进空间,为读者提供了对Kubernetes硬件支持机制的全面了解和思考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》,新⼈⾸单¥68
《深入剖析 Kubernetes》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(22)
- 最新
- 精选
- Eric单块GPU资源都不能共享,还得自己fork一份device plugin维护虚拟化的GPU。 社区有时候办事真的不利索
作者回复: 我已经吐槽的很委婉了
2018-12-05234 - hlzhu1983张老师,问一下现在k8s关于GPU资源调度粒度是否能像CPU调度粒度那么细?现在还只能按照1块GPU卡来分配GPU资源吗?
作者回复: 很粗粒度呢
2018-12-0324 - ch_ortKuberentes通过Extended Resource来支持自定义资源,比如GPU。为了让调度器知道这种自定义资源在各Node上的数量,需要的Node里添加自定义资源的数量。实际上,这些信息并不需要人工去维护,所有的硬件加速设备的管理都通过Device Plugin插件来支持,也包括对该硬件的Extended Resource进行汇报的逻辑。 Device Plugin 、kubelet、调度器如何协同工作: 汇报资源: Device Plugin通过gRPC与本机kubelet连接 -> Device Plugin定期向kubelet汇报设备信息,比如GPU的数量 -> kubelet 向APIServer发送的心跳中,以Extended Reousrce的方式加上这些设备信息,比如GPU的数量 调度: Pod申明需要一个GPU -> 调度器找到GPU数量满足条件的node -> Pod绑定到对应的Node上 -> kubelet发现需要拉起一个Pod,且该Pod需要GPU -> kubelet向 Device Plugin 发起 Allocate()请求 -> Device Plugin根据kubelet传递过来的需求,找到这些设备对应的设备路径和驱动目录,并返回给kubelet -> kubelet将这些信息追加在创建Pod所对应的CRI请求中 -> 容器创建完成之后,就会出现这个GPU设备(设备路径+驱动目录)-> 调度完成2020-12-208
- 小河hi,张老师,我现在将gpu的服务迁移到kubernetes上,对外提供的是gRRC接口,我使用了ingres-nginx对gRPC进行负载均衡,但是发现支持并不好,又想使用Istio以sidecar模式代理gPRC,但是又觉得太重,请问目前有什么较好的方案在kuberntes支持对gRPC的负载均衡么😀2019-08-0427
- 凌https://mp.weixin.qq.com/s/NU8Cj6DL8wEKFzVYhuyzbQ2019-05-2717
- 江山未GPU共享及虚拟化,可以搜索一下Orion VGPU2020-10-226
- 勇敢的心所以目前是无法实现多用户同时共享单块GPU咯?有没有可以实现这一功能的Magic?还有,目前可能实现GPU或者CPU数量的动态改变吗,在不重建pod的情况下?期待老师的解答2018-12-134
- 乱愣黎1、device plugin只能通过patch操作来实现device信息的添加吗?能否在节点添加的时候自动添加 2、在第1点的情况下,在服务器持续集成的情况下,新旧设备device信息肯定是会不一致的,如何解决device plugin机制无法区分设备属性的情况? 以本篇文章的内容来看,可以这么设置 批次A使用nvidia.com/GP100=4,批次B使用amd.com/VEGA64=4 这样编写资源需求和新旧设备交替都需要人为指定,这样对于运维来说很难受啊 3、是否能把GPU抽象成类似于CPU的时间片,将整个GPU计算能力池化,然后根据pod.spec.containers.resources里面的require和limits字段来分配GPU计算资源2018-12-053
- 每日都想上班今天爆出kubenetes安全漏洞需要升级,请问要如何升级2018-12-043
- 张振宇老师,我们的2个pod经常出现共用一张gpu卡的情况,导致性能互相影响,求解救。2020-12-151
收起评论