查看原文
其他

深度学习:基于K8S的分布式Tensorflow系统

岑鹏浩 IT大咖说 2019-03-29


内容来源:2017年6月10日,才云 (Caicloud )高级软件工程师岑鹏浩在“Kubernetes Meetup 中国 2017【南京站】”进行《基于Kubernetes的分布式Tensorflow系统》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:3718 | 9分钟阅读


摘要

虽然TensorFlow已经成为了实现深度学习算法最受欢迎的工具之一,但要将其应用于海量数据上仍然存在效率问题。为了提高TensorFlow的运行速度,我们将TensorFlow并行化的跑在了Kubernetes集群上。在本次讲座中将介绍如何使用Kubernetes管理可使用CPU和GPU的TensorFlow集群。


嘉宾演讲视频及PPT回顾:http://t.cn/RnVeXX1


我今天的分享,第一个先介绍下什么是深度学习,有一个什么样的历史,包括它现在的一些现状;第二个是TaaS的简介;最后是分布式Tensorflow系统是如何跑在Kubernetes上的。


深度学习的背景

第一张图,大家应该都知道是什么事情吧?就是在浙江乌镇举行的AlphaGo和柯洁的围棋比赛,柯洁是0:3失败,AlphaGo就是用的深度学习的架构。右边是Google自动驾驶的一个项目,大家也应该比较熟悉,它其实也是基于深度学习来完成的一个项目。


左边是一个图像视频出来的效果,大家可以看一下,你告诉它一张图片,它可以在这张图片里面自动标识出来图片里面有东西,不同的颜色是代表不同的东西,左边有两把椅子,有一只狗和一个小孩。这个背后也是用的深度学习的东西。


这个里面有很多庞大的一些图片的数据,你可以基于它的数据去训练你的模型,它也可以给出一些测试的数据,你可以根据它的测试数据来验证你的模型的准确率。右边一个就是图片识别理念的变化,每年会举办图片识别的比赛,包括学术界都会来验证他们深度学习的效果。大家可以看到2010年、2012年之前,这个错误率是在28%、26%的一个数值,当图像识别出来以后,错误率在大幅度下降。这边是有一个5.1%,这个是人类自己识别的错误率。大家发现2015年之后机器的识别错误率明显低于人类。


深度学习的实现

深度学习是怎么做的呢?其实简单地概括来讲,就是三个步骤。


第一个步骤是数据的准备,大家可以理解为一些特征的提取,包括去分析你到底要解决什么问题。比如刚才那个例子,就是我怎么样让机器来识别一张图片里面有什么样的东西,这就是具体的实际问题。当你的数据准备好以后,你要准备你训练的数据以及你测试的数据。


当你的数据准备好以后,你要准备你训练的数据以及你测试的数据。当你的数据准备好了之后,下面就是一些训练的工作,其实就是不断地优化你的模型,让它不断地接近你的预期,当你的预期比较满足了,你就可以把这个模型打包成一个产品,真正地提供一个服务。


这个数据准备好后,就通过一个模型训练,训练好了之后打包,就是一个很简单的步骤流程。


训练模型

模型大家可以简单地理解为一个数据公式,大家比较好理解。训练的过程,其实X就是一些输入,就是我一些训练的数据,我把X传给这样一个方程,A和B是我要找到的两个值,大家可以认为是我训练的一个结果。就是我要找到一个非常满意的那个B,让这个Y等于我的一个预期。


训练的过程就是不断地把这个X值去调整,不断地去评估Y的值,这样经过很多轮迭代之后,就可以把Y的值出来的结果和我们的预期相符。这样我们就认为一次训练就结束了。当然实际在工作中可能这会是一个不断优化的过程,真正的一个模型可能它的参数,就是A和B可能是成千上万的。我们今天讲的主要就是训练这一块的内容,前面的数据准备和后面的模型托管基本上没有涉及到。


TensorFlow Introduction


刚才说了这个深度学习的背景,还有它的一些简单的东西,不知道大家有没有一个基础的认识。


TensorFlow是深度学习的框架,它支持的语言很多,也支持分布式的东西。有人问,怎么用一句话来概括TensorFlow的特点?TensorFlow就像是深度学习里的积木,你可以通过这套积木,来设计你想要的汽车也好,房子也好,还有很多很多东西。


学术界可以用这套积木来搭建设计很精美的模型,来展示给大众来看一下。工业界也可以用这套积木来构建一个很稳定的产品,把他们的一些对外的服务提供出来。


所以这里会有一个特点,就是它兼顾着学术界和工业界,这也是它能在很短的时间内迅速推广的一个比较重要的原因。这边列了一些它的好处,包括它内嵌了很多深度学习的算法和模型,大家入手会比较容易。


TensorFlow可以跑在很多硬件的平台上面,包括CPU、GPU和TPU,TPU是Google专门用来跑TensorFlow的一个服务器,AlphaGo也是跑在这个上面的,所以说这个平台的一些可扩展性是非常好的。


举个例子,你现有手机上的翻译软件,其实就是把TensorFlow运行在手机上面,然后训练了一个翻译模型,最后可以帮助你算出来一些结果。


这边列了一下它支持的语言,它的语言库也是很丰富的,C++是比较好的,JAVA也有。这个是官网的一个截图,包括京东、小米都在用这个TensorFlow。


一个好的开源框架其实跟它的社区是密切相关的,这个是列出来TensorFlow常用的一些深度学习的社区活跃度,TensorFlow是在2015年10月份开源的,大家可以看到很明显的一个上升的曲线。Google开源了这个之后,社区的活跃度提升是非常明显的,它已经远远超过了其他的一些开源的框架。

简单地运行一个TensorFlow程序


TensorFlow的一些历史我们就讲到这里,现在我们简单地运行一个TensorFlow的程序,这边列出了一个docker的镜像,这个也很简单,把两边端口运行出来,这个是我们才云自己做的东西。


这个镜像跑会有两个效果,会启用一个在线的编辑器,可以在里面运行的代码。第二个是启用了一个可视化的工具,可以看出来你的模型长什么样子。


我们这边有一个Hello World的程序,就是一个简单的代码,最重要的就是session,这个是很关键的一个东西。它怎么样说明变量呢?其实它会说明一些常量或者一些变量,都是有一些很常见的说明方法。这边我们定义了input1和input2。这里有一个需要注意的地方就是要对这个变量进行初始化,初始化之后才能使用这个变量。第二个是我加入了一个算法,把我们刚才定义的input1和input2加起来,是一个很简单的例子。这边定义了一个writer,最后一句就是真正开始运行起来了。


运行完了之后,刚才也讲到了tensorboard,这个是默认的一个端口,启起来之后,右边是一个目录的效果,大家可以看到inprt2,这边有一个加法。你把每个图形展开之后就是这样一个东西,这是生成随机数的方法,里面都是它生成的细节。当这个模型很复杂的时候,这个东西是很有帮助的,可以很直观地来理解这些东西之间的关系,这样看起来会很方便。


Inception—v3模型

刚才也说了TensorFlow它开源,它很快,它支持的框架很多等众多优点。但其实它也不是万能的,每一个新的东西出来它都是解决了部分的问题,同样它也会带来一些新的问题。


我们可以看到深度学习对于计算资源的需求是非常庞大的,现在有一个叫Inception—v3的模型,这个模型它里面大概有2500万的参数需要去调整。当它执行这样一次训练过程,大概需要执行50亿次的加法或者是乘法的操作,当你真正地遇到实际问题的时候,你的模型就会非常的庞大,它带来的实际计算的需求也会非常惊人。


还有就是它的神经网络的模型是非常复杂的,它很难去优化,这边举出一个例子,我们把刚才Inception—v3的模型,跑一遍大概需要半年时间,这个在我们真正的工作当中是不能容忍的,半年的时间才知道我这个模型跑出什么结果,公司可能都已经不存在了。


TensorFlow+Kubernetes


我们这边其实利用了TensorFlow和Kubernetes结合来解决了真正遇到的问题,我们接下来会给大家简单地介绍一下怎样把一个分布式的TensorFlow跑起来。


我们先讲一下在单机上面怎么跑,我们这边有一个机器,它的名字叫job:local,它其实是一个task:0,它里面CPU和GPU各有一块。我们首先在CPU:0这一块有一个语法,然后会在GPU上面进行一个计算,这样会更快地得到我们的结果。


output简单地进行一个乘法,把这个和变量1做一个乘法,和变量2进行一个加法。我们同时要计算一下我们的损失函数,大家可以理解我用损失函数来评估我计算出来的结果和我预期之间的差,当这个差越小的时候说明它越接近我的预期。


我希望今天讲完之后大家起码知道TensorFlow是怎么回事,它做什么样的工作。


今天的分享就到这里,谢谢大家!

相关推荐


推荐文章

近期活动



点击【阅读原文】进入干货密道

文章已于修改

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存