一、引言
Yahoo在2016年2月左右开源了基于Spark/Hadoop的分布式深度学习框架—CaffeOnSpark,CaffeOnSpark被设计成为一个Spark深度学习包,Spark MLlib支持各种非深度学习算法用于分类、回归、聚类、推荐等,但目前缺乏深度学习这一关键能力,而CaffeOnSpark旨在填补这一空白。CaffeOnSpark API支持dataframes,以便易于连接准备使用Spark应用程序的训练数据集,以及提取模型的预测或中间层的特征,用于MLLib或sql数据分析。
那对于那些使用TensorFlow框架的人怎么办?。于是近期,Yahoo又开源了 TensorFlowOnSpark,这是一个大数据集群的分布式深度学习,将 TensorFlow 带到 Apache Spark 集群上。Yahoo 在博客上表示,深度学习(DL)近年来发展迅速,为了从大量的数据中挖掘价值,需要部署分布式深度学习。现有的深度学习框架,往往需要设立单独的深度学习数据组。这强迫我们为同一个机器学习流水线创建多个程序。维护多个独立的数据组,要求我们在它们之间传输海量数据集——这导致不必要的系统复杂性和端到端的学习延迟。
TensorFlowOnSpark 支持所有类型的 TensorFlow 程序,实现异步和同步训练和推理。它支持模型并行性和数据并行性,以及 TensorFlow 工具,如 Spar k集群上的 TensorBoard。任何 TensorFlow 程序都可以轻松地移植到 TensorFlowOnSpark 上。通常,只需要修改十行以内的 Python 代码。TFoS 支持张量(tensor)在 TensorFlow 处理过程中(计算节点和参数服务节点)信息的直接沟通。过程到过程(Process-to-process)的直接沟通机制使 TFoS 项目很容易在增加的机器上进行扩展。TFoS 不需要 Spark 驱动器(driver)参与到张量沟通中来,因此也就与具备类似于独立 TensorFlow 群集的扩展能力。
TensorFlowOnSpark 支持对 Apache Spark 集群进行分布式 TensorFlow 训练和推断。它试图最小化在共享网格上运行现有 TensorFlow 程序所需的代码更改量。 它的 Spark 兼容 API 通过以下步骤来管理 TensorFlow 集群:
1、预留 - 为每个执行程序保留 TensorFlow 进程的端口,并启动数据/控制消息的侦听器。
2、启动 - 在执行器上启动 Tensorflow 主函数。
3、数据摄取
1)Readers & QueueRunners - 利用 TensorFlow 的 Reader 机制直接从 HDFS 读取数据文件。
2)Feeding - 使用 Feed_dict 机制将 Spark RDD 数据发送到 TensorFlow 节点。 请注意,需利用 Hadoop 输入/输出格式访问 HDFS 上的 TFRecords。
4、关闭 - 关闭执行器上的 Tensorflow 工作线程和 PS 节点。
二、standalone模式安装部署
本节解释如何在一个standalone模式的spark集群上部署TensorFlowOnSpark。关于saprk的安装和启动就不多做解释了。
2.1 CloneTensorFlowOnSpark 代码
首先我们从github上cloneTensorFlowOnSpark源代码
[plain] view plain copy
  1. gitclone--recurse-submoduleshttps://github.com/yahoo/TensorFlowOnSpark.git
  2. cdTensorFlowOnSpark
  3. gitsubmoduleinit
  4. gitsubmoduleupdate--force
  5. gitsubmoduleforeach--recursivegitclean-dfx
  6. cdTensorFlowOnSpark
  7. exportTFoS_HOME=$(pwd)
  8. pushdsrc
  9. zip-r../tfspark.ziP*
  10. popd
2.2 安装spark
下载&安装Apache Spark 1.6.0以上的版本,安装过程可以参考http://spark.apache.org/downloads.html
2.3 安装TensorFlow
使用TensorFlowOnSpark,则必须要安装TensorFlow,具体的安装方式见![](https://www.tensorflow.org/get_started/os_setup)
三、测试
3.1 启动 Spark集群
启动 master
copy
${SPARK_HOME}/sbin/start-master.sh
3.2 测试集准备
我们使用examples下的MNIST数据集进行测试,转换下MNIST的格式
copy
rm-rfexamples/mnist/csv
  • ${SPARK_HOME}/bin/spark-submit\
  • --master${MASTER}\
  • ${TFoS_HOME}/examples/mnist/mnist_data_setup.py\
  • --outputexamples/mnist/csv\
  • --formatcsv
  • lsexamples/mnist/csv/*/*

  • 3.3 训练分布式数据集MNIST(使用feed_dict)
    copy
    #rm-rfmnist_model
  • --py-files${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py\
  • --confspark.cores.max=${TOTAL_CORES}\
  • --confspark.task.cpus=${CORES_PER_WORKER}\
  • --confspark.executorEnv.JAVA_HOME="$JAVA_HOME"\
  • ${TFoS_HOME}/examples/mnist/spark/mnist_spark.py\
  • --cluster_size${SPARK_WORKER_INSTANCES}\
  • --imagesexamples/mnist/csv/train/images\
  • --labelsexamples/mnist/csv/train/labels\
  • --formatcsv\
  • --modetrain\
  • --modelmnist_model
  • ls-lmnist_model

  • 3.4 测试MNIST(使用feed_dict)
    copy
    #rm-rfpredictions
  • --imagesexamples/mnist/csv/test/images\
  • --labelsexamples/mnist/csv/test/labels\
  • --modeinference\
  • --formatcsv\
  • --modelmnist_model\
  • --outputpredictions
  • lesspredictions/part-00000


  • 3.5 结果
    copy
    2017-02-10T23:29:17.009563Label:7,Prediction:7
  • 2017-02-10T23:29:17.009677Label:2,Prediction:2
  • 2017-02-10T23:29:17.009721Label:1,Prediction:1
  • 2017-02-10T23:29:17.009761Label:0,Prediction:0
  • 2017-02-10T23:29:17.009799Label:4,Prediction:4
  • 2017-02-10T23:29:17.009838Label:1,Prediction:1
  • 2017-02-10T23:29:17.009876Label:4,248)"> 2017-02-10T23:29:17.009914Label:9,Prediction:9
  • 2017-02-10T23:29:17.009951Label:5,Prediction:6
  • 2017-02-10T23:29:17.009989Label:9,108); list-style:decimal-leading-zero outside; color:inherit; line-height:20px; margin:0px!important; padding:0px 3px 0px 10px!important"> 2017-02-10T23:29:17.010026Label:0,Prediction:0
  • <转>雅虎开源TensorflowOnSpark,Ubuntu配置安装TensorflowOnSpark的更多相关文章

    1. Swift 语言指南

      想快速找到优秀开源项目的开发者,可以访问我们额外整理的《Swift项目精选》。希望快速找到其中精选文章,可以访问《Swift文章精选》。其中包括:Swift概括,SwiftProgrammingLanguage,UsingSwiftwithCocoaandObjective-C2.SwiftProgrammingLanguage苹果官方文档:在线版(英文)|iBooks版(英文)爱好者翻译版:在线版(中文)By@Swift中文翻译组|PDF版By@老码团队|百度阅读版相关文档BasicOperators-

    2. 2015年科技巨头的十个开源产品,不只是.NET、Swift

      2015年科技巨头的十个开源产品,不只是.NET、Swift发表于2015-12-0710:37|8245次阅读|来源InfoWorld|34条评论|作者JonGold,NetworkWorld产品.NETGitHubHadoop开源摘要:科技巨头将内部产品发布到开源社区,这可是相当时髦的举动。结果很可能是主要科技公司更加频繁地向开源社区发布最新的免费代码。下面是10个最值得注意的产品。Swift甚至连苹果这样众所周知对其知识产权缄口不言的公司也逐渐融入了这种精神,在今年的WWDC上发布了开源编程语言Sw

    3. Swift 正式开源, 包括 Swift 核心库和包管理器

      Swift团队很高兴宣布Swift开始开源新篇章。Swift编译器项目解析Swift语法,产生语义判断来帮助编写正确代码,利用LLVM生成机器指令。Swfit标准库项目包含所有核心类型和基础函数。Swift团队今天除了开源Swfit之外,还开源了两个项目:Swfit核心库项目和全新的Swift包管理器项目。Swift包管理器Swift包管理器是全新的项目,可以创建一个强大,用户友好的工具来构建和共享Swift代码。

    4. Swift开源的介绍

      Swift是由多种不同的项目组成的,提供一个构建软件的完整生态系统。Swift编译器项目解析Swift语法,产生语义判断来帮助编写正确代码,利用LLVM生成机器指令。Swift团队除了开源Swfit之外,还开源了两个项目:Swfit核心库项目全新的Swift包管理器项目。一.Swift包管理器Swift包管理器是全新的项目,可以创建一个强大,用户友好的工具来构建和共享Swift代码。SwiftPackageManager当前还是早期开发阶段。二.Swift核心库Swift核心库项目是更高级别的APIs集合

    5. 苹果贴放出Swift语言的源码

      前一段时间苹果贴放出Swift语言的源码,宣布该语言正式开源。其中还包括Swfit核心库项目和全新的Swift包管理器项目。Swift的开源是程序开发者的又一个福音,攻城狮们可以利用SWIFT语言做更多的事情。Swift语言项目的代码分为几个开源库,全部托管在GitHub上。

    6. 苹果终于开源Swift啦

      内容简介苹果终于开源Swift啦对大家和苹果自己都是件大好事刚被扎克伯格生女儿和捐款刷屏,略有一会喘息机会的朋友圈又被苹果开源Swift的新闻刷屏了。其实苹果宣布要开源Swift语言有一段时间了,不过总算兑现承诺。Swift的出现,让这个转换的门槛成为历史。Swift开源,必然导致众多开发者对其本身的深入参与,以Swift目前的优良特性,会有高手把它迁移至Linux、Windows甚至Android等平台。苹果官方目前没有说要用Swift代替Objective-C,但是做iOS开发的默认语言就是Swift

    7. 我的开源之旅

      你好GitHub与大多数人一样,我一开始只是想写一些代码并丢到GitHub上,这就是我的开源初体验。我在GitHub上的第一个项目其实只是一些测试,就像我之前写的一些玩具应用一样,仅仅是为了实验一些新概念或者一个新的库。

    8. 开源 Swift AutoLayout 框架 SnapKit 介绍

      utm_source=tuicool&utm_medium=referral自从水果发布了5代,苹果为了适配多种屏幕尺寸,搞出了一个所谓的AutoLayout来解决问题,iOS程序员们从此走上了苦逼的适配路。SnapKit能搞定什么SnapKit是Masonry的Swift版,项目发布至今大约1年的时间,已经在github上有两千多个star,当然了,这其中也少不了”他爹”Masonry给他打的那些广告。如果你还记得你在StoryBoard里面拉的那些线条,那你也一定记得其中constriants的表示方

    9. 使用 Swift语言进行 Hadoop 数据流应用程序开发

      如果您发现了问题,或者希望为改进本文提供意见和建议,请在这里指出.在您开始之前,请参阅目前待解决的问题清单.简介本项目包括两类Hadoop流处理应用程序:映射器mapper和总结器reducer。如上所示,在Hadoop上编写流处理程序是一个很简单的工作,也不需要依赖于特定的软件体系。

    10. 教你如何用Swift写个json转模型的开源库

      在Swift中使用其API时其实是很不swift的。所以现在我们就用Swift3.0来写一个swiftstyle的json转模型的库吧。所以我们首先要解决的问题是:如何在Swift将字典转成模型。MirrorSwift的反射机制是基于一个叫Mirror的struct来实现的。如果你看看我们josn转模型的方法定义就能明白了。由于我们json转模型的model是继承自NSObject的,所以不用在每个类中显示地实现。对于User类来说,desc属性对应json的descriptionkey,所以我们还要进行

    随机推荐

    1. crontab发送一个月份的电子邮件

      ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

    2. 模拟两个ubuntu服务器计算机之间的慢速连接

      我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

    3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

      我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

    4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

      我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

    5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

      &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

    6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

      我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

    7. ubuntu – vagrant无法连接到虚拟框

      当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

    8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

      我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

    9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

      我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

    10. 检查ubuntu上安装的rubygems版本?

      如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

    返回
    顶部