首页 > 其他分享 >k8s GPU设备插件

k8s GPU设备插件

时间:2023-08-03 15:57:13浏览次数:43  
标签:插件 Kubernetes GPU k8s example 资源 设备

设备插件

特性状态: Kubernetes v1.26 [stable]

Kubernetes 提供了一个 设备插件框架, 你可以用它来将系统硬件资源发布到 Kubelet

供应商可以实现设备插件,由你手动部署或作为 DaemonSet 来部署,而不必定制 Kubernetes 本身的代码。目标设备包括 GPU、高性能 NIC、FPGA、 InfiniBand 适配器以及其他类似的、可能需要特定于供应商的初始化和设置的计算资源。

注册设备插件

kubelet 提供了一个 Registration 的 gRPC 服务:

service Registration {
	rpc Register(RegisterRequest) returns (Empty) {}
}

设备插件可以通过此 gRPC 服务在 kubelet 进行注册。在注册期间,设备插件需要发送下面几样内容:

  • 设备插件的 Unix 套接字。
  • 设备插件的 API 版本。
  • ResourceName 是需要公布的。这里 ResourceName 需要遵循扩展资源命名方案, 类似于 vendor-domain/resourcetype。(比如 NVIDIA GPU 就被公布为 nvidia.com/gpu。)

成功注册后,设备插件就向 kubelet 发送它所管理的设备列表,然后 kubelet 负责将这些资源发布到 API 服务器,作为 kubelet 节点状态更新的一部分。

比如,设备插件在 kubelet 中注册了 hardware-vendor.example/foo 并报告了节点上的两个运行状况良好的设备后,节点状态将更新以通告该节点已安装 2 个 "Foo" 设备并且是可用的。

然后,用户可以请求设备作为 Pod 规范的一部分, 参见 Container。 请求扩展资源类似于管理请求和限制的方式, 其他资源,有以下区别:

  • 扩展资源仅可作为整数资源使用,并且不能被过量使用
  • 设备不能在容器之间共享

示例

假设 Kubernetes 集群正在运行一个设备插件,该插件在一些节点上公布的资源为 hardware-vendor.example/foo。 下面就是一个 Pod 示例,请求此资源以运行一个工作负载的示例:

 

 

 

Kubernetes 实现了设备插件(Device Plugin),让 Pod 可以访问类似 GPU 这类特殊的硬件功能特性。

说明: 本部分链接到提供 Kubernetes 所需功能的第三方项目。Kubernetes 项目作者不负责这些项目。此页面遵循CNCF 网站指南,按字母顺序列出项目。要将项目添加到此列表中,请在提交更改之前阅读内容指南

作为集群管理员,你要在节点上安装来自对应硬件厂商的 GPU 驱动程序,并运行来自 GPU 厂商的对应设备插件。以下是一些厂商说明的链接:

一旦你安装了插件,你的集群就会暴露一个自定义可调度的资源,例如 amd.com/gpu 或 nvidia.com/gpu

你可以通过请求这个自定义的 GPU 资源在你的容器中使用这些 GPU,其请求方式与请求 cpu 或 memory 时相同。 不过,在如何指定自定义设备的资源请求方面存在一些限制。

GPU 只能在 limits 部分指定,这意味着:

  • 你可以指定 GPU 的 limits 而不指定其 requests,因为 Kubernetes 将默认使用限制值作为请求值。
  • 你可以同时指定 limits 和 requests,不过这两个值必须相等。
  • 你不可以仅指定 requests 而不指定 limits

以下是一个 Pod 请求 GPU 的示例清单:

apiVersion: v1
kind: Pod
metadata:
  name: example-vector-add
spec:
  restartPolicy: OnFailure
  containers:
    - name: example-vector-add
      image: "registry.example/example-vector-add:v42"
      resources:
        limits:
          gpu-vendor.example/example-gpu: 1 # 请求 1 个 GPU

集群内存在不同类型的 GPU 

如果集群内部的不同节点上有不同类型的 NVIDIA GPU, 那么你可以使用节点标签和节点选择器来将 Pod 调度到合适的节点上。

例如:

# 为你的节点加上它们所拥有的加速器类型的标签
kubectl label nodes node1 accelerator=example-gpu-x100
kubectl label nodes node2 accelerator=other-gpu-k915

 

 

然而,Kubernetes 社区针对 GPU 资源的调度提供了一些解决方案和工具。下面是几个常用的 GPU 调度解决方案:

  1. Kubernetes Device Plugin:Kubernetes 设备插件(Device Plugin)是一个机制,允许将 GPU 资源暴露给 Kubernetes 调度器,以便正确分配和调度 GPU 加速的任务。通过使用 NVIDIA Device Plugin 或其他类似的插件,可以在 Kubernetes 中管理 GPU 资源。

  2. NVIDIA GPU Operator:NVIDIA GPU Operator 是一个开源项目,它提供了一套自定义资源定义(CRD)和控制器,用于在 Kubernetes 中管理 NVIDIA GPU 资源。它可以自动检测 GPU 资源,为 Pod 分配 GPU,并确保 GPU 驱动程序和容器运行时的正确配置。

  3. Kube-bench GPU Scheduler:Kube-bench GPU Scheduler 是一种基于 Kubernetes 的 GPU 资源调度器,可以根据 GPU 设备的状态和可用性进行智能调度。它通过周期性地监控 GPU 设备,并根据 GPU 使用情况调整 Pod 的调度策略。

这些解决方案和工具可以帮助在 Kubernetes 集群中更好地管理和利用 GPU 资源。请根据您的具体需求选择适合的解决方案,并参考它们的官方文档进行正确的安装和配置。

 

 

 

 

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back     此页面的语言为中文(简体)   翻译为        
  • 中文(简体)
  • 中文(繁体)
  • 丹麦语
  • 乌克兰语
  • 乌尔都语
  • 亚美尼亚语
  • 俄语
  • 保加利亚语
  • 克罗地亚语
  • 冰岛语
  • 加泰罗尼亚语
  • 匈牙利语
  • 卡纳达语
  • 印地语
  • 印尼语
  • 古吉拉特语
  • 哈萨克语
  • 土耳其语
  • 威尔士语
  • 孟加拉语
  • 尼泊尔语
  • 布尔语(南非荷兰语)
  • 希伯来语
  • 希腊语
  • 库尔德语
  • 德语
  • 意大利语
  • 拉脱维亚语
  • 挪威语
  • 捷克语
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 旁遮普语
  • 日语
  • 普什图语
  • 毛利语
  • 法语
  • 波兰语
  • 波斯语
  • 泰卢固语
  • 泰米尔语
  • 泰语
  • 海地克里奥尔语
  • 爱沙尼亚语
  • 瑞典语
  • 立陶宛语
  • 缅甸语
  • 罗马尼亚语
  • 老挝语
  • 芬兰语
  • 英语
  • 荷兰语
  • 萨摩亚语
  • 葡萄牙语
  • 西班牙语
  • 越南语
  • 阿塞拜疆语
  • 阿姆哈拉语
  • 阿尔巴尼亚语
  • 阿拉伯语
  • 韩语
  • 马尔加什语
  • 马拉地语
  • 马拉雅拉姆语
  • 马来语
  • 马耳他语
  • 高棉语
 

标签:插件,Kubernetes,GPU,k8s,example,资源,设备
From: https://www.cnblogs.com/gaoyuechen/p/17603544.html

相关文章

  • 采用ComposeUI实现Android插件化
    什么是ComposeJetpackCompose是谷歌官方推荐的AndroidUI实现方式,避免了Android传统View在绘制、编写、性能等方面的种种缺点,具体使用方法请参考官方文档。Compose与插件化想必大家都接触过或者了解过插件化开发,没接触过的小伙伴们要补补课啦。在以往插件化开发过程中,清单文件中要......
  • Mybatis Log 插件
    目前的idea插件已经开始收费---找了一个免费的插件安装到idea中重启一下就可以了百度网盘提取码:sjc8......
  • # yyds干货盘点 # 盘点一个可以一键免费下载图片的谷歌插件
    大家好,我是皮皮。一、前言前几天在Python知识星球里边看到【七年】大佬推荐的一个谷歌浏览器插件,可以一键下载浏览器中的图片或者PPT,这里也推荐给大家,一起来看看吧!二、实现过程这个插件是免费的,非常奈斯,但是在谷歌浏览器中下载的时候,需要借助ti子,在谷歌浏览器应用商店里边搜索【图......
  • GPU 容器虚拟化新能力发布和全场景实践
    今天给大家分享的主题是百度智能云在「GPU容器虚拟化」方面的最新进展和全场景实践,希望通过这次分享和大家一起探讨如何在实际业务场景更好的应用GPU容器虚拟化技术。本次分享将首先介绍百度智能云GPU容器虚拟化2.0的升级变化,然后介绍新版本中的技术实现方法并演示具体功能,......
  • node封装一个图片拼接插件
    说在前面平时我们拼接图片的时候一般都要通过ps或者其他图片处理工具来进行处理合成,这次有个需求就需要进行图片拼接,而且我希望是可以直接使用代码进行拼接,于是就有了这么一个工具包。插件效果通过该插件,我们可以将图片进行以下操作:1、横向拼接两张图片如下,我们有这么两张......
  • K8S | Service服务发现
    服务发现与负载均衡。一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;对于测试「Tes」环境或者生产「Pro」环境,出于安全或者环境隔离性来考虑,在正常情况下只会开放网关服务,而「注......
  • VST音频插件架构分析
    VST音频插件架构分析前言VirtualStudioTechnology(VST),可以翻译为虚拟工作室技术,是一种音频插件软件接口,由德国Steinberg公司发布,用于在DigitalAudioWorkstation(DAW,可以译为数字音频工作站)中集成合成器和效果器。现在主要还在用的是VST2和VST3这两个版本,VST2是对VST......
  • yolov5 算法环境(GPU CPU)搭建与使用(windows环境)
    文章目录前言前提说明一、环境搭建1.1、GPU环境Anaconda安装CUDA安装CUDNN安装(可不装,加速深度学习用途)二、项目启动2.1、构建yolov5环境2.2、实战深度学习预测示例1:预测图片示例2:预测视频上面案例过程中的问题1、CUDA不匹配当前GPU的版本(卸载重装)2、重新安装pyotrch版本2.3、训练模......
  • pycharm设置中文,无序外部插件
    直接内部安装Chinese就OK,不需要太多的繁琐步骤,直接searchfor,Chinese,然后直接......
  • FD.io VPP自定义插件
    [email protected],2023Description自定义插件的方法虽然VPP已经基本满足了路由转发需要,但是用它肯定还有其它原因:自定义扩展功能。1.环境及版本$sudovppctl#或者makerunDBGvpp#showversionvppv23.06-releasebuiltbyXX......