`
wbj0110
  • 浏览: 1604105 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

分布式机器学习(一):前言(转)

阅读更多

从毕业加入Google开始做分布式机器学习,到后来转战腾讯广告业务,至今已经七年了。我 
想说说我见到的故事和我自己的实践经历。这段经历给我的感觉是:虽然在验证一个新的并 
行算法的正确性的时候,我们可以利用现有框架,尽量快速实现,但是任何一个有价值的机 
器学习思路,都值得拥有自己独特的架构。所以重点在有一个分布式操作系统,方便大家开 
发自己需要的架构(框架),来支持相应的算法。如果你关注大数据,听完我说的故事,应 
该会有感触。 

大数据和分布式机器学习特点 
说故事之前,先提纲挈领的描述一下我们要解决的问题的特点。我见过的有价值的大规模机 
器学习系统,基本都有三个特点: 

可扩展。可扩展的意思是“投入更多的机器,能处理更大的数据”。而传统的并行计算要的 
是:“投入更多机器,数据大小不变,计算速度更快”。这是我认识中“大数据”和传统并 
行计算研究目标不同的地方。如果只是求速度快,那么multicore和GPU会比分布式机器学习 
的ROI更高。有一个框架(比如MPI或者MapReduce或者自己设计的),支持fault 
recovery。Fault recovery是可扩展的基础。现代机群系统都是很多用户公用的,其中任何 
一个进程都有可能被更高优先级的进程preempted。一个job涉及数千个进程(task 
processes),十分钟里一个进程都不挂的概率很小。而如果一个进程挂了,其他进程都得 
重启,那么整个计算任务可能永远都不能完成。 

数学模型要根据架构和数据做修改。这里有两个原因:因为大数据基本都是长尾分布的,而 
papers里的模型基本都假设数据是指数分布的(想想用SVD做component analysis其实假设 
了Gaussian distributed,latent Dirichlet allocation假设了multimonial 
distribution。)。真正能处理大数据的数学模型,都需要能更好的描述长尾数据。否则, 
模型训练就是忽视长尾,而只关注从“大头”数据部分挖掘“主流”patterns了。很多机器 
学习算法(比如MCMC)都不适合并行化。所以往往需要根据模型的特点做一些算法的调整。 
有时候会是approximation。比如AD-LDA算法是一种并行Gibbs sampling算法,但是只针对 
LDA模型有效,对其他大部分模型都不收敛,甚至对LDA的很多改进模型也不收敛。 

引入更多机器的首要目的不是提升性能,而是能处理更大的数据。用更多的机器,处理同样 
大小的数据,期待speedup提高——这是传统并行计算要解决的问题——是multicore、 
SMP、MPP、GPU还是Beowolf cluster上得分布式计算不重要。在大数据情况下,困难点在问 
题规模大,数据量大。此时,引入更多机器,是期待能处理更大数据,总时间消耗可以不变 
甚至慢一点。分布式计算把数据和计算都分不到多台机器上,在存储、I/O、通信和计算上 
都要消除瓶颈。 

上述三个特点,会在实践中要求“一个有价值的算法值得也应该有自己独特的框架”。 

概念 
在开始说故事之前,先正名几个概念:Message Passing和MapReduce是两个有名的并行程序 
编程范式(paradigm),也就是说,并行程序应该怎么写都有规范了——只需要在预先提供 
的框架(framework)程序里插入一些代码,就能得到自己的并行程序。Message Passing范 
式的一个框架叫做MPI。MapReduce范式的框架也叫MapReduce。而MPICH2和Apache Hadoop分 
别是这MPI和MapReduce两个框架的实现(implementations)。另一个本文会涉及的 
MapReduce实现是我用C++写的MapReduce Lite。后面还会提到BSP范式,它的一个著名的实 
现是Google Pregel。 

MPI这个框架很灵活,对程序结构几乎没有太多约束,以至于大家有时把MPI称为一组接口 
(interface)——MPI的I就是interface的意思。 

这里,MPICH2和Hadoop都是很大的系统——除了实现框架(允许程序员方便的编程),还实 
现了资源管理和分配,以及资源调度的功能。这些功能在Google的系统里是分布式操作系统 
负责的,而Google MapReduce和Pregel都是在分布式操作系统基础上开发的,框架本身的代 
码量少很多,并且逻辑清晰易于维护。当然Hadoop已经意识到这个问题,现在有了YARN操作 
系统。(YARN是一个仿照UC Berkeley AMPLab的Mesos做的系统。关于这个“模仿”,又有 
另一个故事。) 

分享到:
评论

相关推荐

    分布式算法 作者:(美)Nancy A.Lynch 舒继武 李国东part1

     本书可作为高等院校计算机系研究生的教材,尤其适合对计算机理论或体系结构感兴趣的学生学习,还适合分布式设计人员、研究人员及其相关技术人员参考。 出版者的话 专家指导委员会 译者序 前言 第1章 引言 1 1.1 ...

    大数据时代的机器学习研究专刊前言.pdf

    《大数据时代的机器学习研究专刊前言》这篇文章探讨了21世纪以来,随着科学与社会生活中数据量的急剧增长,如何有效地处理和利用这些数据成为关键。机器学习作为智能数据处理的主要技术,面临着大数据时代所带来的新...

    分布式信息能源系统理论与应用专题序言.pdf

    DCES的热点研究领域主要从人工智能、机器学习、强化学习、主从博弈、分布式优化和交替乘子法等方面逐步扩散。 在此背景下,《自动化学报》和《中国电机工程学报》共同组织了“分布式信息能源系统”专题,旨在反映...

    ubuntu完全分布式安装文档

    #### 一、前言与环境准备 在本篇文章中,我们将详细介绍如何在Ubuntu环境下搭建Hadoop的完全分布式集群。对于初学者来说,掌握这一技能不仅能够帮助理解大数据处理的基本流程,还能为后续深入学习大数据技术栈打下...

    与TensorFlow第一次接触

    在进入正文之前,先要明确,TensorFlow是一款由谷歌开发的开源软件库,专门用于大规模机器学习与深度学习研究,特别适用于那些需要大量数据和高效计算的应用场景。它的主要优势在于灵活性、跨平台性以及强大的社区...

    人工智能深度学习模式识别机器学习神经网络实验室建设方案.pdf

    《人工智能深度学习模式识别机器学习神经网络实验室建设方案》是一个详尽的规划文档,旨在为教育机构或研究团队提供一个完善的实验室建设蓝图。该方案涵盖了实验室建设的背景、目标、系统设计以及各种关键功能模块的...

    1_Hadoop伪分布式安装.docx

    #### 一、前言 Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。伪分布式安装是Hadoop安装的一种方式,它在一个节点上模拟分布式的运行环境,适合于开发和测试场景。本文档详细介绍了在CentOS系统上...

    人工智能前言知识(最新前言,给你方向)

    最后,联邦学习是分布式机器学习的一种形式,它允许在不汇集个人数据的情况下进行模型训练,保护了用户隐私,同时也促进了模型在多源数据上的性能提升。联邦学习在医疗保健、移动设备和物联网等领域具有广阔的应用...

    机器学习的框架偏向于Python的13个原因

    随着人工智能技术的迅猛发展,机器学习已成为研究与应用领域的热点之一。Python作为一种解释型语言,在机器学习领域占据了主导地位,成为首选的编程语言。本文将详细探讨机器学习框架偏爱Python的13个重要原因,并为...

    .NET 分布式组件库 Exceptionless Foundatio.zip

    前言在互联网时代,分布式应用、系统变得越来越多,我们在使用 .Net 技术构建分布式系统的时候,需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦,但是纵观.Net圈,能够符合要求的这样的组件...

    世界经济论坛-我们的共享数字未来:负责任的数字化转型 - 董事会简报(英文)-2019.2-20页.pdf

    11. 人工智能(AI)和机器学习(Machine Learning):作为文件中的第五个关键主题,人工智能和机器学习正在改变我们的工作方式、决策过程,并重新定义产品和服务。它们是数字化转型中不可或缺的部分。 12. 白皮书的...

    自学Python爬虫路上的实战笔记,由浅到深逐步深入学习Python 爬虫.zip

    11. **爬虫进阶**:随着技能提升,可以学习爬虫的高级技巧,如模拟登录、动态加载内容抓取、图片和视频下载、API接口爬取、机器学习辅助爬虫等。 12. **实战项目**:理论学习后,通过实际项目锻炼技能,如爬取新闻...

    Mastering Machine with Spark 2.x(精通Spark 2.x)

    《精通Spark 2.x》是一本专注于使用Apache Spark 2.x版本进行机器学习的实践指南。本书由Alex Tellez、Max Pumperla和Michal Malohlava三位作者共同撰写,旨在指导读者如何构建可扩展的机器学习应用程序,以支持现代...

    高级java笔试题-fullstack-tutorial-site:https://frank-lam.github.io/fullstack

    PHP,Python,Go,C++,分布式中间件,机器学习等等,板块维护者 前言 在编程的世界里,该如何选择自己的技术栈呢。学前端?学 APP 开发?对于 Java、C++、C#、Python、PHP 又如何选择呢?人工智能现如今这么火,...

    计算机专业英语词汇

    **FDDI (Fiber Distributed Data Interface)** (光纤分布式数据接口):一种高速局域网标准,使用光纤作为传输介质。 **Fiberoptic trunkline (光纤主干线路)**:在网络中传输大量数据的光纤线路。 **File extension ...

Global site tag (gtag.js) - Google Analytics