Py学习  »  机器学习算法

一文了解机器学习、深度学习分布式计算框架层

天池大数据科研平台 • 4 年前 • 941 次点击  

在硬件计算集群之上是分布式计算框架层,分布式计算框架解决的问题是如何把特定任务分发成多个节点可执行的任务,并且合并任务结果。严格意义上说,分布式计算分为两个步骤,步骤一是任务在分布式框架层面进行拆分和组合,步骤二是利用调度引擎去分配资源和下发计算,调度引擎通常会选用开源的Yarn来实现,本书重点介绍分布式框架。

分布式框架会分为两部分来介绍,分别是大数据计算框架,这部分包含MapReduceSparkFlink。另一部分是深度学习框架,本文会介绍TensorFlowPyTorch

 

1)大数据计算框架


大数据计算框架也是通常意义上的分布式计算框架,随着数据计算的业务不断发展,对于分布式框架也在不同时期有不同的需求。目前大数据分布式计算框架已经衍生出3代,分别是以MapReduce为代表的第1代框架,以Spark为代表的第2代框架和以Flink为代表的第3代框架。

 

MapReduce

 

MapReduce最早是由Google公司研究提出的一种面向大规模数据处理的并行计算模型和方法。Google公司设计MapReduce的初衷主要是为了解决其搜索引擎中大规模网页数据的并行化处理。Google公司发明了MapReduce之后首先用其重新改写了其搜索引擎中的Web文档索引处理系统。但由于MapReduce可以普遍应用于很多大规模数据的计算问题,因此自发明MapReduce以后,Google公司内部进一步将其广泛应用于很多大规模数据处理问题。

 

MapReduce在业内率先解决了大规模数据分布式计算的问题,推动了分布式计算的发展。但是,MapReduce在计算过程中需要把中间结果写到磁盘中,这种做法提高了可靠性、减少了内存占用,牺牲了性能。因为机器学习计算过程中涉及到非常多的大规模矩阵的交叉计算,所以MapReduce这种依赖于硬盘存储中间过程的方式往往无法达到性能要求。MapReduce在机器学习领域,逐渐被Spark框架所替代,但是在BI计算场景下,MapReduce仍在发挥着巨大的作用。

 

Spark

 

SparkUC Berkeley AMP lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架。相较于MapReduceSpark将中间过程存储在内存中,提高了大密度矩阵计算场景下的运行效率,非常适合人工智能相关的数据计算业务。另外,SparkApache顶级的开源项目,有良好的生态。Spark体系下有开源的分布式机器学习算法库SparkMlibSparkMlib内置了上百种机器学习算法,支持JavaScalaPythonR等多种语言的编程接口,逐渐成为目前业内比较主流的机器学习算法库。

 

Flink

 

Flink是由一款由德国公司DataArtisans开发并开源的分布式计算框架,该框架已经开源并成为ApacheFlink的顶级项目。随着互联网行业的发展,首先人们遇到了数据计算性能的瓶颈,于是有了MapRedcueSpark的进化,通过更多地使用内存而提升计算效率。而Flink的出现是为了解决业务遇到的计算实时性的问题。Flink作为最新一代计算引擎的最大特点就是可以流式的进行数据计算。

 

什么叫流式的数据计算呢?举一个应用例子,我们都用过类似于微博这样的内容SNS应用,这种应用依托推荐算法模型做内容的分发和推荐。传统的推荐模型都是基于Spark或者MapReduce这样的离线计算框架训练,使用的训练数据是当前时间前一天或者几天的数据来训练,这种离线训练模式的问题是无法针对突发性事件作出及时反馈。比如5分钟前某个大明星吸毒入狱了,可能所有线上的用户关注点都集中在这样的热门事件上,所有用户的行为都会发生变化,这时候如果用离线训练好的模型执行线上推荐任务显然不会有非常好的效果。这种场景下,用Flink的实时机器学习能力,可以很好地解决实时发生的事件对于模型的影响问题。


(2)深度学习框架


随着最近几年人工智能的不断发展,特别是ImageNet数据集带动了图像识别的的发展,AlphaGo推动推理服务的发展,深度学习框架逐渐走向了人们的视野,越来越多的传统机器学习业务正在探索如何向深度学习去发展。

 

深度学习与经典的传统学习的方法主要区别是模型的深度不同,深度学习算法的开发因为网络结构非常复杂,往往是借助深度学习框架来实现。目前业内比较主流的深度学习框架有TensorFlowPyTorch,接下来就分别介绍下这两款框架的一些特点。

 

TensorFlow

 

TensorFlowGoogle人工智能团队GoogleBrain开发并维护,是一种基于数据流编程的符号型编程系统,目前广泛的被应用于各大公司的生产系统中。TensorFlowPyTorch相比,发展的比较早,目前已经有1.X2.X的稳定版本。在生态以及工具层面,TensorFlow也较为丰富,用户可以基于TensorFlow开放的Python API构建网络和训练,使用TensorBoard监控训练过程中的参数权重变化,通过TensorServing去部署模型,通过TensorFlow.js去控制模型在前端的一些可视化展示。

 

TensorFlow的工具已经非常丰富,而且覆盖了模型训练、服务的全周期,比较适合工业应用场景,但是因为TensorFlow的基于数据流的编程模式较为抽象,入门门槛相较于PyTorch会略高,所以目前PyTorch也占据了相当大一部分的深度学习框架市场份额。

 

PyTorch

 

PyTorch的前身是Torch,是由Facebook主导开源并维护的深度学习框架。PyTorch最近发展非常迅速,已经推出了较为稳定的1.X版本。虽然PyTorch相比于TensorFlow起步较晚,生态工具还有待完善,但是因为PyTorch可以基于动态图去开发程序,门槛较低,深受许多深度学习初学者的欢迎。后续随着Facebook在深度学习框架层的不断发力,整个深度学习框架市场会逐渐形成TensorFlowPyTorch两强争霸的局面,这两个框架各有各的生态和技术架构优势。对于想了解深度学习框架的同学,可以两个框架都花时间去认真研究一下。

 

「 往期精彩 


简单几笔就能精准抠图,阿里妈妈智能抠图算法介绍

Apache Flink 零基础入门系列

天池大赛

如果你在学习过程中,有看到一些比较优质的文章或Paper,或者你平时自己学习笔记和原创文章,请投稿到天池,让更多的人看到。除了精美的丰富的神秘天池大礼以及粮票奖励,更有现金大礼在等着你。

分享成功后你也可以通过下方钉钉群👇主动联系我们的社区运营同学(钉钉号: modestt

天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!





转发、收藏、在看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51123
 
941 次点击