<转>雅虎开源TensorflowOnSpark,Ubuntu配置安装TensorflowOnSpark

本文介绍如何在Spark集群上部署与测试TensorFlowOnSpark,实现分布式深度学习任务。文章详细展示了安装配置流程及使用MNIST数据集进行训练与测试的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引言
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 Clone TensorFlowOnSpark 代码
首先我们从github上cloneTensorFlowOnSpark源代码
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. git clone --recurse-submodules https://github.com/yahoo/TensorFlowOnSpark.git  
  2. cd TensorFlowOnSpark  
  3. git submodule init  
  4. git submodule update --force  
  5. git submodule foreach --recursive git clean -dfx  
  6.   
  7. cd TensorFlowOnSpark   
  8. export TFoS_HOME=$(pwd)  
  9. pushd src  
  10. zip -r ../tfspark.zip *  
  11. 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
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ${SPARK_HOME}/sbin/start-master.sh  
3.2 测试集准备
我们使用examples下的MNIST数据集进行测试,转换下MNIST的格式
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. rm -rf examples/mnist/csv  
  2. ${SPARK_HOME}/bin/spark-submit \  
  3. --master ${MASTER} \  
  4. ${TFoS_HOME}/examples/mnist/mnist_data_setup.py \  
  5. --output examples/mnist/csv \  
  6. --format csv  
  7. ls examples/mnist/csv/*/*  

3.3 训练分布式数据集MNIST(使用feed_dict)
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # rm -rf mnist_model  
  2.     ${SPARK_HOME}/bin/spark-submit \  
  3.     --master ${MASTER} \  
  4.     --py-files ${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py \  
  5.     --conf spark.cores.max=${TOTAL_CORES} \  
  6.     --conf spark.task.cpus=${CORES_PER_WORKER} \  
  7.     --conf spark.executorEnv.JAVA_HOME="$JAVA_HOME" \  
  8.     ${TFoS_HOME}/examples/mnist/spark/mnist_spark.py \  
  9.     --cluster_size ${SPARK_WORKER_INSTANCES} \  
  10.     --images examples/mnist/csv/train/images \  
  11.     --labels examples/mnist/csv/train/labels \  
  12.     --format csv \  
  13.     --mode train \  
  14.     --model mnist_model  
  15.   
  16.     ls -l mnist_model  

3.4 测试MNIST(使用feed_dict)
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. # rm -rf predictions  
  2. ${SPARK_HOME}/bin/spark-submit \  
  3. --master ${MASTER} \  
  4. --py-files ${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py \  
  5. --conf spark.cores.max=${TOTAL_CORES} \  
  6. --conf spark.task.cpus=${CORES_PER_WORKER} \  
  7. --conf spark.executorEnv.JAVA_HOME="$JAVA_HOME" \  
  8. ${TFoS_HOME}/examples/mnist/spark/mnist_spark.py \  
  9. --cluster_size ${SPARK_WORKER_INSTANCES} \  
  10. --images examples/mnist/csv/test/images \  
  11. --labels examples/mnist/csv/test/labels \  
  12. --mode inference \  
  13. --format csv \  
  14. --model mnist_model \  
  15. --output predictions  
  16.   
  17. less predictions/part-00000  


3.5 结果
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 2017-02-10T23:29:17.009563 Label: 7, Prediction: 7  
  2. 2017-02-10T23:29:17.009677 Label: 2, Prediction: 2  
  3. 2017-02-10T23:29:17.009721 Label: 1, Prediction: 1  
  4. 2017-02-10T23:29:17.009761 Label: 0, Prediction: 0  
  5. 2017-02-10T23:29:17.009799 Label: 4, Prediction: 4  
  6. 2017-02-10T23:29:17.009838 Label: 1, Prediction: 1  
  7. 2017-02-10T23:29:17.009876 Label: 4, Prediction: 4  
  8. 2017-02-10T23:29:17.009914 Label: 9, Prediction: 9  
  9. 2017-02-10T23:29:17.009951 Label: 5, Prediction: 6  
  10. 2017-02-10T23:29:17.009989 Label: 9, Prediction: 9  
  11. 2017-02-10T23:29:17.010026 Label: 0, Prediction: 0  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值