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


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

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

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

摘要

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

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

深度学习的背景

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

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

这个里面有不少庞大的一些图片的数据,你能够基于它的数据去训练你的模型,它也能够给出一些测试的数据,你能够根据它的测试数据来验证你的模型的准确率。右边一个就是图片识别理念的变化,每一年会举办图片识别的比赛,包括学术界都会来验证他们深度学习的效果。你们能够看到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是怎么回事,它作什么样的工做。

今天的分享就到这里,谢谢你们!

相关文章
相关标签/搜索