Notice: Constant WP_DEBUG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 12

Notice: Constant WP_DEBUG_LOG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 13

Notice: Constant WP_DEBUG_DISPLAY already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 14
【转载】专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度 – zoues

LOADING

Follow me

【转载】专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度
四月 18, 2017|DockerPaaS

【转载】专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

【转载】专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

伴随着人工智能技术的发展,尤其是深度学习的兴起,许多之前机器学习领域的问题与难点逐步的得到了解决,训练效率与学习准确率都得到了质的提升。深度学习的实现,需要多种技术进行支撑,比如服务器、GPU、集群、集群管理调度软件、深度学习框架、深度学习的具体应用等。我们把这些技术进行归类,认为服务器、GPU、分布式集群、集群调度管理软件等作为深度的学习的系统支撑平台,也是机器学习领域的必备技术。天云软件作为国内较早做云计算、分布式集群计算、集群调度管理软件等的公司,在机器学习系统支撑平台上也有自己的独特的理解与实现。因此,本次分享将作为一个系列,内容罗列如下:

第1篇:深度学习简介,GPU计算的原理,分布式机器学习原理to see see

第2篇:分布式深度学习的两种集群管理与调度的实现方式简介(to see see again); 

第3篇:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度;

第4篇:分布式机器学习的集群方案介绍之HPC实现。

 

本次介绍第3篇—分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

背景资料

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


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


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

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


应用领域

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


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


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

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


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


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

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

Kubernetes 1.3中支持GPU的实现

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


专题三:分布式机器学习集群方案介绍之基于Kubernetes的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其实只支持两个值,分别是01,我们通过下面代码就可以看出来:


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度


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

Kubernetes 1.6中支持GPU的实现

Kubernetes1.6中更全面的提供了对Nvidia品牌GPU的支持,保留了Kubernetes1.3中针对Nvidia品牌GPU的α特性:alpha.kubernetes.io/nvidia-gpu,但是在启动kubelet的时候,去掉了参数–experimental-nvidia-gpu,改成了通过配置Acceleratorstrue来启动这个α特性,完整的启动参数是–feature-gates=”Accelerators=true”


Kubernetes1.3中只能利用节点上的一颗Nvidia GPU,但是在Kubernetes1.6中会自动识别节点上的所有Nvidia GPU,并进行调度。


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

从上面代码中就可以看出来,在1.6中可以获取节点中所有NvidiaGPU设备。


下面是1.6中在kubelet中增加的Nvidia GPU相关结构体:

专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

nvidiaGPUManager这个结构体中,allGPUs变量表示这个节点上所有的GPU信息;allocated变量表示这个节点上已经被分配使用的GPU信息,这个allocated变量是一个podGPUs结构体变量,用来表示POD同已使用GPU的对应关系;dockerClient变量是docker接口变量,用来表示所有使用GPUdockeractivePodsLister变量表示这个节点上所有活动状态的POD,通过这个变量,可以释放已经处于终止状态POD所绑定的GPU资源。


KubernetesNvidia GPU这个特性只是在容器是docker的时候才生效,如果容器使用的是rkt,是无法使用到Nvidia GPU的。


1.6中可以参照下面样例使用Nvidia GPU


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度


可以看到,在1.6中使用GPU的时候,不同docker之间是无法共享GPU的,也就是说每个docker都会独占整个GPU,而且其实还需要Kubernetes集群中所有节点上面的Nvidia GPU类型都是相同的,如果在一个集群中有的不同节点上面的Nvidia GPU类型不同,那么还需要给调度器配置节点标签和节点选择器,用来区分不同Nvidia GPU类型的节点。


在节点启动时,可以指明Nvidia GPU类型,并且作为节点标签传递给kubelet,如下所示:


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度 

在使用的时候,可以参考下面样例:


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度 

在这个样例中,利用到了节点亲和性规则,保证POD只能使用GPU类型是“Tesla K80”“Tesla P100”的节点。


如果已经在节点上安装了CUDA(Compute Unified Device Architecture,是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构以及GPU内部的并行计算引擎),那么POD可以通过hostPath卷插件来访问CUDA库:


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

未来展望

以后会逐渐完善这个α特性,让GPU成为Kubernetes中原生计算资源的一部分,而且会提高使用GPU资源的方便性,还会让Kubernetes自动确保使用GPU的应用可以达到最佳性能。


专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度


随着机器学习的火热,为了支撑各种以GPU为主的机器学习计算平台,相信KubernetesGPU处理上还会继续快速完善,逐渐成为机器学习的底层编排架构。

-END-

相关阅读:


专题一:深度学习简介,GPU计算的原理,分布式机器学习原理


专题二:分布式深度学习的两种集群管理与调度的实现方式简介

专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

满满干货,除了我司大牛,还力邀阿里云亚信集团技术大牛技术分享,倒计时5天。

名额有限,点击阅读原文直达报名通道!

专题三:分布式机器学习集群方案介绍之基于Kubernetes的GPU调度

no comments
Share