聽聞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。數據是個問題。幾個算法都只有格式沒有數據,需要自己搞定。另外,作為算法演示,幾個方法都提供了一個隨機數據生成器。