Kubernetes1.3新特性:支持GPU

时间:2023-02-27 08:15:05

(一)  背景资料

GPU就是图形处理器,是Graphics Processing Unit的缩写。电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫“渲染" ,以前计算机上是没有GPU的,都是通过CPU来进行“渲染”处理的,这些涉及到“渲染”的计算工作非常耗时,占用了CPU的大部分时间。之后出现了GPU,是专门为了实现“渲染”这种计算工作的,用来将CPU解放出来,GPU是专为执行复杂的数学和几何计算而设计的,这些计算是“渲染”所必需的。

下面看看百度百科上CPU同GPU的对比图,其中绿色的是计算单元:

Kubernetes1.3新特性:支持GPU

可以看出来GPU有大量的计算单元,所以GPU是专门为“渲染”这种计算工作设计的。

(二)  应用领域

最开始同GPU相关的应用只是简单地停留在图形相关应用上,比如游戏中3D图形“渲染”等图像处理应用,现在GPU的应用已经非常广泛的,在游戏、娱乐、科研、医疗、互联网等涉及到大规模计算的领域都有GPU应用的存在,比如高性能计算应用、机器学习应用、人工智能应用、自动驾驶应用、虚拟现实应用、自然语言处理应用等等。

1、下面看看Nvidia提供的深度学习领域使用GPU的分析结果:

Kubernetes1.3新特性:支持GPU

可以看出来从2013年到2015年在深度学习领域呈现出爆发性增长的趋势。

2、下面看看Nvidia提供的资料:

Kubernetes1.3新特性:支持GPU

使用GPU来实现深度学习应用后,在自动驾驶、医疗诊断和机器学习三方面效率提高的十分明显。

(三)  K8S当前实现

在kubernetes1.3中提供了对Nvidia品牌GPU的支持,在kubernetes管理的集群中每个节点上,通过将原有的Capacity和Allocatable变量进行扩展,增加了一个针对Nvidia品牌GPU的α特性:alpha.kubernetes.io/nvidia-gpu。其中Capacity变量表示每个节点中实际的资源容量,包括cpu、memory、storage、alpha.kubernetes.io/nvidia-gpu,而Allocatable变量表示每个节点中已经分配的资源容量,同样包括包括cpu、memory、storage、alpha.kubernetes.io/nvidia-gpu。

Kubernetes1.3新特性:支持GPU

在启动kubelet的时候,通过增加参数--experimental-nvidia-gpu来将带有GPU的节点添加到kubernetes中进行管理。这个参数experimental-nvidia-gpu用来告诉kubelet这个节点中Nvidia品牌GPU的个数,如果为0表示没有Nvidia品牌GPU,如果不增加这个参数,那么系统默认为这个节点上没有Nvidia品牌GPU。

当节点上安装有多块Nvidia品牌GPU的时候,参数experimental-nvidia-gpu是可以输入大于1的数值的,但是对于kubernetes1.3这个版本,GPU还是个α特性,在代码中参数experimental-nvidia-gpu其实只支持两个值,分别是0和1,我们通过下面代码就可以看出来:

Kubernetes1.3新特性:支持GPU

在运行docker的时候,需要映射节点上的设备到docker中,这段代码是在告诉docker,只映射第一块Nvidia品牌GPU。通过上面代码可以看出来,在kubernetes1.3中,GPU这个α特性,参数experimental-nvidia-gpu其实只支持两个值,分别是0和1。通过上面代码也可以看出来,为什么在kubernetes1.3中只支持Nvidia品牌GPU,对于不同品牌的GPU,映射到linux操作系统里面有着不同的设备路径,需要针对不同的GPU品牌分别进行实现。

在kubernetes1.3中新增了初始化容器,但是这种初始化容器并不支持Nvidia品牌GPU这个功能。

通过下图可以看到,如何在kubenetes上面使用Nvidia品牌的GPU:

Kubernetes1.3新特性:支持GPU

在上图中,kubernetes在调度的时候会把GPU作为一种资源进行考虑,在Scheduler调度模块中增加了Nvidia品牌GPU这种资源:

Kubernetes1.3新特性:支持GPU

在Scheduler调度模块中的PodFitsResources方法中增加了对Nvidia品牌GPU的处理:

Kubernetes1.3新特性:支持GPU

在Scheduler调度模块中的CheckPodsExceedingFreeResources方法中增加了对Nvidia品牌GPU的处理:

Kubernetes1.3新特性:支持GPU

在Scheduler调度模块中的getResourceRequest方法中增加了对Nvidia品牌GPU的处理:

Kubernetes1.3新特性:支持GPU

(四)  K8S未来计划

在Scheduler调度模块中的getResourceRequest方法中增加了对Nvidia品牌GPU的处理:

•       增加自动检测节点上GPU硬件功能

•       提供一种标准方法,用来防止容器镜像中GPU厂商共享库的绑定

•       支持多个POD可以共享相同的GPU

•       支持配置物理裸机

•       对多个GPU支持按照层次调度和亲和性调度

•       支持各个GPU厂商新版本,比如CUDA v7.5+

•       考虑以GPU驱动插件的形式增加到kubelet中

•       支持更多的GPU厂商

•       支持OpenCL,让容器镜像同设备无关(2008年6月的WWDC大会上,苹果提出了OpenCL规范,旨在提供一个通用的开放API,在此基础上开发GPU通用计算软件。随后,Khronos Group宣布成立GPU通用计算开放行业标准工作组,以苹果的提案为基础创立OpenCL行业规范。)

Kubernetes1.3新特性:支持GPU的更多相关文章

  1. [置顶]
 Kubernetes1.7新特性:支持绕过docker,直接通过containerd管理容器

    背景情况 从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一 ...

  2. kubernetes1.5新特性跟踪(续)

    Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...

  3. kubernetes1.5新特性跟踪

    Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...

  4. Kubernetes1.6新特性:全面支持多颗GPU

    (一)  背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前.要经过一些列处理,这个过程有个专有的名词叫" ...

  5. kubernetes1.4新特性:支持两种新的卷插件

    背景介绍 在Kubernetes中卷的作用在于提供给POD持久化存储,这些持久化存储可以挂载到POD中的容器上,进而给容器提供持久化存储. 从图中可以看到结构体PodSpec有个属性是Volumes, ...

  6. kubernetes1.4新特性(一):支持sysctl命令

    sysctl是一个允许改变正在运行中的Linux系统内核参数的接口.可以通过sysctl修改Linux系统内核中的TCP/IP 堆栈和虚拟内存系统的高级选项,而且不需要重新启动Linux系统,就可以实 ...

  7. kubernetes1.4新特性:支持sysctl命令

    背景介绍 sysctl是一个允许改变正在运行中的Linux系统内核参数的接口.可以通过sysctl修改Linux系统内核中的TCP/IP 堆栈和虚拟内存系统的高级选项,而且不需要重新启动Linux系统 ...

  8. kubernetes1.4新特性:支持Docker新特性

    (一)背景资料 在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Dockerremote API,这个项目在https:// ...

  9. Kubernetes1.3新特性:rktnetes

    (一)  背景资料 对于Kubernetes来说,从架构设计上就是支持Docker和CoreOS rkt两种容器的,在1.2版本中,最低支持CoreOS rkt 0.13.0版本,这个rkt版本算是一 ...

随机推荐

  1. 使用ShareSDK一键分享

    首先需要到ShareSDK官方网站注册并且下载SDK,创建应用,获得ShareSDK的Appkey:文件如图: 在ShareSDK中打开即可:输入项目名称和包名,选择要分享的平台,点击确定会自动生成一 ...

  2. 使用 Dalvik 调试监控服务 (DDMS) 工具

    Android 附带一个叫Dalvik 调试监控服务 (DDMS) 的调试工具,它提供端口转发服务.在设备上的屏幕捕获,设备上的线程和堆栈信息, logcat,进程, 和无线状态信息,接收呼叫和SMS ...

  3. 转载:ecshop自定义销量

    转自:http://www.phpally.com/ecshop%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%80%E9%87%8F/ 本补丁以假乱真,对网站销售有一定帮助,计算 ...

  4. keyboard dialog 仿微博表情键盘输入框

    功能描述:弹出键盘,右边有最大化按钮,没有最大化的时候最大行数为3,默认1行,随着文字输入增加自动增加高度,到达3行时不会在增加,点击最大化输入框,行数无限制,输入框下方图片点击删除 此处为了简便,键 ...

  5. 《CSAPP》读书笔记

    第一章 第二章 第三章 第四章 第五章 第六章 第七章 链接 可重定位目标文件 符号和符号表 符号解析 第八章 第九章 虚拟存储器 虚拟存储器 页表.页命中.缺页 地址翻译 第十章 第十一章 第十二章 ...

  6. python 备忘

    import jsonu='''{ "maps": [ { "id": "blabla", "iscategorical&quot ...

  7. Sql server的Merge语句,源表中如果有重复数据会导致执行报错

    用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说 ...

  8. 我认为比较有用的快捷键(Eclipse)

    http://hi.baidu.com/%D4%AD%CA%BC%C1%F7%C0%CB%D5%DF/blog/item/e497b94dd1b0b92daec3ab36.html 我认为比较有用的快 ...

  9. hdu3625(第一类斯特林数)

    与第二类有些区别! #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  10. apple touch icon 大小总结

    <!-- For Chrome for Android: --> <link rel="icon" sizes="192x192" href= ...