Linux里面k8sopenstack和dockerr的关系是什么?

杭州2016年12月30日电 /美通社/ --Kubernetes上游计划在其1.6 发行版本中加入GPU功能,提升应用程序运行效率。因为很多应用使用GPU可以提升效率,比如大数据平台应用TensorFlow通过使用GPU效率可以提升几十甚至几百倍。

那么,GPU是如何应用在Docker/K8S/TensorFlow这些平台上起到提升效率的作用的呢?近日,才云新晋大神赵慧智用本篇文章给出了答案。在文中,赵慧智主要描写了GPU在Docker、Kubernetes、TensorFlow以及Kubernetes+TensorFlow领域中的应用,并介绍了在开发领域的实践经验,希望给大家带来借鉴和指导意义,原文如下:

为什么离开惠普,加入才云?

2016年下旬,前惠普Kubernetes技术领域的GPU专家赵慧智加盟才云。赵慧智从国内Kubernetes现状、未来发展趋势几个方面大致说了一下加入才云的原因:“当时自己对Kubernetes有很多想法,觉得在云平台里面其实有很多有意思的事情。比方说,如何提供稳定的中间层来让企业的业务更加的稳定和安全;如何降低硬件的成本;如何应对业务的突飞猛进和弹性支持,诸如此类。一开始喜欢Kubernetes,觉得在这两个技术以后将在技术领域大有作为。在技术领域,了解到才云研发实力很强,并且在Kubernetes里面有影响力,来到公司体验之后感觉工作氛围很好,于是就过来了。”

赵慧智说:“关于Kubernetes1.6,我是希望把GPU的功能加进去,因为目前很多应用都能在GPU上跑出比CPU高很多的性能,而在云里面一个很好的地方是通用化,例如一个应用迁移到另外一个VM 或者Server上可以继续运行,但是通用化也导致了一些硬件特性被屏蔽了,GPU就是其中之一,所以在Kubernetes这样一种container编排的环境中如果能支持GPU,那么将会对一些应用的性能产生质的影响,例如深度学习、AI 等。”

以下是赵慧智GPU分享具体内容:

图形处理器(英语:graphics processing unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。

GPU最大的好处就在于可以通过远远多于CPU的core数量来达到并行计算。

8以后的GPU和较新的QuadroGPU进行计算。亦是首次可以利用GPU作为C-编译器的开发环境。NVIDIA营销的时候,往往将编译器与架构混合推广,造成混乱。实际上,CUDA可以兼容OpenCL或者NVIDIA的C- 编译器。

上图为CUDA编程基本逻辑

CUDA提供了对于一般性通用需求的大规模并发编程模型,使用户可以对NVIDIA GPU方便的对于 GPU进行并发性编程。

CUDA编程模型与传统编程模型比较:

样例:将数组a与数组b相加,并将结果赋值给c

如果进行编译优化会在特定操作系统里面把这个数组的相加分配到不同的core里面执行,这样所有的计算就会按照core的数量进行并发,那么我们可以看到在数组操作中,效率的高低取决于core的多少。而通常个人的计算机一般会有2-8个core不等,而大部分服务器也很少会超过100个core。然而,一个GPU很容易就可以达到上千个core,这样在进行并行计算的时候可以实现十几甚至上百上千倍的效率提升。而GPU的价格远远低于相同个数core的CPU(多个)的价格。既然CUDA可以提供一般性的并发编程模型,那么我们来看看在CUDA平台上上面的代码该怎么写。

申请一块GPU的内存,然后就可以把所有的并发操作都交给GPU。

然后我们在container的内部就可以看到相应的设备并且可以使用了。

在设备已经可以绑定了之后,我们就可以提供driver和CUDA的支持了,而Nvidia给了一个关于如何在 container层面支持GPU的原型,是基于Docker的,叫做Nvidia Docker。

目前我们已经支持了如何在container的层面支持GPU,但是这还远远不够在container编排环境里面支持GPU,譬如我们在Kubernetes里面支持GPU。

在Kubernetes里面我们做一些关于GPU的工作才能让GPU能够被调度起来,功能如下:

kube-scheduler和kubelet之间需要一个关于GPU资源的协议支持,譬如目前有CPU,memory等,为了让GPU能够被调度,我们需要引入GPU作为一个资源可以被调度。

在分布式TensorFlow环境里面,各个worker不互相通信,只会跟parameter server通信。所以即使将各个worker部署到不同的机器上也不会造成性能损耗。目前TensorFlow支持GPU进行training的运算,但需要进行编译时设置。

由于在部署分布式TensorFlow时极其繁琐,并且在每次扩容都需要进行很多设置和操作。所以提供基于容器化的TensorFlow并运行在Kubernetes上就使其变得相当容易,而我们需要做的,就是在上面提到的如何让Kubernetes支持GPU的情况下,将TensorFlow容器化。

1. 簡要介紹 官方定義1:Docker是一個開源的應用容器引擎,開發者可以打包他們的應用及依賴到一個可移植的容器中,發佈到流行的Linux機器上,也可實現虛擬化。 官方定義2:k8s是一個開源的容器集羣管理系統,可以實現容器集羣的自動化部署、自動擴縮容、維護等功能。 2. 與傳統技術對比 接下來我們看兩張經典的圖: 一、從虛擬化角度: 圖1: 圖1是Docker容器與傳統虛擬化方式的不同之處,傳

我要回帖

更多关于 openstack和docker 的文章

 

随机推荐