高性能計算 ubantu下集群搭建
參考博客:https://blog.csdn.net/u012304016/article/details/52423738(尊重別人的知識產權),一些細節地方我做了標注
廢話不多說,直接開始講解
==============================================================
1.安裝MPICH
在安裝mpich之前,為了避免在安裝中出錯,需要安裝gcc、g++以及gfortran三個編譯器。
首先更新apt-get的安裝版本,從而保證安裝的資源最新:
sudo apt-get update
分別安裝gcc、g++以及gfortran:
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gfortran
==============================================================
下面開始mpich的安裝,mpich源碼的包,我上傳到了百度雲里面了,有需要自取。
鏈接:https://pan.baidu.com/s/1Fd7vvs3LBpDtCKw4x6IpkQ
提取碼:a3ad
壓縮包解壓后,將解壓出來的文件夾,在主目錄下創建一個新的文件夾,(可命名為“MPICH”)注意兩台電腦上面這一文件夾的名字必須一樣,路徑也必須一樣
進入解壓后的文件夾里面,
接下來的安裝過程根據shell的版本而異,首先檢查shell版本:
cat /etc/shells
(1)
如果顯示為:/bin/sh 和 /bin/bash,則配置、編譯和安裝命令分別為:(大部分都是這個)
配置:
./configure 2>&1 | tee c.txt
編譯:
make 2>&1 | tee m.txt (如果報錯,需要加一個sudo)
安裝:
make install |& tee mi.txt ((如果報錯,需要加一個sudo))
(2)
如果顯示為:/bin/csh 和 /bin/tcsh,則配置、編譯和安裝命令分別為:
配置:
./configure |& tee c.txt
編譯:
make |& tee m.txt
安裝:
make install |& tee mi.txt
(安裝結束后,用which mpicc和which mpiexec檢查安裝是否成功,如果有這兩個可執行程序的路徑顯示,則表示安裝成功。)
2. 安裝ssh並且配置多機運行環境
安裝ssh:
sudo apt-get install ssh
!!!接下來需要兩台機器在同一個局域網下面
(1)接下來正式配置多機運行環境,首先修改兩台開發板各自的主機名稱:
sudo gedit /etc/hostname
在打開的文件中分別輸入主機名保存即可,我設置的兩台主機名稱分別為:hang-pc1 和hang-pc2。設置完成后重啟機器。
(2)分別配置兩台機器的hosts文件,在此之前先通過ip addr show命令查看兩台機器eth0的IP地址,我的IP地址為:
然后分別將兩台機器的ip地址放在對應的位置(下面統一標注IP1和IP2)
hang-pc1 : IP1
hang-pc2 : IP2
然后修改hosts文件:
sudo gedit /etc/hosts
根據以上查得的IP地址,在兩台機器的hosts文件中均輸入以下內容並保存:(IP1 和主機名中間的間隔是用"Tab"鍵按出來的)
IP1 hang-pc1
IP2 hang-pc2
(3)
接下來通過配置ssh使兩台機器可以無需密碼互相訪問。
在hang-pc1上(hang-pc2同理)通過ssh-keygen指令生產公鑰和私鑰:
ssh-keygen -t rsa
注:再輸入過程中需要輸入參數,一直按回車即可。
結束后,cd到 ~/.ssh目錄,ls一下即可看到產生的公鑰(id_rsa.pub)和私鑰(id_rsa):
cd ~/.ssh
ls
接下來通過兩台機器的公鑰(id_rsa.pub)來制作授權文件(authorized_keys)。
(4)接下來將hang-pc2的公鑰傳送到hang-pc1中(並重命名為rsa_from_pc2.pub),來制作授權文件。在hang-pc2的終端輸入:
scp ~/.ssh/id_rsa.pub hang-pc1:~/.ssh/rsa_from_pc2.pub (這個命令中hang-pc1前面需要加上你的用戶名和@,比如我的就要加上lays@)
注:在傳輸期間需要輸入hang-pc1的密碼,輸入之前設置好的密碼即可。
傳輸完成后,在hang-pc1的~/.ssh/id_rsa.pub目錄下ls一下即可看到傳入的文件rsa_from_pc2.pub。
將hang-pc1的公鑰另復制一份並且重命名為authorized_keys,在hang-pc1的~/.ssh/目錄下輸入:
cp ~/.ssh/id_rsa.pub authorized_keys
將rsa_from_pc2.pub添加到authorized_keys從而完成authorized_keys的制作:
cat ~/.ssh/rsa_from_pc2.pub >> authorized_keys
然后將在hang-pc1上制作好的authorized_keys發送一份給hang-pc2:
scp ~/.ssh/authorized_keys hang-pc2:~/.ssh/ (這個命令中hang-pc2前面需要加上你的用戶名和@)
用ssh_add命令將私鑰也添加進來(hang-pc1和hang-pc2均要添加):
ssh-add ~/.ssh/id_rsa
最后,為了要讓兩台機器之間無密碼訪問,需要設置公鑰、私鑰和授權文件的權限(兩台機器都要設置):
chmod 755 ~
chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
權限設置完畢后,兩台機器就可以不需密碼互相訪問了,在hang-pc1上輸入指令:
ssh hang-pc2
可以看到,hang-pc1不需輸入密碼就能訪問到hang-pc2。通過exit指令返回到hang-pc1。
3.多機之間運行MPI程序
首先,在home根目錄(也可以是其他目錄)下新建一個文件:mpi_config_file。
mpi_config_file是在運行MPI程序時參考的配置文件,它顯式注明每台機器各有幾個CPU核。
cd /home
touch mpi_config_file
接下來在每台機器上查看各自的CPU核數:
lscpu
編輯mpi_config_file:
sudo gedit mpi_config_file
因為我和隊友的CPU核數分別為2和4,所以在mpi_config_file中輸入一下內容並保存:
hang-pc1:2
hang-pc2:4
接下來就可以找一個MPI程序在多機之間運行了
在我們之前解壓的文件夾下的examples目錄下就有現成的可執行程序:cpi,我們運行它:
(在這之前,為了保證兩台機器上面的文件夾的名字和路徑都是一樣,就將這個文件夾都移動到/home目錄下
比如我就是 sudo cp -r /home/lays/MPICH /home 就將這個復制一下到了/home目錄下
)
然后進入到文件夾examples目錄下打開終端,運行
mpiexec -n 8 -f /home/mpi_config_file ./cpi
注: 參數-n 8表示改程序分將拆分為8個並行過程執行
參數-f /home/mpi_config_file 表示運行過程參考配置文件mpi_config_file
屏幕上顯示運行結果:
Process 4 of 8 is on hang-pc1
Process 5 of 8 is on hang-pc1
Process 2 of 8 is on hang-pc2
Process 0 of 8 is on hang-pc1
Process 3 of 8 is on hang-pc2
Process 6 of 8 is on hang-pc2
Process 7 of 8 is on hang-pc1
Process 1 of 8 is on hang-pc2
表示運行成功。(顯示進程在不同的主機上運行)
====================================================================================================================================
再次說明一下
參考博客:https://blog.csdn.net/u012304016/article/details/52423738(尊重別人的知識產權)