王益 《分布式机器学习的故事》
前言2 《分布式机器学习的评价标准》
1 可扩展性
以前都不太清楚可扩展性的意思,今天看这篇博文,算是有了了解。
指的是“投入更多的机器,能处理更多的数据”,而传统的并行计算要求“投入更多机器,数据大小不变,计算速度更快”
2 数据模型要根据架构和数据修改
原因两个:
一个是大数据都是长尾分布的。(什么是长尾分布)。而学术论文里的数据都是假设指数分布。
二个是 很多机器学习算法(比如MCMC)都不适合并行化。
3 引入更多的机器的首要目的是是为了处理更多的数据,而不是单纯的提高性能
在开始说故事之前,再先正名几个概念: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做的系统。关于这个“模仿”,又有另一个故事。)