雅虎开源TensorflowOnSpark,Ubuntu配置安装TensorflowOnSpark

一、引言
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源代码
	git clone --recurse-submodules https://github.com/yahoo/TensorFlowOnSpark.git
	cd TensorFlowOnSpark
	git submodule init
	git submodule update --force
	git submodule foreach --recursive git clean -dfx

	cd TensorFlowOnSpark 
	export TFoS_HOME=$(pwd)
	pushd src
	zip -r ../tfspark.zip *
	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
${SPARK_HOME}/sbin/start-master.sh
3.2 测试集准备
我们使用examples下的MNIST数据集进行测试,转换下MNIST的格式
    	rm -rf examples/mnist/csv
    	${SPARK_HOME}/bin/spark-submit \
    	--master ${MASTER} \
    	${TFoS_HOME}/examples/mnist/mnist_data_setup.py \
    	--output examples/mnist/csv \
    	--format csv
    	ls examples/mnist/csv/*/*

3.3 训练分布式数据集MNIST(使用feed_dict)
	# rm -rf mnist_model
    	${SPARK_HOME}/bin/spark-submit \
    	--master ${MASTER} \
    	--py-files ${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py \
    	--conf spark.cores.max=${TOTAL_CORES} \
    	--conf spark.task.cpus=${CORES_PER_WORKER} \
    	--conf spark.executorEnv.JAVA_HOME="$JAVA_HOME" \
    	${TFoS_HOME}/examples/mnist/spark/mnist_spark.py \
    	--cluster_size ${SPARK_WORKER_INSTANCES} \
    	--images examples/mnist/csv/train/images \
    	--labels examples/mnist/csv/train/labels \
    	--format csv \
    	--mode train \
    	--model mnist_model

    	ls -l mnist_model

3.4 测试MNIST(使用feed_dict)
    	# rm -rf predictions
    	${SPARK_HOME}/bin/spark-submit \
    	--master ${MASTER} \
    	--py-files ${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py \
    	--conf spark.cores.max=${TOTAL_CORES} \
    	--conf spark.task.cpus=${CORES_PER_WORKER} \
    	--conf spark.executorEnv.JAVA_HOME="$JAVA_HOME" \
    	${TFoS_HOME}/examples/mnist/spark/mnist_spark.py \
    	--cluster_size ${SPARK_WORKER_INSTANCES} \
    	--images examples/mnist/csv/test/images \
    	--labels examples/mnist/csv/test/labels \
    	--mode inference \
    	--format csv \
    	--model mnist_model \
    	--output predictions

    	less predictions/part-00000


3.5 结果
	2017-02-10T23:29:17.009563 Label: 7, Prediction: 7
	2017-02-10T23:29:17.009677 Label: 2, Prediction: 2
	2017-02-10T23:29:17.009721 Label: 1, Prediction: 1
	2017-02-10T23:29:17.009761 Label: 0, Prediction: 0
	2017-02-10T23:29:17.009799 Label: 4, Prediction: 4
	2017-02-10T23:29:17.009838 Label: 1, Prediction: 1
	2017-02-10T23:29:17.009876 Label: 4, Prediction: 4
	2017-02-10T23:29:17.009914 Label: 9, Prediction: 9
	2017-02-10T23:29:17.009951 Label: 5, Prediction: 6
	2017-02-10T23:29:17.009989 Label: 9, Prediction: 9
	2017-02-10T23:29:17.010026 Label: 0, Prediction: 0


ps 文中代码和结果参考的是 https://github.com/yahoo/TensorFlowOnSpark下的代码。






评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值