从毕业加入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做的系统。关于这个“模仿”,又有
另一个故事。)
- 浏览: 1604105 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1585)
- Http Web (18)
- Java (194)
- 操作系统 (2)
- 算法 (30)
- 计算机 (45)
- 程序 (2)
- 性能 (50)
- php (45)
- 测试 (12)
- 服务器 (14)
- Linux (42)
- 数据库 (14)
- 管理 (9)
- 网络 (3)
- 架构 (83)
- 安全 (2)
- 数据挖掘 (16)
- 分析 (9)
- 数据结构 (2)
- 互联网 (6)
- 网络安全 (1)
- 框架 (9)
- 视频 (2)
- 计算机,SEO (3)
- 搜索引擎 (31)
- SEO (18)
- UML (1)
- 工具使用 (2)
- Maven (41)
- 其他 (7)
- 面向对象 (5)
- 反射 (1)
- 设计模式 (6)
- 内存数据库 (2)
- NoSql (9)
- 缓存 (7)
- shell (9)
- IQ (1)
- 源码 (1)
- Js (23)
- HttpClient (2)
- excel (1)
- Spring (7)
- 调试 (4)
- mysql (18)
- Ajax (3)
- JQuery (9)
- Comet (1)
- 英文 (1)
- C# (1)
- HTML5 (3)
- Socket (2)
- 养生 (1)
- 原理 (2)
- 倒排索引 (4)
- 海量数据处理 (1)
- C (2)
- Git (59)
- SQL (3)
- LAMP (1)
- 优化 (2)
- Mongodb (20)
- JMS (1)
- Json (15)
- 定位 (2)
- Google地图 (1)
- memcached (10)
- 压测 (4)
- php.性能优化 (1)
- 励志 (1)
- Python (7)
- 排序 (3)
- 数学 (3)
- 投票算法 (2)
- 学习 (1)
- 跨站攻击 (1)
- 前端 (8)
- SuperFish (1)
- CSS (2)
- 评论挖掘分析 (1)
- Google (13)
- 关键词分析 (1)
- 地图 (1)
- Gzip (1)
- 压缩 (1)
- 爬虫 (13)
- 流量统计 (1)
- 采集 (1)
- 日志分析 (2)
- 浏览器兼容 (1)
- 图片搜索引擎技术 (2)
- 空间 (1)
- 用户体验 (7)
- 免费空间 (1)
- 社交 (2)
- 图片处理 (2)
- 前端工具 (1)
- 商业 (3)
- 淘宝 (3)
- 站内搜索 (1)
- 网站收藏 (1)
- 理论 (1)
- 数据仓库 (2)
- 抓包 (1)
- Hadoop (105)
- 大数据 (6)
- Lucene (34)
- Solr (31)
- Drupal (1)
- 集群 (2)
- Lu (2)
- Mac (4)
- 索引 (9)
- Session共享 (1)
- sorl (10)
- JVM (9)
- 编码 (1)
- taobao (14)
- TCP/IP (4)
- 你可能會感興趣 (3)
- 幽默笑话 (7)
- 服务器整合 (1)
- Nginx (9)
- SorlCloud (4)
- 分佈式搜索 (1)
- ElasticSearch (30)
- 網絡安全 (1)
- MapReduce (8)
- 相似度 (1)
- 數學 (1)
- Session (3)
- 依賴注入 (11)
- Nutch (8)
- 云计算 (6)
- 虚拟化 (3)
- 财务自由 (1)
- 开源 (23)
- Guice (1)
- 推荐系统 (2)
- 人工智能 (1)
- 环境 (2)
- Ucenter (1)
- Memcached-session-manager (1)
- Storm (54)
- wine (1)
- Ubuntu (23)
- Hbase (44)
- Google App Engine (1)
- 短信 (2)
- 矩阵 (1)
- MetaQ (34)
- GitHub &Git &私/公有库 (8)
- Zookeeper (28)
- Exception (24)
- 商务 (1)
- drcp (1)
- 加密&解密 (1)
- 代码自动生成 (1)
- rapid-framework (1)
- 二次开发 (1)
- Facebook (3)
- EhCache (1)
- OceanBase (1)
- Netlog (1)
- 大数据量 (2)
- 分布式 (3)
- 事物 (2)
- 事务 (2)
- JPA (2)
- 通讯 (1)
- math (1)
- Setting.xml (3)
- 络驱动器 (1)
- 挂载 (1)
- 代理 (0)
- 日本語の (1)
- 花生壳 (7)
- Windows (1)
- AWS (2)
- RPC (11)
- jar (2)
- 金融 (1)
- MongDB (2)
- Cygwin (1)
- Distribute (1)
- Cache (1)
- Gora (1)
- Spark (31)
- 内存计算 (1)
- Pig (2)
- Hive (21)
- Mahout (17)
- 机器学习 (34)
- Sqoop (1)
- ssh (1)
- Jstack (2)
- Business (1)
- MapReduce.Hadoop (1)
- monitor (1)
- Vi (1)
- 高并发 (6)
- 海量数据 (2)
- Yslow (4)
- Slf4j (1)
- Log4j (1)
- Unix (3)
- twitter (2)
- yotube (0)
- Map-Reduce (2)
- Streaming (1)
- VMware (1)
- 物联网 (1)
- YUI (1)
- LazyLoad (1)
- RocketMQ (17)
- WiKi (1)
- MQ (1)
- RabbitMQ (2)
- kafka (3)
- SSO (8)
- 单点登录 (2)
- Hash (4)
- Redis (20)
- Memcache (2)
- Jmeter (1)
- Tsung (1)
- ZeroMQ (1)
- 通信 (7)
- 开源日志分析 (1)
- HDFS (1)
- zero-copy (1)
- Zero Copy (1)
- Weka (1)
- I/O (1)
- NIO (13)
- 锁 (3)
- 创业 (11)
- 线程池 (1)
- 投资 (3)
- 池化技术 (4)
- 集合 (1)
- Mina (1)
- JSMVC (1)
- Powerdesigner (1)
- thrift (6)
- 性能,架构 (0)
- Web (3)
- Enum (1)
- Spring MVC (15)
- 拦截器 (1)
- Web前端 (1)
- 多线程 (1)
- Jetty (1)
- emacs (1)
- Cookie (2)
- 工具 (1)
- 分布式消息队列 (1)
- 项目管理 (2)
- github (21)
- 网盘 (1)
- 仓库 (3)
- Dropbox (2)
- Tsar (1)
- 监控 (3)
- Argo (2)
- Atmosphere (1)
- WebSocket (5)
- Node.js (6)
- Kraken (1)
- Cassandra (3)
- Voldemort (1)
- VoltDB (2)
- Netflix (2)
- Hystrix (1)
- 心理 (1)
- 用户分析 (1)
- 用户行为分析 (1)
- JFinal (1)
- J2EE (1)
- Lua (2)
- Velocity (1)
- Tomcat (3)
- 负载均衡 (1)
- Rest (2)
- SerfJ (1)
- Rest.li (1)
- KrakenJS (1)
- Web框架 (1)
- Jsp (2)
- 布局 (2)
- NowJs (1)
- WebSoket (1)
- MRUnit (1)
- CouchDB (1)
- Hiibari (1)
- Tiger (1)
- Ebot (1)
- 分布式爬虫 (1)
- Sphinx (1)
- Luke (1)
- Solandra (1)
- 搜素引擎 (1)
- mysqlcft (1)
- IndexTank (1)
- Erlang (1)
- BeansDB (3)
- Bitcask (2)
- Riak (2)
- Bitbucket (4)
- Bitbuket (1)
- Tokyo Cabinet (2)
- TokyoCabinet (2)
- Tokyokyrant (1)
- Tokyo Tyrant (1)
- Memcached协议 (1)
- Jcrop (1)
- Thead (1)
- 详设 (1)
- 问答 (2)
- ROM (1)
- 计算 (1)
- epoll (2)
- libevent (1)
- BTrace (3)
- cpu (2)
- mem (1)
- Java模板引擎 (1)
- 有趣 (1)
- Htools (1)
- linu (1)
- node (3)
- 虚拟主机 (1)
- 闭包 (1)
- 线程 (1)
- 阻塞 (1)
- LMAX (2)
- Jdon (1)
- 乐观锁 (1)
- Disruptor (9)
- 并发 (6)
- 为共享 (1)
- volatile (1)
- 伪共享 (1)
- Ringbuffer (5)
- i18n (2)
- rsync (1)
- 部署 (1)
- 压力测试 (1)
- ORM (2)
- N+1 (1)
- Http (1)
- web开发脚手架 (1)
- Mybatis (1)
- 国际化 (2)
- Spring data (1)
- R (4)
- 网络爬虫 (1)
- 条形码 (1)
- 等比例缩放 (1)
- java,面向接口 (1)
- 编程规范 (1)
- CAP (1)
- 论文 (1)
- 大数据处理 (1)
- Controller (3)
- CDN (2)
- 程序员 (1)
- Spring Boot (3)
- sar (1)
- 博弈论 (1)
- 经济 (1)
- Scrapy (1)
- Twistedm (1)
- cron (1)
- quartz (1)
- Debug (1)
- AVO (1)
- 跨语言 (1)
- 中间服务 (2)
- Dubbo (4)
- Yarn (1)
- Spring OSGI (1)
- bundle (1)
- OSGI (1)
- Spring-Boot (1)
- CA证书 (1)
- SSL (1)
- CAS (7)
- FusionCharts (5)
- 存储过程 (3)
- 日志 (2)
- OOP (2)
- CentOS (5)
- JSONP (2)
- 跨域 (5)
- P3P (1)
- Java Cas (1)
- CentOS 6.5 Released – Installation Guide with Screenshots (1)
- Android (1)
- 队列 (2)
- Multitail (1)
- Maout (1)
- nohup (1)
- AOP (1)
- 长连接 (3)
- 轮循 (2)
- 聊天室 (1)
- Zeus (1)
- LSM-Tree (1)
- Slope One (1)
- 协同过滤 (1)
- 服务中间件 (1)
- KeyMeans (1)
- Bitmap (1)
- 实时统计 (1)
- B-Tree+ (1)
- PageRank (1)
- 性能分析 (1)
- 性能测试 (1)
- CDH (10)
- 迭代计算 (1)
- Jubatus (1)
- Hadoop家族 (8)
- Cloudera (2)
- RHadoop (1)
- 广告定价 (1)
- 广告系统 (9)
- 广告系统,架构 (1)
- Tag推荐算法 (1)
- 相似度算法 (1)
- 页面重构 (2)
- 高性能 (6)
- Maven3 (3)
- Gradle (11)
- Apache (1)
- Java并发 (1)
- Java多进程 (1)
- Rails (1)
- Ruby (3)
- 系统架构 (1)
- 运维 (36)
- 网页设计 (1)
- TFS (0)
- 推荐引擎 (0)
- Tag提取算法 (1)
- 概率统计 (1)
- 自然语言处理 (2)
- 分词 (1)
- Ruby.Python (1)
- 语义相似度 (0)
- Chukwa (0)
- 日志收集系统 (0)
- Data Mining (4)
- 开放Api (1)
- Scala (28)
- Ganglia (2)
- mmap (1)
- 贝叶斯分类 (1)
- 运营 (1)
- Mdrill (1)
- Lambda (2)
- Netty (5)
- Java8 (1)
- Solr4 (1)
- Akka (12)
- 计算广告 (2)
- 聊天系统 (1)
- 服务发现 (1)
- 统计指标 (1)
- NLP (1)
- 深度学习 (0)
最新评论
-
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
使用 HTML5 WebSocket 构建实时 Web 应用 -
秦时明月黑:
Jetty 服务器架构分析 -
chenghaitao111111:
楼主什么时候把gecko源码分析一下呢,期待
MetaQ技术内幕——源码分析(转) -
qqggcc:
为什么还要写代码啊,如果能做到不写代码就把功能实现就好了
快速构建--Spring-Boot (quote) -
yongdi2:
好厉害!求打包代码
Hadoop日志文件分析系统
发表评论
-
朴素贝叶斯
2016-03-03 13:05 0机器学习/推荐系统课程链接:http:// ... -
牛顿下山法
2016-03-03 12:59 4 -
泰勒级数
2016-03-03 12:46 8机器学习/推荐系统课程链接:http: ... -
梯度下降法
2016-03-03 12:40 14机器学习/推荐系统课程链接:h ... -
微积分-线性代数理解最小二乘法
2016-03-03 12:34 30机器学习/推荐系统课程链接:http: ... -
图解偏导-形象理解梯度下降法
2016-03-03 11:21 11机器学习/推荐系统课程链 ... -
梯度下降法
2016-03-03 10:52 8机器学习/推荐系统课程 ... -
微积分-线性代数理解最小二乘法
2016-03-03 10:36 8机器学习/推荐系统课程链接:http ... -
语义分析的一些方法(三)
2015-02-11 13:54 14213 图片语义分析 3.1 图 ... -
语义分析的一些方法(二)
2015-02-11 13:52 15142 文本语义分析 前面讲到一些文本基本处理方法。一个文本 ... -
语义分析的一些方法(一)(转)
2015-02-11 11:10 931语义分析,本文指运用各种机器学习方法,挖掘与学习文本、 ... -
最小二乘法
2014-07-07 08:44 167最小二乘法 -- 百科 -
隐马尔可夫模型
2014-07-07 08:45 1042百科 马尔科夫模型 隐马尔科夫模型 ... -
Confusion Matrix
2014-07-03 09:54 847A confusion matrix (Kohavi and ... -
算法杂货铺——分类算法之决策树(Decision tree)
2014-06-24 15:16 7643.1、摘要 在前面两篇文章中,分别介绍和讨 ... -
决策树算法总结
2014-06-23 09:29 624参考:《机器学习》Tom版 以及http://blog.c ... -
决策树算法
2014-06-23 09:27 578机器学习中,决策树 ... -
分类算法之朴素贝叶斯分类(Naive Bayesian classification)
2014-06-18 12:20 9341.1、摘要 贝叶斯分类是一类分类算法的总称 ... -
Comparing Document Classification Functions of Lucene and Mahout
2014-06-26 09:55 893Starting with version 4.2, Lu ... -
贝叶斯方法的m-估计
2014-06-11 09:06 727为什么要有m-估计? 当我们通过在全部事件的基础上观察某 ...
相关推荐
本书可作为高等院校计算机系研究生的教材,尤其适合对计算机理论或体系结构感兴趣的学生学习,还适合分布式设计人员、研究人员及其相关技术人员参考。 出版者的话 专家指导委员会 译者序 前言 第1章 引言 1 1.1 ...
《大数据时代的机器学习研究专刊前言》这篇文章探讨了21世纪以来,随着科学与社会生活中数据量的急剧增长,如何有效地处理和利用这些数据成为关键。机器学习作为智能数据处理的主要技术,面临着大数据时代所带来的新...
DCES的热点研究领域主要从人工智能、机器学习、强化学习、主从博弈、分布式优化和交替乘子法等方面逐步扩散。 在此背景下,《自动化学报》和《中国电机工程学报》共同组织了“分布式信息能源系统”专题,旨在反映...
#### 一、前言与环境准备 在本篇文章中,我们将详细介绍如何在Ubuntu环境下搭建Hadoop的完全分布式集群。对于初学者来说,掌握这一技能不仅能够帮助理解大数据处理的基本流程,还能为后续深入学习大数据技术栈打下...
在进入正文之前,先要明确,TensorFlow是一款由谷歌开发的开源软件库,专门用于大规模机器学习与深度学习研究,特别适用于那些需要大量数据和高效计算的应用场景。它的主要优势在于灵活性、跨平台性以及强大的社区...
《人工智能深度学习模式识别机器学习神经网络实验室建设方案》是一个详尽的规划文档,旨在为教育机构或研究团队提供一个完善的实验室建设蓝图。该方案涵盖了实验室建设的背景、目标、系统设计以及各种关键功能模块的...
#### 一、前言 Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。伪分布式安装是Hadoop安装的一种方式,它在一个节点上模拟分布式的运行环境,适合于开发和测试场景。本文档详细介绍了在CentOS系统上...
最后,联邦学习是分布式机器学习的一种形式,它允许在不汇集个人数据的情况下进行模型训练,保护了用户隐私,同时也促进了模型在多源数据上的性能提升。联邦学习在医疗保健、移动设备和物联网等领域具有广阔的应用...
随着人工智能技术的迅猛发展,机器学习已成为研究与应用领域的热点之一。Python作为一种解释型语言,在机器学习领域占据了主导地位,成为首选的编程语言。本文将详细探讨机器学习框架偏爱Python的13个重要原因,并为...
前言在互联网时代,分布式应用、系统变得越来越多,我们在使用 .Net 技术构建分布式系统的时候,需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦,但是纵观.Net圈,能够符合要求的这样的组件...
11. 人工智能(AI)和机器学习(Machine Learning):作为文件中的第五个关键主题,人工智能和机器学习正在改变我们的工作方式、决策过程,并重新定义产品和服务。它们是数字化转型中不可或缺的部分。 12. 白皮书的...
11. **爬虫进阶**:随着技能提升,可以学习爬虫的高级技巧,如模拟登录、动态加载内容抓取、图片和视频下载、API接口爬取、机器学习辅助爬虫等。 12. **实战项目**:理论学习后,通过实际项目锻炼技能,如爬取新闻...
《精通Spark 2.x》是一本专注于使用Apache Spark 2.x版本进行机器学习的实践指南。本书由Alex Tellez、Max Pumperla和Michal Malohlava三位作者共同撰写,旨在指导读者如何构建可扩展的机器学习应用程序,以支持现代...
PHP,Python,Go,C++,分布式中间件,机器学习等等,板块维护者 前言 在编程的世界里,该如何选择自己的技术栈呢。学前端?学 APP 开发?对于 Java、C++、C#、Python、PHP 又如何选择呢?人工智能现如今这么火,...
**FDDI (Fiber Distributed Data Interface)** (光纤分布式数据接口):一种高速局域网标准,使用光纤作为传输介质。 **Fiberoptic trunkline (光纤主干线路)**:在网络中传输大量数据的光纤线路。 **File extension ...