如何在kubernetes中使用共享GPU资源

本文介绍了如何在Kubernetes中使用物理GPU资源,以及通过OrionX实现GPU算力的共享和池化管理。Kubernetes 1.8以后支持NVIDIA GPU设备插件,但GPU资源不能超配或共享。OrionX提供插件与Kubernetes集成,允许更灵活的GPU调度和资源利用,实现降本增效。

目录

背景

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资源等。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值