一、引言
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 集群:
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 节点。
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源代码
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
3.2 测试集准备
我们使用examples下的MNIST数据集进行测试,转换下MNIST的格式
3.3 训练分布式数据集MNIST(使用feed_dict)
3.4 测试MNIST(使用feed_dict)
3.5 结果