目录

背景

Kubernetes如何使用物理GPU

Kubernetes如何使用共享GPU算力


背景

作为推动人工智能技术进步的“三驾马车”,算法、数据和计算力在过去的5-10年间不断创新。在算法方面,人类在机器学习的算法上实现了突破,特别是在视觉和语音技术方面的成就尤为突出。在数据方面,移动互联网时代的到来使数据量迎来了爆炸式增长。人工智能算法模型经过长期发展,目前已覆盖多个研究子领域。随着大数据技术的不断提升,人工智能赖以学习的标记数据获得成本下降,同时对数据的处理速度大幅提升。宽带的效率提升。物联网和电信技术的持续迭代为人工智能技术的发展提供了基础设施。2020年,接入物联网的设备将增加至500亿台。代表电信发展里程的5G的发展将为人工智能的发展提供最快1000Mbps的信息传输速度。在计算力上,得益于芯片处理能力提升、硬件价格下降的并行使得计算力大幅提升。截至目前,全球人工智能的计算力主要是以GPU芯片为主。但随着技术的不断迭代,如ASIC、FPGA在内的计算单元类别将成为支撑人工智能技术发展的底层技术。

在以容器为应用运行载体的Kubernetes平台上,运行AI训练和推理任务,已经成为AI厂商以及AI应用在企业落地的热点和首选。我们已经看到Kubernetes在人工智能、机器学习这一新型应用场景下得到快速应用的趋势。Kubernetes已经成为云原生时代编排框架的事实标准,各种资源、任务都可以使用Kubernetes进行编排和管理,当然也包括机器学习任务。基于Kubernetes,大量开发者和公司已经提供了众多开源或商业的工具(包括:Argo、Katib、KubeFlow、RiseML等),通过这些工具,AI公司可以进一步提升机器学习任务在Kubernetes上运行的效率,增强使用Kubernetes进行机器学习的能力。同时容器和Serverless将使机器学习模型作为独立的功能提供服务,从而以更低的开销运行AI应用。

Kubernetes如何使用物理GPU

Kubernetes具有对机器的资源进行分配和使用的能力,比如k8s可以指定容器使用多少内存以及使用多少CPU计算资源。那么问题来了,一般来说容器就是使用CPU和内存资源,那么对于需要使用显卡的Pod,k8s也能够支持吗?答案当然是肯定的!自从k8s 1.8版本开始,官方开始推荐使用device plugin的方式来调用GPU使用。截至目前,Nvidia和AMD都推出了相应的设备插件,使得k8s调用GPU变得容易起来。

由于目前整个AI数据中心市场主要以nvidia的GPU卡为主,所以我们看下k8s是如何使用nvidia GPU资源。

首先,官方的 NVIDIA GPU 设备插件有以下要求:

  • Kubernetes 的节点必须预先安装了 NVIDIA 驱动
  • Kubernetes 的节点必须预先安装 nvidia-docker 2.0
  • Docker 的默认运行时必须设置为 nvidia-runtime,而不是 runc
  • NVIDIA 驱动版本 ~= 384.81

如果你的集群已经启动并且满足上述要求的话,就可以部署 NVIDIA 设备插件,部署完插件之后Kubernetes 将暴露 nvidia.com/gpu 为 可调度的资源。

你可以通过请求 nvidia.com/gpu 资源来使用 GPU 设备,就像你为pod申请 CPU 和内存资源那样。 不过,使用 GPU 时,在如何指定资源需求这个方面还是有一些限制的:

  • GPU只能设置在limits部分,这意味着:

    • 你可以指定 GPU 的 limits 而不指定其 requests,Kubernetes 将使用限制值作为默认的请求值;
    • 你可以同时指定 limits 和 requests,不过这两个值必须相同。
    • 你不可以仅指定 requests 而不指定 limits值。
  • 容器(以及 Pod)之间是不共享 GPU 的,GPU 也不可以超配(Overcommitting)。
  • 每个容器可以请求一个或者多个 GPU,但是不能使用小数值来请求部分 GPU资源,比如0.2、0.7等 。
  • 如果集群内部的不同节点上有不同类型的 NVIDIA GPU,那么你可以使用 节点标签和节点选择器 来将 pod 调度到合适的节点上,并不能自动化的在申请资源的时候指定型号。

Kubernetes如何使用共享GPU算力

在kubernetes中使用物理GPU已经帮助我们解决了很多运维调度的问题,但是我们发现还是有很多不方便或者不足的地方,比如:

  • 资源调度不够灵活,特别是单个集群存在多种不同类型的GPU卡时
  • GPU不能共享,算力不能切分,这样会导致GPU算力的浪费
  • 算力不能池化和解耦——(OrionX)AI 算力资源池化解决方案帮助客户构建数据中心级 AI 算力资源池,使用户应用无需修改就能透明地共享和使用数据中心内任何服务器之上的 AI 加速器,不但能够帮助用户提高算力资源利用率,而且可以极大便利用户AI应用的部署。

OrionX通过软件定义AI算力,颠覆了原有的AI应用直接调用物理GPU的架构,增加软件层,将AI应用与物理GPU解耦合。AI应用调用逻辑的vGPU,再由OrionX将vGPU需求匹配到具体的物理GPU。新架构实现了GPU的资源池化,让用户高效,智能,灵活的使用GPU资源,降本增效。

OrionX为Kubernetes提供两个插件,实现与Kubernetes的集成对接。集成后,系统管理员只需要在K8S中,即可完成对GPU资源池中vGPU资源的配置和调度管理。简化运维,允许客户系统管理员通过单一接口调度全部数据中心资源,实现共享GPU能力。

OrionX为Kubernetes提供的插件:

  • OrionX Kubernetes Device Plugin

通过和Orion Controller通讯,获取Orion vGPU资源池信息

通过Kubernetes定义的Device Plugin标准向Kubernetes注册名字为“virtaitech.com/gpu”的资源

  • OrionX Kubernetes Scheduler Extender

提供基于HTTP API 通讯的松耦合调度扩展功能

通过配置文件向Kubernetes注册名字为“virtaitech.com/gpu”的资源,使其指向Orion Kubernetes Scheduler Extender的HTTP服务地址

在Kubernetes中部署Orionx之后,就可以实现对nvidia GPU进行细粒度的池化管理,比如申请0.3的算力,2GB显存,比如在一台CPU节点调度远端GPU资源等。

参考:

  • 全球人工智能发展白皮书
  • Kubernetes官方文档

如何在kubernetes中使用共享GPU资源相关推荐

  1. 安全运维-如何在Kubernetes中使用注释对ingress-nginx及后端应用进行安全加固配置实践...

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x08 Kubernetes中ingress-nginx安全配置 1.配置指定的 ...

  2. 如何在 Kubernetes 中对无状态应用进行分批发布

    在 Kubernetes 中针对各种工作负载,提供了多种控制器,其中 Deployment 为官方推荐,被用于管理无状态应用的 API 对象.本文将结合 Deployment 的特性,与常见的发布策略 ...

  3. 日志的log中如何输出变量_如何在kubernetes中优雅的输出日志

    背景 我们经常需要在kubernetes中运行一些任务性质的Job或者Pod.在调试过程中,我们对日志有如下两个需求 需求一:日志输出到stdout.因为stdout的输出,可以非常方便的通过kube ...

  4. web服务器中启用作业储存_如何在Kubernetes中启用无服务器计算

    web服务器中启用作业储存 在本系列的前两篇文章中,介绍了在开放源代码平台上使用无服务器平台的过程,我介绍了如何开始使用无服务器平台,以及如何使用流行的语言编写函数以及如何在Apache OpenWh ...

  5. 安装kubernetes_如何在Kubernetes中安装和使用Linkerd

    安装kubernetes The author selected the Tech Education Fund to receive a donation as part of the Write ...

  6. 如何在Kubernetes中暴露服务访问

    Kubernetes概述 最近的一年,kubernetes的发展如此闪耀,正被越来越多的公司采纳用于生产环境的实践.同时,我们可以在最著名的开发者问答社区StackOverflow上看到k8s的问题数 ...

  7. 如何在Kubernetes中部署nginx

    1.准备 搭建Kubernetes环境,参考视频:https://www.bilibili.com/video/BV13z4y1B7kg/?spm_id_from=333.999.0.0 2.配置 m ...

  8. 提高 Kubernetes 中的 GPU 利用率

    提高 Kubernetes 中的 GPU 利用率 对于可扩展的数据中心性能,NVIDIA GPU 已成为必备品. 由数千个计算内核支持的 NVIDIA GPU 并行处理能力对于加速不同行业的各种应用程 ...

  9. Nvidia GPU如何在Kubernetes 里工作

    Nvidia GPU如何在Kubernetes 里工作 本文介绍Nvidia GPU设备如何在Kubernetes中管理调度. 整个工作流程分为以下两个方面: 如何在容器中使用GPU Kubernet ...

最新文章

  1. js判断鼠标位置是否在某个div中
  2. POJ2985 The k-th Largest Group(平衡树查询第K大)
  3. 华三交换机mode是什么意思_交换机中相关术语代表什么意思,有必要弄清楚,赶紧收藏...
  4. 使用SAP Cloud Platform Leonardo机器学习的测试控制台
  5. Springmvc借助SimpleUrlHandlerMapping实现接口开关功能
  6. 字节跳动暑期实习前端面试
  7. 关于php的函数,总结关于PHP文件函数有哪些
  8. webpack+ES6+Sass搭建多页面应用
  9. MVC3----配置连接数据库
  10. 回归算法--K近邻算法
  11. cdr添加节点快捷键_CDR常用快捷键有哪些
  12. 计算机专业学生如何规划好大学四年的学习
  13. nmap识别TCP端口服务的数据库
  14. [翻译]X窗口管理器的原理剖析(一)
  15. 识别IOS和android方法
  16. Python中字符串前“b”,“r”,“u”,“f”的作用
  17. 救救我吧,今年27岁,想转行学大数据开发
  18. 数据化管理 - 洞悉零售及电商运营【初始】
  19. android屏幕适配:一个很棒的屏幕适配文章
  20. stateflow(状态流)简单应用

热门文章

  1. position属性与z-index属性详解,如何比较z-index值确定覆盖关系,为何z-index属性不生效。
  2. 【Docker容器安装、配置、部署】
  3. Mybatis学习 association关联 和 collection集合
  4. Java~设计模式之观察者模式 || 班长大喊老师来啦
  5. 一篇文章搞懂Java架构师的核心技能及薪资!
  6. 计算机管理恢复分区,windows10系统隐藏恢复分区Recovery Image的方法
  7. 屏幕录制和视频剪辑Filmage Screen
  8. Python+OpenCV人脸识别签到考勤系统(新手入门)
  9. 【控制系统的微分方程】
  10. 大型软件设计——进度报告