Press "Enter" to skip to content

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

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

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

 

分布式框架会分为两部分来介绍,分别是大数据计算框架,这部分包含 MapReduce 、 Spark 和 Flink 。另一部分是深度学习框架,本文会介绍 TensorFlow 和 PyTorch 。

 

( 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

 

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

 

Flink

 

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

 

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

 

(2)深度学习框架

 

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

 

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

 

TensorFlow

 

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

 

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

 

PyTorch

 

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

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注