家庭雲服務器高階應用:通過Matlab分佈式計算來演示所謂的“家庭雲計算”(非雲儲存)

Matlab是強大的計算軟件,這不需要過多介紹了,大到航天航空領域,小到計算方程式,Matlab無處不在。

像是這種大型的計算工具必然要支持分佈式羣集計算功能,即讓多臺電腦、服務器,協同計算同一數據,以實現“人多力量大”的加速效果。

我本人不會使用Matlab,但出於對老婆的關心,考慮到她常因電腦性能不足,而爲了一個計算登上數個小時,我決心利用家裏的電腦資源(家庭服務器+家庭日用電腦主機)來打造一個基本的Matlab計算羣集,以達到加速效果。而這樣的一個佈局,也正符合了我當初設計的“家庭雲”的理念。

有了Matlab雲集,上網本現在都可以跑大型計算了~ 

 

 

第一步:安裝Matlab及其分佈式計算服務(MDCE)

MDCE服務是需要另外購買的,學生版不提供(盜版基本都包括了)。

 

- 安裝Matlab程序的部分我就省略了。安裝好以後,請運行Matlab(我以2013a版本爲範例)
- 在頂端地址欄部分打開以下路徑:C:\Program Files\MATLAB\R2013a\toolbox\distcomp\bin (見下圖)

 

 

- 然後分先後運行 !mdce install 以及 !mdce start (注意指令前面的感嘆號!)

此時可以右鍵點擊左邊的addMatlabToWindowsFirewall.bat,然後選擇在Windows資源管理器中打開,然後以管理員身份運行。這樣的目的是爲了打開防火牆中Matlab分佈式計算的對應端口。

到這裏就算完成Matlab分佈式計算服務的安裝了。需要注意的是:所有將參與該計算羣集或使用該計算羣集功能的服務器和計算機都需要完成以上操作,包括很弱的上網本也要,不開啓MDCE服務是不能連接計算機羣的

 

 

第二步:進行機羣的配置

光是完成以上安裝還不行,還要進行配置,即把所有可以用的計算機資源都聯繫捆綁在一起。

· 具體操作是在剛纔打開防火牆的批運行文件目錄下(C:\Program Files\MATLAB\R2013a\toolbox\distcomp\bin),以管理員身份再運行admincenter.bat文件,然後就會看見下圖:

 

當然我們首先點擊那個“Add or Find”,然後被要求輸入主機名或相應IP地址(如果有多臺主機,則需要重複此項操作將其全部加入)

完成後結果如下:

 

現在我有三臺四核CPU電腦在計算機羣內,且都開啓了MDCE服務,接下來我要做的就是建立一個Job,然後選擇開啓的總線程,然後做一個示範性計算。

· 建立Job就是點上圖中間部分左側的Start
· 然後隨便寫一個名字,我用Job1
· 然後選擇由哪臺電腦作爲主機來發起該計算 (見下圖)

然後設置要開啓的總線程(workers),由上圖可見,三臺四核CPU主機一共可以提供12個workers,即12條線程同時啓動進行Matlab並行計算。

這裏要說明一下的是,“核心”是指電腦的物理核,多線程不算核心,譬如Intel i7 四核8線程CPU只能作爲四核對待,只能提供4個worker,而AMD的FX八核處理器,由於是物理核,則能提供8個worker

還有一點,服務器集羣中的worker必須要統一,即大家都必須使用同等數量的worker來協同工作,不能某一臺性能強點就開啓四核,另一臺弱點只開啓兩核,這樣不行!所以,請不要把雙核CPU、四核CPU混在一起作爲一個集羣,除非你只打算在四核主機上開啓兩個worker。

以上圖爲例,我勾選了全部三臺主機作爲計算集羣,然後每臺開啓四個核,即四個worker,然後總共有12個worker將爲我同時進行計算。

到這裏,配置部分就完成了。接下來要在Matlab操作機器上調用以上配置。Matlab稱之爲Cluster Profile

 

第三步:Matlab客戶機調用集羣

回到Matlab主程序,打開下圖顯示的Manage Cluster Profiles

 

打開上述管理器後,默認情況下只有一個local檔案(這是給Matlab開啓本機多核計算的檔案,不要刪除了)。我們直接點擊那個Discover Clusters就可以了,不需要手動配置,選擇On your network(本地局域網內)

完成後看到下圖

我用1和2表明了先後要做的兩件事:1.給檔案改名(右鍵然後選擇改名,我改爲cluster)。2.檢測一下是否一切正常

全部測試通過!如果你有某項測試未通過,可以點擊感嘆號看到具體原因,很多時候是防火牆造成的,注意執行前面提到的開啓防火牆。(如果實在是弄不清防火牆設置,可以索性關閉了~

到這裏就大功告成了!演示一下開啓12個worker進行計算

 matlabpool open cluster; 是調用cluster配置文件,開啓12個worker的指令,右下角顯示的是成功開啓的worker數量。

matlabpool close; 是關閉分佈式計算/並行計算的指令,建議每次用完都執行一次。

因爲我不會具體的matlab代碼,所以沒法演示一段12 worker一起計算的表現。根據老婆之前調用8個worker(服務器+家中主電腦)的經驗,僅把for循環改爲parfor循環(具體參見Matlab官方指導有關如何運用並行計算),原先一個小時的計算現在能提速2.5倍甚至更多。

 

最後:關於一些疑問和解答

1. 首先要解釋一下以上Matlab的分佈式計算和博客主題“家庭雲”的關係。很多網站的文章在提到“家庭雲”的概念時,總是暗示,甚至錯誤地把“雲技術”與“雲儲存”劃上等號。“雲技術”說白了是服務器的利用,而在服務器端存儲文件,只是雲技術的一部分。Matlab的分佈式計算,正巧可以幫助理解雲計算的核心概念,而在家中架設一個實時開放的Matlab服務器,這就是“家庭雲計算”的典型表現,超越了我之前雲儲存的應用範圍。

 

2. 這個雲目前爲止只是在家中局域網的範圍服務,在學校在公司,怎麼使用家中的雲?

如果有看過前面的博文,會知道家庭雲最基本的一項功能就是提供***連接。我沒有打算把Matlab服務器公開到互聯網上,所以端口不用在路由器上映射,如果學校或公司電腦需要用到家裏的雲,***連接回家就好了,所有IP都是固定好設置好的,與在網內使用服務無異。

 

3. Matlab分佈式計算的防火牆端口設置是比較麻煩的。根據官方資料,如果線程多了,所使用的端口也會相應增加。也就是說,8個worker所需要打開的端口,和12個worker所需要打開的端口是不一樣的!所以,上面不會設置防火牆的網友可以索性把它關閉了。

 

4. 上網本的最高階利用:

上網本是很弱的設備,勉強跑個Windows就可以了,談運行Matlab?簡直笑話!但是,有了雲集Matlab,可以在上網本上運行任何計算。這裏需要注意的是,在配置上述第二步驟的時候,上網本千萬不要加入到羣集中,只勾選服務器就可以了。上網本所需要做的就是把代碼和數據從本機發送給服務器,然後計算的工作由服務器處理。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章