深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116709 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

44 | Kubernetes GPU管理与Device Plugin机制

设计是否已经完全够用?
如何对当前的Device Plugin进行改进?
fork上游的Kubernetes代码实现自己的GPU解决方案
设计未获得广泛支持
RedHat曾试图将硬件设备的管理功能上浮到API层和调度层
无法支持复杂硬件设备的属性
缺乏全局分布的最佳调度选择
仅能处理设备个数的情况
Device Plugin的API可扩展性不佳
缺乏对Device进行描述的API对象
调度工作由kubelet完成
Allocate API完成设备分配操作
ListAndWatch API定期向kubelet汇报Node上GPU的列表
对所有硬件加速设备进行管理
使用Extended Resource字段传递GPU信息
kubelet设置在创建容器的CRI参数里的GPU设备和驱动目录
在Pod的YAML里声明容器需要的GPU个数
以Google Cloud的需求为主导推进
对GPU等硬件加速设备管理的支持
运行TensorFlow等机器学习框架的诉求
促进人工智能从学术界到工业界
AlphaGo的走红和TensorFlow项目的异军突起
思考题
NVIDIA等硬件厂商的改动
设计的改进
设计的局限性
设计的问题
Kubernetes社区已实现的硬件插件
Device Plugin机制
Kubernetes的GPU支持实现
用户对GPU支持的基本诉求
GPU支持对Kubernetes项目的战略意义
Kubernetes社区收到大量诉求
云计算服务的普及与成熟,算力的提升
2016年,AI技术革命从学术界蔓延到工业界
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
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • Eric
    单块GPU资源都不能共享,还得自己fork一份device plugin维护虚拟化的GPU。 社区有时候办事真的不利索

    作者回复: 我已经吐槽的很委婉了

    2018-12-05
    2
    34
  • hlzhu1983
    张老师,问一下现在k8s关于GPU资源调度粒度是否能像CPU调度粒度那么细?现在还只能按照1块GPU卡来分配GPU资源吗?

    作者回复: 很粗粒度呢

    2018-12-03
    2
    4
  • ch_ort
    Kuberentes通过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-20
    8
  • 小河
    hi,张老师,我现在将gpu的服务迁移到kubernetes上,对外提供的是gRRC接口,我使用了ingres-nginx对gRPC进行负载均衡,但是发现支持并不好,又想使用Istio以sidecar模式代理gPRC,但是又觉得太重,请问目前有什么较好的方案在kuberntes支持对gRPC的负载均衡么😀
    2019-08-04
    2
    7
  • https://mp.weixin.qq.com/s/NU8Cj6DL8wEKFzVYhuyzbQ
    2019-05-27
    1
    7
  • 江山未
    GPU共享及虚拟化,可以搜索一下Orion VGPU
    2020-10-22
    6
  • 勇敢的心
    所以目前是无法实现多用户同时共享单块GPU咯?有没有可以实现这一功能的Magic?还有,目前可能实现GPU或者CPU数量的动态改变吗,在不重建pod的情况下?期待老师的解答
    2018-12-13
    4
  • 乱愣黎
    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-05
    3
  • 每日都想上班
    今天爆出kubenetes安全漏洞需要升级,请问要如何升级
    2018-12-04
    3
  • 张振宇
    老师,我们的2个pod经常出现共用一张gpu卡的情况,导致性能互相影响,求解救。
    2020-12-15
    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部