分布式深度学习框架TensorFlowOnSpark

TensorFlowOnSpark分析

TensorFlowOnSparkhttps://github.com/yahoo/TensorFlowOnSpark)项目是由Yahoo开源的一个软件包,能将TensorFlowhttps://github.com/tensorflow/tensorflow)与Spark结合在一起使用,为ApacheHadoopApacheSpark集群带来可扩展的深度学习功能。使Spark能够利用TensorFlow拥有深度学习和GPU加速计算的能力。传统情况下处理数据需要跨集群(深度学习集群和Hadoop/Spark集群),Yahoo为了解决跨集群传递数据的问题开发了TensorFlowOnSpark项目。TensorFlowOnSpark目前被用于雅虎私有云中的Hadoop集群,主要进行大规模分布式深度学习使用。


TensorFlowOnSpark在内部实现了与Tensorflow集群类似的可扩展性。在下图中可以看出,SparkDriver端程序并不会参与TensorFlow内部相关的计算和处理,其设计思路像是一个TensorFlow集群运行在了Spark上,在每个Sparkexecutor中启动TensorFlow组件,然后通过gRPCRDMA 方式进行数据传递与交互。


TensorFlowOnSpark程序运行时会通过如下步骤创建并管理TensorFlow集群(Spark程序会创建一个TensorFlow集群,TensorFlow的相关组件运行在Sparkexecutor内):

  • Reservation 为每个TensorFlowexecutor预留端口,并启动“数据/控制消息”的监听程序。

  • Startup 启动TensorFlow的主程序

  • Data ingestion

    • Readers &QueueRunners 利用TensorFlowReader机制直接从HDFS读取数据文件。

    • Feeding -使用HadoopInputFormat/OutputFormat 访问HDFS上的TFRecords数据,然后利用feed_dict机制将SparkRDD数据发送到TensorFlow节点。

  • Shutdown -关闭executor上的Tensorflowworker上的线程和ParameterServer节点。


官方给出TensorFlowOnSpark目前支持的特性如下:

  • 轻松迁移所有现有的TensorFlow程序,修改代码小于10;

  • 支持所有TensorFlow功能:同步/异步训练,模型/数据并行,inferencingTensorBoard;

  • Server端到Server端直接通信提升处理速度(RDMA启用时);

  • 允许由Spark分发或由TensorFlow拉取HDFS和其他资源上的数据;

  • 轻松整合现有的数据处理流程和机器学习算法(如MLlibCaffeOnSpark;

  • 轻松在云或内部部署:CPU& GPU, Ethernet and Infiniband.


我们可以使用两种方法来提取训练数据和预测:

  • TensorFlowQueueRunnersTensorFlowOnSpark利用TensorFlow的文件读取器和QueueRunners直接从HDFS文件读取数据。Spark不涉及访问数据。

  • Spark Feeding:通过SparkRDD将数据传输到每个Sparkexecutor,然后通过feed_dict将数据传输到TensorFlowgraph中。


开发的TFoSTensorFlowOnSpark)程序可以直接使用SparkSpark-submit命令提交到集群上,在提交时程序时,用户可以指定Sparkexecutor的个数,每个executor上有几个GPU,“参数服务器(ParameterServer)”的个数。另外用户还可以指定TensorBoardRDMA是否使用,命令如下:

sparksubmit

–master${MASTER} \

${TFoS_HOME}/examples/slim/train_image_classifier.py\

–model_nameinception_v3 \

–train_dirhdfs://default/slim_train \

–dataset_dirhdfs://default/data/imagenet \

–dataset_nameimagenet \

–dataset_split_nametrain \

–cluster_size${NUM_EXEC} \

–num_gpus${NUM_GPU} \

–num_ps_tasks${NUM_PS} \

–sync_replicas\

–replicas_to_aggregate${NUM_WORKERS} \

–tensorboard\

–rdma


另外TFoS还提供了更高级的PythonAPI

  • reserve() … construct aTensorFlow cluster from Sparkexecutors

  • start() … launch Tensorflowprogram on the executors

  • train() or TFCluster.inference()… feed RDD data to TensorFlowprocesses

  • TFCluster.shutdown() … shutdown Tensorflow execution onexecutors


优点

  • Yahoo已经在自己的云上实践并使用,可以用于生产

  • 轻松整合现有的数据处理流程和机器学习算法

  • 支持所有TensorFlow功能

  • 轻松移植现有TensorFlow程序到Spark集群上

  • 学习成本较低

缺点

  • 缺少相关文档与使用教程

  • 代码刚开源,社区反馈与支持力度未知


发布了183 篇原创文章 · 获赞 45 · 访问量 17万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览