多臺Linux(Ubuntu16.4)下搭建Matlab2017a分佈式計算引擎服務(MDCE)集羣

一、引言

這一篇也是拖了挺久的才更新完。18年9月剛剛摸實驗室服務器的時候,學長那邊正好要跑MATLAB程序。後來學習了如何在服務器上安裝MATLAB ,利用MATLB自帶的並行計算工具在一臺服務器上跑。但是感覺光用一臺服務器的計算資源程序還是跑得不夠快,於是想怎麼樣可以把可用的五臺服務器給用上。調研了發現MATLAB自帶的分佈式計算引擎(Matlab Distributed Computing Engine,MDCE)服務可以調用這五臺服務器的計算資源進行分佈式並行計算。
接下來就探索如何在多臺Linux(Ubuntu16.4)系統下搭建Matlab分佈式計算引擎服務(MDCE)集羣,由於網上關於Linux系統下搭建MDCE的教程比較少,我把自己搭建的過程向大家介紹一下。

二、介紹

關於Matlab分佈式計算引擎服務的原理網上挺多資料的,主要參照官方文檔理解。
https://ww2.mathworks.cn/products/distriben.html
https://ww2.mathworks.cn/products/parallel-computing.html
這個視頻也把原理介紹得很清楚:
https://ww2.mathworks.cn/videos/cluster-computing-with-matlab-for-system-administrators-99076.html

官方:
利用 MATLAB Distributed Computing Server™,可以在計算機集羣、雲上運行計算密集型 MATLAB® 程序和 Simulink® 模型。您可以在多核電腦上、運用 Parallel Computing Toolbox™ 開發程序或模型,然後在 MATLAB Distributed Computing Server 上運行開發的程序或模型,從而擴展到多臺計算機。該服務器支持批處理作業、並行計算以及分佈式大數據。該服務器包括內置集羣作業調度器,併爲常用第三方調度器提供支持。

在這裏插入圖片描述
其他博客:
Distributed Computing Toolbox就是分佈式計算工具箱,簡稱DCT,其可以在多臺計算機組成的Cluster中實現分佈式或並行式計算。簡單來說,我們是把一個很繁重的工作,分解成許多小任務,然後分給不同的計算機去處理,最後把計算結果彙總,以達到提高計算效率的目的。
Matlab的做法是這樣的:在每臺參與計算的計算機中啓動一個叫Matlab Distributed Computing Engine的服務,該服務能啓動參與計算的worker的Matlab session和管理各臺計算機workers的job manager。Job manager對workers進行管理,給workers分配計算任務,接收workers計算後的結果。而你本人就是client,你要把你的工作分解爲多個任務,然後把任務給job manager。job manager就會根據workers的多少和空閒情況,適當地把任務分配給workers去做。workers完成任務後,會把結果返回給job manager。當所有workers都完成任務後,用戶client,便可以從job manager裏取回結果。

三、Linux搭建MDCE的流程

1.實驗環境說明,安裝MATLAB

實驗室裏有五臺戴爾的服務器可用,每臺被檢測可用12核(貌似Matlab最高支持12core/臺或者是服務器上限制了核心數的使用),正好用來做分佈式並行式計算。可以看看在局域網內每臺機子的IP地址,我這五臺機子的IP地址:10.2.6.220-10.2.6.223,10.2.6.225。大家各自查看自己的機子IP地址。

實驗環境:
Matlab2017a版本,五臺Linux(Ubuntu16.4)系統的服務器

首先,按照在Linux環境(Ubuntu16.04)下安裝Matlab2017a的方法,在每臺待搭建的機子上都安裝相同序列號相同版本的matlab。

在搭建工作前注意一下幾點:
(1) 保證每臺機子之間能夠正常通信,可使用ping命令測試。
(2) 保證每臺機子安裝的Matlab版本一致,且最好安裝在同一目錄下,避免後面配置時更改路徑。
(3) 安裝Matlab時,把工具箱全部安裝上,確保MATLAB Distributed Computing Server選上。之後不會使用“License Manager”服務,可以選擇不安裝該項。詳細的安裝過程可以參照這裏:在Linux環境(Ubuntu16.04)下安裝Matlab2017a

Matlab安裝的一些問題(這是探索過程掉過坑的):
Q:部署Matlab分佈式計算服務是否需要Matlab網絡版本?
A:每臺機子使用相同的單機版序列號安裝Matlab即可。 安裝單機版和網絡版的區別: 網絡版本比單機版多了一個licenses manger,由於license問題MATLAB安裝破解失敗。
Q:Linux系統上已經安裝好的Matlab如何卸載?
A:直接刪除安裝目錄下的文件夾便可以卸載。具體參照自己的安裝目錄。

卸載 MATLAB
sudo rm -rf /usr/local/MATLAB/

下面,開始MDCE搭建流程。

2.安裝並開啓MDCE服務

每臺機子上安裝MDCE服務並開啓服務。
cd命令進入每臺機子的matlab安裝目錄下的這個文件:
/usr/local/MATLAB/R2017a/toolbox/distcomp/bin
運行下面的命令:

sudo ./mdce install

在這裏插入圖片描述
然後,運行下面的命令:

sudo ./mdce start

在這裏插入圖片描述
這樣就在每臺機子上開啓了MATLAB的分佈式計算服務。

3.修改hostname映射

每臺機子上打開hostname和ip地址的映射表,然後修改。

sudo vi /etc/hosts

打開之後的原始文件一般是這樣子的。
在這裏插入圖片描述
修改之後是這樣的,把127.0.1.1 computer5 這一行刪掉。
在這裏插入圖片描述
每臺機子上修改,也是把含有127.0.1.1這一行刪掉,相當於每臺機子上的hosts都需要改成跟上面這張圖一樣的內容。具體來說,在每臺主機上都有一個hostname和ip地址的映射表,每臺機子彼此知道彼此hostname叫什麼,對應的ip是什麼。

4.客戶端界面操作

選擇一臺機子作爲客戶端,在這裏我選擇了computer2做爲客戶端進行操作。computer2的IP爲10.2.6.222,每個機子的IP可以自己去查到。

下面的步驟僅在客戶端機子(computer2)上操作,這個操作過程可能會出現一些問題,最後給出我在搭建過程中的常見問題及答案。

首先,打開客戶端界面。

sudo /usr/local/MATLAB/R2017a/toolbox/distcomp/bin/admincenter

在這裏插入圖片描述
然後,填寫待搭建的機子的IP號,把每臺機子的IP列進去。
在這裏插入圖片描述
然後,測試連通性。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
很開心的發現全部都是綠色的,然後可以關閉窗口啦,說明很順利。

接下來,創建調度器。
在這裏插入圖片描述
設置調度器名稱,並選擇一個機子來做調度器的功能,這個選擇不影響這個機子計算資源的使用。
在這裏插入圖片描述
最後,就是創建工作節點啦。workers爲MATLAB計算引擎,也是工作節點。
在這裏插入圖片描述
在這裏就是設置你想要多少個工作節點來進行計算,這個工作節點worker數是可以比可用的核心數要大的,相當於並行計算的線程能夠更多一些吧,但是也是有一定瓶頸的。
在這裏,我設置是把核心數和工作節點數對應的。
把所有的物理機選上,選擇剛剛設置好的調度器,根據每一臺選用你想用的工作節點數,我這裏選每一臺物理機開啓12個worker,與12個核心數相同。
在這裏插入圖片描述
接下來就等着它建立worker,可以發現五臺機子可以有60個worker。
在這裏插入圖片描述

5.MATLAB驗證

打開MATLAB。

sudo /usr/local/MATLAB/R2017a/bin/matlab

在這裏插入圖片描述
選擇parallel → Manage Cluster Profile, 打開集羣管理器,
在這裏插入圖片描述
選擇之前建立的調度器所管理的集羣,一般情況下會變成默認的了,然後選擇Validation選項卡,點擊Validate,等待着驗證。完成後可以發現這個集羣有60個worker。
在這裏插入圖片描述
如果使用本地的集羣資源,同樣Validate,發現本地可用的有12個worker。
在這裏插入圖片描述
接下來的使用就是開啓並行計算工具跑代碼就可以了。

6.代碼驗證

具體代碼網上的有很多,一般都是把循環for改成parfor,把代碼改成可以並行計算的代碼。可以利用計時器,tic-toc記錄測試代碼分佈式並行計算的時間。
開啓並行計算的方法網上的方法也很多,我這裏是先調用再計算的方式。可以先打卡MATLAB左下角的開啓並行計算圖標,舉個例子,下圖這是開啓了之後的狀態,顯示了36個worker可工作,想調用幾個worker都是可以設置的,不詳細說明了。
在這裏插入圖片描述
具體你想調用幾個worker進行計算可以在MATLAB命令行裏運行以下命令:

>> parpool(20)  %啓動20個worker進行計算

在這裏插入圖片描述
我用的這個程序可以發現,使用20個worker工作會比使用4個worker工作的時間要快。但是計算時間有時候與代碼的複雜程度有關,也和調度的這個過程有關。有些簡單的程序不使用並行計算也可能比使用並行計算的時間快。多任務對調度器也有要求,也是需要有好的調度算法。一般來說,越複雜的代碼使用並行計算的效果越明顯。

四、常見問題

Q1:在Admin center內連接主機後,發現MDCE service狀態爲unavailable怎麼辦?
在這裏插入圖片描述
A1:對應的主機matlab上沒有安裝MDCE服務,在對應的主機上使用命令行安裝並且開始MDCE服務(第三章第2點)。然後發現對應主機的MDCE service狀態變爲running。
在這裏插入圖片描述
Q2:在Admin center內運行Test Connectivity發現hostname有錯誤,服務端口也連接不上。
在這裏插入圖片描述
A2:更改/etc/hosts文件內的IP地址和主機號,將要搭建的主機的IP和主機號對應,並在每一個要搭建的主機都進行修改成一樣的對應關係表。(第三章第3點)
在這裏插入圖片描述
光改一臺機子不行,每臺機子都得改成相同的,不然就會這樣:
在這裏插入圖片描述
每臺機子都改完之後會變成這樣:
在這裏插入圖片描述
Q3:在Test Connectivity成功後,開始添加MJS調度器,需要一臺主機來做調度。客戶端和調度器的計算資源能否可以使用?
A3:可以將客戶端主機加入Hosts,右圖也說明了客戶端和調度器的計算資源都可以用於計算。

五、結語

通過上面的流程,我們在實驗室服務器上搭建了Matlab分佈式計算(MDCE)服務集羣,由五臺物理機組成,其中包含一臺客戶端,一臺調度器,所有機子都可以做計算資源。這樣子已經足夠可以加速跑一跑代碼了,之前一臺機子12個worker跑學姐的代碼跑了五天,之後縮短了一半多的時間。
這也算是在探索中出的一份多臺Linux(Ubuntu16.4)下搭建Matlab2017a分佈式計算引擎服務(MDCE)集羣的流程。畢竟在Linux下搭的,其中也走過不少坑,大家有問題可以多交流。

參考:
在Linux環境(Ubuntu16.04)下安裝Matlab2017a
https://blog.csdn.net/qq_31285709/article/details/82083902

Window下Matlab分佈式計算集羣建立方法
https://blog.csdn.net/xiaotianlan/article/details/52151032
https://blog.csdn.net/zhangfuliang123/article/details/75047676
https://blog.csdn.net/kklots/article/details/24675575

linux搭建過程的問題
https://blog.csdn.net/huntstart/article/details/51124889

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