1. 程式人生 > >MPI平行計算環境的建立

MPI平行計算環境的建立

MPI平行計算環境的建立

一、配置前的準備工作

假設機群是3個節點。

1.安裝Linux(CentOS 5.2)系統,並保證每個節點的sshd服務能正常啟動。

筆者並沒採用真實的3臺機器,而是利用虛擬機器(VMware Workstation6.5)在一臺裝有XP系統的機器上安裝多個Linux系統進行模擬。

注意事項:

1)因為筆者採用mpich2-1.3.2p1.tar.gz,此版本對gccautoconf等軟體包版本要求較高,為避免出錯,儘量安裝最新Linux系統。

2)在用VMware Workstation安裝Linux系統時可能會遇到磁碟型別不相容的問題,筆者採用的版本就出現了這樣的問題,解決要點如下:

a.啟動Workstation選擇建立定製的虛擬機器;

b.SCSI介面卡型別選LSI Logic (Linux核心在2.4以下的選擇BusLogic)

c.選擇虛擬磁碟型別(IDE)

3)安裝VMware Workstation tools

Linux系統啟動後,選擇選單欄——虛擬機器——安裝VMware tools,按照提示將相應的安裝包複製到你想要的目錄下,執行命令:

tar zxvf vmware-tools.tar.gz

cd vmware-tools(進入解壓目錄)

./install.pl(因版本不同,名字不一定相同,讀者注意,執行名字類似的即可)

2.為每個節點分配IP
地址,IP地址最好連續分配,如192.168.1.2192.168.1.3192.168.1.4......。(不要分配192.168.1.1

3.配置/etc/hosts檔案,該檔案可以實現IP地址和機器的對應解析,所有節點的該檔案均要按下面的內容修改:

192.168.1.2 node1

192.168.1.3 node2

192.168.1.4 node3

通過以上配置後節點之間能夠通過各節點的機器名稱相互訪問。例如,可以通過ping node2進行測試。

注意事項:

該測試必須在關閉Linux防火牆的條件下進行,否則可能失敗。

永久生效:chkconfig iptables on/off

(重啟生效)

即時生效:service iptables start/stop(重啟失效)

二、掛載NFS檔案系統

由於MPICH的安裝目錄和使用者可執行程式在平行計算時需要在所有節點儲存副本,而且目錄要相互對應,每次一個節點一個節點的複製非常麻煩,採用NFS檔案系統後可以實現所有節點內容與主節點內容同步更新,並自動實現目錄的對應。NFS檔案系統使得所有機器都能以同樣的路徑訪問伺服器上儲存的檔案,訪問方法如同對本地檔案的訪問。通常我們會將MPICH的安裝目錄及並行程式存放目錄配置為NFS共享目錄,這樣可以省去將檔案向各個節點複製的麻煩,大大提高工作效率。

NFS檔案系統的配置方法示例如下(假設NFS伺服器IP192.168.1.2,配置需要在root使用者下完成)。

1.伺服器端配置方法(下面的配置只在主節點進行)。

1/etc/exports檔案配置

在檔案/etc/exports中增加以下幾行:

/usr/cluster 192.168.1.3(rw,sync,no_root_squash,no_subtree_check)

/usr/cluster 192.168.1.4(rw,sync,no_root_squash,no_subtree_check)

這幾行文字表明NFS伺服器向IP地址為192.168.1.3,192.168.1.42個節點共享其/usr/cluster目錄(目錄必須存在),並使這些節點具有相應的許可權(可查詢相關的文件)。如有更多的節點可按此方法填寫。

2)啟動NFS服務

啟動NFS服務只需要以下兩個命令:

service portmap start

注:在最新的核心中,NFS守護程序改為rpcbind,如是新核心,啟動NFS守護程序的命令是“service rpcbind start”。

service nfs start

到此IP192.168.1.2的伺服器已可以向其他兩個節點提供/usr/cluster目錄的檔案共享。

2.客戶端配置方法(需要在所有子節點做同樣的配置)。

1)建立共享目錄。

建立與伺服器相同的共享目錄用於共享伺服器檔案:

mkdir /usr/cluster

2)檢視伺服器已有的共享目錄(這步可省略)。

showmount -e 192.168.1.2

通過這條命令我們可以檢視IP地址為192.168.1.2伺服器可以共享的目錄情況。

3)掛載共享目錄。

mount -t nfs 192.168.1.2:/usr/cluster /usr/cluster

這一命令將NFS伺服器192.168.1.2上的共享目錄掛載到本地/usr/cluster目錄下。我們也可在所有子節點的/etc/fstab檔案中輸入以下的程式碼,使檔案系統在啟動時實現自動掛載NFS

192.168.1.2:/usr/cluster /usr/cluster nfs defaults 0 0

至此我們已可以實現對NFS共享目錄的本地訪問,所有子節點的/usr/cluster資料夾都共享了NFS伺服器的同名資料夾的內容,我們可以像訪問本地檔案一樣訪問共享檔案。MPICH的安裝目錄和使用者存放並行程式的資料夾都需要實現NFS共享,從而避免了每次向各節點發送程式副本。

三、配置ssh實現MPI節點間使用者的無密碼訪問

由於MPI並行程式需要在各節點間進行資訊傳遞,所以必須實現所有節點兩兩之間能無密碼訪問。節點間的無密碼訪問是通過配置ssh公鑰認證來實現的。

例如,對新使用者user配置ssh公鑰認證,先在node1上做以下操作。

1)生成了私鑰id_dsa和公鑰id_dsa.pub,具體操作方法如下。

mkdir ~/.ssh

cd ~/.ssh

ssh-keygen -t dsa

系統顯示一些資訊,遇到系統詢問直接回車即可。

2)將該金鑰用作認證,進行訪問授權。按如下命令在node1執行。

cp ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys

chmod go-rwx ~/.ssh/authorized_keys

3)將~/.ssh目錄下的檔案複製到所有節點。

scp -r ~/.ssh node2:

scp -r ~/.ssh node3:

4)檢查是否可以直接(不需要密碼)登入其他節點。

ssh node1

ssh node2

如能兩兩之間不需要密碼登入其他節點,則表明配置成功。

四、安裝MPICH2

1.下載並解壓MPICH2壓縮包。

tar zxvf mpich2-1.3.2p1.tar.gz

解壓完成後將在當前目錄生成一個MPICH檔案目錄。

2.進入MPICH解壓後的目錄,配置安裝目錄。

注意事項:

最新版本mpich2的程序管理預設使用hydra,而不是mpd。如果你要使用mpd,使用./configure --with-pm=mpd:hydra

./configure --prefix=/usr/cluster/mpich2 --with-pm=mpd:hydra

根據以上配置MPICH將安裝在目錄/usr/cluster/mpich2,並確保所有節點已建立針對該目錄的NFS共享。

3.編譯安裝MPICH2。進入解壓後的MPICH檔案目錄,分別執行makemake install指令,這會花一段較長的時間。

4.在當前使用者主目錄下建立並編輯配置檔案mpd.hosts。將所有你允許訪問本機進行平行計算的機器名填入,一行一個機器名,如果該機器上有兩個CPU,就將它的名字加入兩次,以此型別。

node1

node2

node3

node4

注意,文中包含自己的目的是為了在只有一個節點時也可以模擬平行計算環境。

5.配置環境變數。編輯使用者主目錄下的~/.bashrc檔案,增加一行:

PATH="$PATH:/usr/cluster/mpich2/bin"

這一行程式碼將MPI的安裝路徑加入使用者的當前路徑列表。重新開啟命令列視窗後生效。

6.啟動mpd守護程序。執行mpirun,首先要執行mpd。在啟動mpd守護程序前要在各個節點的安裝目錄(/usr/MPICHI-install/etc/mpd.conf)生成一個mpd.conf檔案,內容為:secretword=123456

其中,“123456”為識別口令,在所有節點中都建立該檔案並保持口令一致,口令可自己設定。

進入/usr/MPICHI-install/etc/目錄執行以下命令

touch mpd.conf

chmod 600 mpd.conf

mpd &

mpd &為啟動本地mpd的命令,我們也可以採用以下命令同時啟動mpd.hosts中所列節點的mpd

mpdboot -n <節點個數> -f mpd.hosts

這一命令將同時在mpd.hosts檔案中所指定的節點上啟動mpd管理器。

mpd啟動後執行“mpdtrace -l”可以檢視各個節點機器名。

7.編譯、執行一個簡單的測試程式cpi,這是一個MPICH自帶的計算圓周率的並行示例程式,該例程在MPICH解壓後的examples目錄下。

執行命令如下:

mpirun -np 3 ./cpi

mpi的編譯命令為mpicc,如編譯test.c可用如下命令:

mpicc test.c -o test

mpirun –np 3 ./test