听闻Petuum大名已久,这几天部署了一番。
Petuum是Eric Xing实验室做的分布式机器学习平台,详情可以阅读谢澎涛在知乎的回答
http://petuum.github.io/papers/PetuumDataScienceSummit2015.pdf
Petuum有Bosen(数据并行)和Strads(模型并行)两个主要组成部分。
Bösen使用的一致性协议是受限异步,既可以获得与完全异步相似的性能,又可以保证机器学习算法的近似正确性。
Strads对机器学习模型参数的更新进行细粒度的调度,根据参数的优先级自动调整更新次序,并根据参数的相关性防止不安全的并行。
除此之外还有一个基于GPU的parameter server分布式框架Poseidon(波塞冬)项目。
本来一开始想装在mac上面跑跑单机版程序的,后来发现依赖的库包的确是有些多,就放弃了。转而在mac上装了三台Ubuntu的虚拟机(每个2核2G内存),只是配置和调试代码还是足够的。大的程序以后再转到大集群上去。并且装好了hadoop。附Hadoop2.6的配置 http://www.powerxing.com/install-hadoop-cluster/
编译
官方提供的安装文档足够详细。分为两种:Configuration and Machine Files for Petuum Apps和Running on Hadoop clusters with YARN/HDFS,第一种是基于NFS共享文件系统的,第二种是基于HDFS的。一开始给人的错觉(包括配置文件里面的描述)是,第一种不需要hadoop,第二种需要。事实上两种都是需要hadoop作为底层框架的。
我用的Ubuntu14.04的镜像。除去官网的配置之外,还需要几个依赖包。
apt-get
install libtcmalloc-minimal4 libtcmalloc-minimal4-dbg libgoogle-perftools-dev libpopt0 libpopt-dev
编译第三方包的时候,直接make会报错
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}
src/base/low_level_alloc.cc: In static member function 'static bool LowLevelAlloc::DeleteArena(LowLevelAlloc::Arena*)':
src/base/low_level_alloc.cc:337:44: error: 'munmap' was not declared in this scope
munmap_result = munmap(region, size);
逐一排查之后,问题出在gperftools上面。因为直接install了libgoogle的,所以暂时先跳过去了。目前还没有出问题。
从编译的角度讲,bosen的编译要远复杂与strads的。
运行
基于NFS(我这里mac的共享文件夹天然充当了NFS)的bosen因为只需要在编译一遍,其他几台slave机器上就可以运行了。但是需要注意的是,环境在几台机器上也要保持一致。例如,hadoop的path,还有需要apt-get install的库(例如跑NMF时所有机器上都需要安装libtcmalloc-minimal4)。
然后每个算法都需要单独make。数据是个问题。几个算法都只有格式没有数据,需要自己搞定。另外,作为算法演示,几个方法都提供了一个随机数据生成器。