当spark遇上tensorflow分布式深度学习框架原理和实践

蓝色de叶子 蓝色de叶子     2022-11-03     730

关键词:

近年来,机器学习和深度学习不断被炒热,tensorflow 作为谷歌发布的数值计算和神经网络的新框架也获得了诸多关注,spark和tensorflow深度学习框架的结合,使得tensorflow在现有的spark集群上就可以进行深度学习,而不需要为深度学习设置单独的集群,为了深入了解spark遇上tensorflow分布式深度学习框架的原理和实践,飞马网于4月10日晚,邀请到先后就职于百度、腾讯,负责过多个大数据研发工作的李曙鹏老师进行线上直播,主要向我们介绍spark和深度学习的基本原理、spark与深度学习领域相结合的最新的发展方向,以及如何结合tensorflowonspark开源框架,构建一个分布式图像分类模型训练。

技术分享图片

以下是本次分享实录:

技术分享图片

 

上面这张图片显示的是本次直播所针对的受众和可能的收益,大家可以了解一下。

一.大数据的价值

什么是大数据的价值呢?李老师根据自身以往的项目经验和互联网主流的大数据应用场景,大致总结了以下三种价值。

技术分享图片 

二.计算的核心问题

结合上面所说的大数据的价值和应用场景,我们把它归纳为一条计算流:首先从数据存储当中经过数据加工、抽取,得到提炼后的数据、特征,然后进行进一步的模型训练,得到模型。

技术分享图片 

这条计算流的核心问题可以归纳为y=f(x)这个函数。对于第一阶段的数据ETL和查询来讲,主要解决的是数据源对接、实时数据整合、数据归一化、特征生成等应用场景,它的计算框架代表是spark,输入是f()\x,输出是y,非常适合做分布式数据计算。第二阶段的模型训练,主要有模型建模、反向计算、梯度更新、超参数调优、效果评估等流程,它的计算框架代表是tensorflow,输入是x\y,输出是f(),更多关注的是模型建模和分布式参数更新。

接下来,我们就针对以上两个框架做一些基本原理的介绍和概述。

三.spark概述

1.spark的核心抽象:RDD

为什么要做RDD这样的抽象呢?主要是因为它的一致性、高效并行、容错机制,RDD屏蔽了分布式的复杂性,使开发程序时简单如写单机程序。

RDD也提供了一些操作,如transform和action,通过对RDD操作业务的封装以及计算逻辑,我们就会形成一个大的DAG计算图(参考下图右)。

技术分享图片 

2.spark的大数据生态:

这部分是讲spark的数据生态,包括它支持的组件库、部署环境和数据来源。

技术分享图片 

3.Spark SQL和Spark Streaming:

我们简要介绍一下这两个比较重要的组件,首先是spark sql,它的典型应用场景是OLAP多维分析,它提供了一个DataFrame抽象接口,等价于RDD,如下图所示。

技术分享图片 

Spark Streaming是spark的一个实时处理组件,它的典型应用场景是实时特征处理,它提供了一个Dstreams抽象接口,直观上理解Dstreams就是一个持续的RDD,如下图。

技术分享图片 

四.Deep Learning概述

下面,我们一起来了解关于Deep Learning的相关内容。

1.Deep Learning模型:

第一个模型是非常经典的多层感知器模型(MLP)。首次这个模型有一个输入层,在输入层后面有两个隐藏层,最后是输出层。这个模型的特点是全连接,在最后输出之前有一个Softmax函数,它的作用是把最终的权值转换为最直观的概率。理论上来讲,MLP这种带有隐藏层的神经网络可以拟合一切的函数,但它的计算量很大,所以传统的MLP模型并不适合去更深层次地加深网络结构。

技术分享图片 

真正把神经网络推向更深层次网络结构模型的是CNN卷积神经网络,它通常应用在图像分类等领域,这里有一个概念—感受野,所谓感受野就是空间局部性的考虑,它认为图像上比较接近的图像领域具有更强的相关性,图像上更远的像素之间相关性更弱,基于感受野的考虑,它把全连接层替换为卷积操作。

卷积操作的特点是可以将局部特征抽象化,另外大幅减少计算量,以便加深神经网络,丰富语义表达。

技术分享图片 

2.Tensorflow模型建模与训练:

介绍完深度学习模型后,回到我们的tensorflow部分,首先我们了解一下tensorflow是怎样来做模型建模的。如下图所示,X是Tensor,W和b是Variable,Matmul、Add、ReLU都是Operator,最后组成一个神经网络图Graph。

技术分享图片 

其次,我们来了解一下tensorflow训练的核心问题—拟合f(),主要通过反向梯度计算来拟合f(),反向梯度计算的目的是计算梯度和更新参数,这里涉及到Loss函数和最小化Loss。那么怎么去计算梯度呢?主要通过链式求导(看下图右)。一次链式求导只是一次的前向和后向的计算结果,在训练流程当中,我们通常批量计算,所以会涉及batch_size和epoch。

技术分享图片 

最后我们结合一个代码事例,回顾一下前面所讲的知识点:

技术分享图片 

我们以多层感知器模型MLP为例,首先需要创建一个模型,模型定义就是两个隐藏层加最后的输出层,定义好模型之后,我们需要定义损失函数,在这里它是对你的标签和预测输出进行的交叉熵的损失定义,然后选择一个optimizer的优化器来做优化训练,

在训练开始之前,你需要去调一个sess.run(init)对权值做一个随机初始化的过程,初始化之后,进入到我们的训练阶段。

3.Tensorflow分布式训练机制:

刚才介绍的是tensorflow怎么去定义模型以及怎么去做反向计算,那么,在大规模数据场景下,它又是怎样工作的?

技术分享图片 

Tensorflow本身提供了一些并行机制,第一个是模型并行机制,就是基于图去拆分(如上图左下),它会把一张大的图拆分成很多部分,每个部分都会在很多设备上去运行、计算。通常是针对一个节点无法存下整个模型的情况下,去对图进行拆分。

更多场景下我们的数据量会比较大,这时候就采用数据并行机制,在这种机制下tensorflow有两个角色,一个是参数服务器,负责参数的存储和交换更新,一个是工作节点,负责具体的模型计算。每个工作节点会负责它领域内的数据分片所对应模型参数的更新计算,同时它们又会向参数服务器去传递它所计算的梯度,由参数服务器来汇总所有的梯度,再进一步反馈到所有节点,根据参数服务器合并参数的方式又分为同步更新和异步更新,这两种更新方式各有优缺点,异步更新可能会更快速地完成整个梯度计算,而对于同步更新来讲,它可以更快地进行一个收敛,选择哪种方式取决于实际的应用场景。

五.Deep Learning On Spark

经过刚才的介绍,我们知道spark是一个分布式的通用计算框架,而以tensorflow为代表的deep learning是一个分布式模型训练框架,它更多专注在梯度计算,那为什么要将两者整合呢?整合的意义在哪里?意义就是能实现更好的分布式训练和数据传输。

技术分享图片 

针对分布式训练的场景,雅虎开源了TensorflowOnSpark的开源框架,它主要实现tensorflow能够与spark相结合做分布式训练。同时也有其它的一些机制,例如,CaffeOnSpark、MMLSpark(CNTK)、PaddleOnSpark。

TensorflowOnSpark解决的核心问题是将spark作为分布式tensorflow的底层调动机制,通过spark executor去把tensorflow的进程调动起来,这样在进行tensorflow训练时就不需要手动地去组建网络。它也提供了一个API,通过调TFCluster.run这样一个API,可以快速获得tensorflow的一个分布式训练环境。

技术分享图片 

除此之外TensorflowOnSpark还提供了基于RDD的数据并行机制,如下图所示。这套机制非常方便地集成了spark已有的RDD处理机制,可以更好地跟spark sql或spark streaming去做相应的集成。

技术分享图片 

然后进入到另外一个方向,叫做spark-deep-learning,是由spark的创始公司—Data Bricks发起的,它主要的目标是提供一些high-level的API,把底层的模型进行组件化,同时它期望可以兼容底层深度式学习框架。

技术分享图片 

这里有个“Transfer Learning as a Pipeline”的例子供大家了解,如下图所示:

技术分享图片 

 

TensorflowOnSpark Pipeline开发了两个API,一个是TFEstimator,另一个是TFModel,提供了这两个之后,你可以直接把它们集成到spark-deep-learning pipeline里面,进行进一步的训练。 

技术分享图片

六.TensorflowOnSpark案例实践

最后一部分,我们来进行案例实践介绍,我们要解决的是一个图像分类问题,这里采用了一个kaggle dataset,叫做花朵识别,有5个类别,4000多张图片,包括郁金香、太阳花、蒲公英、玫瑰和雏菊这五种花。把这些数据预先存储于MongoDB中。我们的案例实践是一个分布式解决方案,包括分布式数据获取、分布式训练、分布式评估。

技术分享图片 

以下几张图片是代码示例,简单了解一下:

技术分享图片 

技术分享图片 

技术分享图片 

技术分享图片 

技术分享图片 

下面是效果演示,左边是图片,右边是模型预测结果,预测结果都是一个概率值,根据概率值的大小来判定这是哪一类花朵:

技术分享图片 

技术分享图片 

技术分享图片 

技术分享图片 

技术分享图片 

以上六部分就是本次分享的主要内容,接下来是问答时间,我们来看看都有哪些问题。

1.整个训练过程需要人工参与吗?准确率的提高是需要人工来参与吗?

李老师:整个训练过程不需要人工参与,准确率的提高涉及超参优化,deep leaning pipeline中提供了grid search机制,可以做些自动超参选择。

2.现在这训练的过程是不是只针对静态的图片?动态的场景可以吗?

李老师:你的动态场景如果是视频,本身也可抽帧为图片,视频分类是另外一种应用问题,但底层也需要借助已有的图像分类模型,图像分类本身的应用场景非常广,比如和无人机相结合。

3.这套框架适用于文本的自动分类吗?

李老师:框架同样适合文本分类等其他领域,差别在于数据schema和模型,训练过程涉及到一些图像归一化的过程,但没有模版匹配,你可以理解为所有的特征抽取都是由deep learning自动抽取出来的。

 

 

以上就是本次线上直播的全部内容,相信通过本次学习,一定对深度学习和机器算法有了更细致深入的掌握。想了解更多更详细内容的小伙伴们,可以关注服务号:FMI飞马网,点击菜单栏飞马直播,即可进行学习。

 

技术分享图片

当推荐系统遇上深度学习

原文:DeepLearningMeetsRecommendationSystemsPublishedbyWann-JiunMaat**January24,2017https://blog.nycdatascience.com/student-works/deep-learning-meets-recommendation-systems/ContributedbyWann-JiunMa.Heisc 查看详情

分布式深度学习(sparkmllib,parameterserverring-allreduce和tensorflow)(代码片段)

SparkMLlibSpark分布式计算原理Spark(分布式的计算平台),分布式:指计算节点之间不共享内存,需要通过网络通信的方式交换数据。Spark最典型的应用方式是建立在大量廉价计算节点(廉价主机、虚拟的dockercontainer)上;但这种... 查看详情

当spark遇上zeppelin

...单机在计算与资源上的瓶颈,诸如Hadoop、Spark、Flink等分布式计 查看详情

当spark遇上zeppelin

...单机在计算与资源上的瓶颈,诸如Hadoop、Spark、Flink等分布式计 查看详情

tensorflow机器学习:如何正确的掌握google深度学习框架tensorflow(第二代分布式机器学习系统)?

本文标签:  机器学习TensorFlowGoogle深度学习框架分布式机器学习唐源VGGREST 服务器自2015年底开源到如今更快、更灵活、更方便的1.0版本正式发布,由Google推出的第二代分布式机器学习系统TensorFlow一直在为我们带来惊... 查看详情

深度学习(五十五)tensorflow分布式训练

tensorflow分布式训练博客:http://blog.csdn.net/hjimce微博:黄锦池-hjimce   qq:1393852684情况一、单机单卡单机单卡是最普通的情况,当然也是最简单的,示例代码如下:#coding=utf-8#单机单卡#对于单机单卡,可以把参数和计算都... 查看详情

学习笔记tf042:tf.learn分布式estimator深度学习estimator

TF.Learn,TensorFlow重要模块,各种类型深度学习及流行机器学习算法。TensorFlow官方ScikitFlow项目迁移,谷歌员工IlliaPolosukhin、唐源发起。Scikit-learn代码风格,帮助数据科学从业者更好、更快适应接受TensorFlow代码。囊括许多TensorFlow... 查看详情

推荐系统遇上深度学习--gbdt+lr融合方案实战

推荐系统遇上深度学习(十)--GBDT+LR融合方案实战0.8012018.05.1916:17:18字数2068阅读22568推荐系统遇上深度学习系列:推荐系统遇上深度学习(一)--FM模型理论和实践:https://www.jianshu.com/p/152ae633fb00推荐系统遇上深度学习(二)--FFM模型理论... 查看详情

谷歌开源了tensorflow,世界就要马上被改变了吗

Google开源了其第二代深度学习技术TensorFlow——被使用在Google搜索、图像识别以及邮箱的深度学习框架。这在相关媒体圈、工程师圈、人工智能公司、人工智能研究团队里有了一些讨论。比较有趣的是,微软亚洲研究院立刻向媒... 查看详情

基于tensorflow的深度学习系列教程2——常量constant(代码片段)

前面介绍过了Tensorflow的基本概念,比如如何使用tensorboard查看计算图。本篇则着重介绍和整理下Constant相关的内容。基于TensorFlow的深度学习系列教程1——HelloWorld!常量的概念在tensorflow中,数据分为几种类型:常量Constant、变量Varia... 查看详情

tensorflow——分布式的tensorflow运行环境(代码片段)

...行资源,而且还要花费大量时间才能完成训练。1.分布式TensorFlow的角色与原理在分布式的TensorFlow中的角色分配如下:PS:作为分布式训练的服务端,等待各个终端(supervisors)来连接。worker:在TensorFlow的代码注释中被称为终端(superv... 查看详情

分享《tensorflow学习指南:深度学习系统构建详解》英文pdf+源代码+部分中文pdf

...m/s/1v4B-Jp-lQClBWiCfDd1_dw更多分享:http://blog.51cto.com/14050756《TensorFlow学习指南:深度学习系统构建详解》英文PDF+源代码+部分中文PDF英文完整版PDF,242页,带目录书签,彩色配图,文字可以复制粘贴;中文部分PDF,包含第1、2、3章,... 查看详情

tensorflow实现基于深度学习的图像补全

目录■简介■ 第一步:将图像理解为一个概率分布的样本  你是怎样补全缺失信息的呢?  但是怎样着手统计呢?这些都是图像啊。  那么我们怎样补全图像? ■ 第二步:快速生成假图像 &nb... 查看详情

一线开发者在reddit上讨论深度学习框架:pytorch和tensorflow到底哪个更好?

本文标签:  机器学习TensorFlowGoogle深度学习框架分布式机器学习PyTorch 近日,Reddit用户cjmcmurtrie发了一个主题为「PyTorchvs.TensorFlow」的讨论帖,想要了解这两大流行的框架之间各自有什么优势。原帖地址:https://redd.it/5w... 查看详情

如何在tensorflow中用深度学习修复图像

参考技术A完成图像修复需要三步。1.我们首先要把图像解析成概率分布中的样本点2.这种解析让我们学习如何产生伪图像3.接着我们就能找到补全修复所需的最佳伪图像 查看详情

感悟:微博深度学习平台架构和实践

TensorFlow、Caffe和MXNet是三大主流的深度学习开源框架:TensorFlow的优势是社区最活跃,开源算法和模型最丰富;Caffe则是经典的图形领域框架,使用简单,在科研领域占有重要地位;MXNet在分布式性能上表现优异。PaddlePaddle、鲲鹏... 查看详情

tensorflow的介绍和安装

TensorFlow概要  由googleBrain开源,设计初衷是加速机器学习的研究,2015年11月在GitHub上开源,2016年4月分布式版本,2017年发布了1.0版本,趋于稳定。Google希望让这个优秀的工具得到更多的应用,从整体上提高深度学习的效率。Ten... 查看详情

tensorflow学习路径

...联系作者获得授权,非商业转载请注明出处。前言:其实TensorFlow本身仅仅是一个分布式的高性能计算框架,想要用TF做深度学习,仅仅学习这个框架本身是没有太大意义的。因此应该将TF看作技术路线中的一个核心点,去掌握整... 查看详情