Kubernetes1.3新特性:支持GPU
(一) 背景资料
GPU就是图形处理器,是Graphics Processing Unit的缩写。电脑显示器上显示的图像,在显示在显示器上之前,要经过一些列处理,这个过程有个专有的名词叫“渲染" ,以前计算机上是没有GPU的,都是通过CPU来进行“渲染”处理的,这些涉及到“渲染”的计算工作非常耗时,占用了CPU的大部分时间。之后出现了GPU,是专门为了实现“渲染”这种计算工作的,用来将CPU解放出来,GPU是专为执行复杂的数学和几何计算而设计的,这些计算是“渲染”所必需的。
下面看看百度百科上CPU同GPU的对比图,其中绿色的是计算单元:
可以看出来GPU有大量的计算单元,所以GPU是专门为“渲染”这种计算工作设计的。
(二) 应用领域
最开始同GPU相关的应用只是简单地停留在图形相关应用上,比如游戏中3D图形“渲染”等图像处理应用,现在GPU的应用已经非常广泛的,在游戏、娱乐、科研、医疗、互联网等涉及到大规模计算的领域都有GPU应用的存在,比如高性能计算应用、机器学习应用、人工智能应用、自动驾驶应用、虚拟现实应用、自然语言处理应用等等。
1、下面看看Nvidia提供的深度学习领域使用GPU的分析结果:
可以看出来从2013年到2015年在深度学习领域呈现出爆发性增长的趋势。
2、下面看看Nvidia提供的资料:
使用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。
在启动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,我们通过下面代码就可以看出来:
在运行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:
在上图中,kubernetes在调度的时候会把GPU作为一种资源进行考虑,在Scheduler调度模块中增加了Nvidia品牌GPU这种资源:
在Scheduler调度模块中的PodFitsResources方法中增加了对Nvidia品牌GPU的处理:
在Scheduler调度模块中的CheckPodsExceedingFreeResources方法中增加了对Nvidia品牌GPU的处理:
在Scheduler调度模块中的getResourceRequest方法中增加了对Nvidia品牌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的更多相关文章
- [置顶]
Kubernetes1.7新特性:支持绕过docker,直接通过containerd管理容器
背景情况 从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一 ...
- kubernetes1.5新特性跟踪(续)
Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...
- kubernetes1.5新特性跟踪
Kubernetes发布历史回顾 Kubernetes 1.0 - 2015年7月发布 Kubernetes 1.1 - 2015年11月发布 Kubernetes 1.2 - 2016年3月发布 K ...
- Kubernetes1.6新特性:全面支持多颗GPU
(一) 背景资料 GPU就是图形处理器,是Graphics Processing Unit的缩写.电脑显示器上显示的图像,在显示在显示器上之前.要经过一些列处理,这个过程有个专有的名词叫" ...
- kubernetes1.4新特性:支持两种新的卷插件
背景介绍 在Kubernetes中卷的作用在于提供给POD持久化存储,这些持久化存储可以挂载到POD中的容器上,进而给容器提供持久化存储. 从图中可以看到结构体PodSpec有个属性是Volumes, ...
- kubernetes1.4新特性(一):支持sysctl命令
sysctl是一个允许改变正在运行中的Linux系统内核参数的接口.可以通过sysctl修改Linux系统内核中的TCP/IP 堆栈和虚拟内存系统的高级选项,而且不需要重新启动Linux系统,就可以实 ...
- kubernetes1.4新特性:支持sysctl命令
背景介绍 sysctl是一个允许改变正在运行中的Linux系统内核参数的接口.可以通过sysctl修改Linux系统内核中的TCP/IP 堆栈和虚拟内存系统的高级选项,而且不需要重新启动Linux系统 ...
- kubernetes1.4新特性:支持Docker新特性
(一)背景资料 在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Dockerremote API,这个项目在https:// ...
- Kubernetes1.3新特性:rktnetes
(一) 背景资料 对于Kubernetes来说,从架构设计上就是支持Docker和CoreOS rkt两种容器的,在1.2版本中,最低支持CoreOS rkt 0.13.0版本,这个rkt版本算是一 ...
随机推荐
- Device eth0 does not seem to be present, delaying initialization(VM虚拟机restart service出现此错误)
>从vmware workstation中克隆(clone)了一个redhat6.0的虚拟机,启动之后发现网卡没有启动.于是重启一下network服务,发现提示错误信息“Device eth0 ...
- 【转载】Linux Examination
原博地址:https://blog.csdn.net/weixin_42568655/article/details/94603660 (来自我的同学QiaoGuangtong大佬) Fundamen ...
- 入门servlet:request获取请求参数通用方式
一.获取请求参数通用方式 1. String getParameter(String name):根据参数名称获取参数值 例:username=flypig&password=2343 2. ...
- RDS for PostgreSQL 云盘加密功能使用方法
RDS for PostgreSQL支持数据盘的加密功能,提供更高的数据存储安全等级.(加密KEY可以由用户提供,也可以由KMS服务生成.) 使用方法: 1.选中需要购买数据库实例的region,创建 ...
- 使用原生ajax及其简单封装
原生ajax配置详解 // 原生ajax // 1. 创建ajax对象 if(window.XMLHttpRequest){ // // IE7+, Firefox, Chrome, Opera, S ...
- 深入了解MVC(转)
MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性.可移植性,代码的可 ...
- ubuntu 已安装 post-installation 脚本 返回错误状态 1
1.$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名 2.$ sudo mkdir /var/lib/dpkg/inf ...
- HTML:如何将网页分为上下两个部分
1.使用table: <table> <tr> <td height="80%"><jsp:include page=" ...
- Oracle 优化效率
一.链接: ORACLE多表查询优化 oracle的 分表 详解 -----表分区 Oracle数据库查询优化方案(处理上百万级记录如何提高处理查询速度) 数据库SQL优化大总结之 百万级数据库优化方 ...
- iTerm2+oh-my-zsh配色
效果图,很帅气有木有 一.首先安装iTem2 安装好后的截图如下: 安装好后的截图 二.安装oh-my-zsh. sh -c "$(curl -fsSL https://raw.gi ...