通過一天的努力,終於完成了openMPI的多節點安裝,即小集羣安裝。本文使用的是openmpi-1.6.5,下載地址見:http://www.open-mpi.org/software/ompi/v1.6/node
1.1 首先確定是須要安裝GCC和G++編譯器,這個直接apt-get就OK了;shell
sudo apt-get g++ gfortran
1.2 設置主機名ubuntu
先在/etc/hosts中刪除原來的hostname,而後 vi /etc/hostname改爲你想要的,注意必須頂行寫。而後使用hostname命令來從新獲得hostname, logout一下再login就會改掉。vim
這裏我用的是node1-ubuntu和node2-ubuntu。bash
1.3 修改hosts文件,修改以下:ssh
192.168.1.133 node1-ubuntu server 192.168.1.135 node2-ubuntu
1.4 配置自動ssh登陸編輯器
這裏主要是要各個機器之間能無密碼訪問,主要用到的就是SSH,所以須要一些設置。this
首先,咱們須要導出各個節點的公鑰和私鑰:spa
$ ssh-keygen -t rsa
在運行過程當中,會提示你輸入這個輸入那個,不用管那麼多,直接回車就完了。等運行結束後,進入.ssh目錄,你會看到公鑰和私鑰文件;code
$ cd ~/.ssh $ ls id_rsa id_rsa.pub
其中id_rsa就是私鑰,id_rsa.pub就是公鑰,如今咱們須要把各個節點上的公鑰都集中發送到一個節點上,來製做受權文件(authorized_keys).
注意:在兩臺機器必須安裝ssh(sudo apt-get install ssh openssh-server)並且必須設置root密碼(sudo passwd root),才能遠程登陸
$ scp ~/.ssh/id_rsa.pub node1-ubuntu:~/.ssh/1.pub
在將node2-ubuntu拷貝到node1-ubuntu後,在node1-ubuntu進行以下處理:
$ cp ~/.ssh/id_rsa.pub authorized_keys $ cat ~/.ssh/1.pub >> authorized_keys
在node1-ubuntu上製做好的authorized_keys拷貝到node2-ubuntu上:(node1-ubuntu使用scp)
$ scp ~/.ssh/authorized_keys node2-ubuntu:~/.ssh/
要想讓這兩臺機器無密碼登陸,因此咱們須要更改一下必要的文件的權限(全部節點都要更改):其實只要保證authorized_keys的文件權限爲600或者644
$ chmod 755 ~ $ chmod 755 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/id_rsa $ chmod 644 ~/.ssh/id_rsa.pub
至此,SSH配置就完成了。下面檢驗一下:
在一個主機上面SSH另外一個主機:
$ ssh node1-ubuntu
2.1 首先將下載的文件解壓,下載的文件在當前用戶目錄裏面的「下載」目錄裏面,我直接解壓到當前目錄:
$ tar xvfz openmpi-1.6.5.tar.gz
2.2 安裝官方文檔配置的,能夠查看解壓後的README文檔參考:因爲是bash,所以選擇如下命令,prefix指示安裝路徑,USERNAME就是當前用戶的用戶名,,
在此以前固然要創建安裝openMPI的路徑,也就是:
$ mkdir openmpi
運行shell程序configure對openmpi進行一些配置,關於configure選項,參見openmpi-1.6.5下的README文件。
$ ./configure --prefix=/home/<USERNAME>/openmpi 2>&1 | tee install1.log
並且在以前的安裝過程當中,我發現若是不由止fortran,安裝會出問題,會致使openMPI安裝不徹底而出錯,是由於沒有安裝fortran編譯器,若是使用C/C++的話,這裏建議禁用fortran。
接下來,編譯和安裝:
$ make all 2>&1 | tee make.log $ make install 2>&1 | tee install2.log
安裝完成後,會有以下狀況:
至此,OpenMPI安裝完成。
2.3 設置進程的配置環境
這裏設置環境變量主要是將openmpi的安裝目錄加到系統環境變量中,這裏我在/etc/environment中加入對應的路徑:
用vim編輯器打開/etc/environment:
$ sudo vim /etc/environment
輸入密碼以後,將下面語句添加到最後一行:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/awy/openmpi/bin"
LD_LIBRARY_PATH=/home/awy/openmpi/lib
1 3 $ which mpicc 4 /home/awy/openmpi/bin/mpicc 5 $ which mpiexec 6 /home/awy/openmpi/bin/mpiexec 7 $ which mpirun 8 /home/awy/openmpi/bin/mpirun
這樣就說明openmpi已經安裝成功了。
運行安裝目錄中examples下的例子,在此以前,先編譯下make:
mpiexec -np 2 ./openmpi-1.6.5/examples/hell_f90
用vim編輯一個文件命名爲hosts:若是你想在一個節點上運行多個進程,那麼hostfile 可使用 "slots" 屬性。若是沒有指定"slots",那麼將假設其數目爲1.
node1-ubuntu
node2-ubuntu
或者
node1-ubuntu slots=4
node2-ubuntu slots=2
讓兩個節點並行運行例子程序,以下所示:
$ mpiexec -hostfile hosts -np 8 ./openmpi-1.6.5/examples/hello_f90
1.出現這種錯誤./openmpi-1.6.5/examples/hello_f90: error while loading shared libraries: libmpi_f77.so.1: cannot open shared object file: No such file or directory,或者
bash: orted: command not found -------------------------------------------------------------------------- A daemon (pid 27974) died unexpectedly with status 127 while attempting to launch so we are aborting. There may be more information reported by the environment (see above). This may be because the daemon was unable to find all the needed shared libraries on the remote node. You may set your LD_LIBRARY_PATH to have the location of the shared libraries on the remote nodes and this will automatically be forwarded to the remote nodes. -------------------------------------------------------------------------- -------------------------------------------------------------------------- mpirun noticed that the job aborted, but has no info as to the process that caused that situation. -------------------------------------------------------------------------- mpiexec: clean termination accomplished
說明是LD_LIBRARY_PATH爲空,能夠進行這樣查看:
mpiexec -n 1 printenv | grep PATH
查看LD_LIBRARY_PATH,若是沒有,則能夠進行以下操做:
$ source /etc/environment
$ export LD_LIBRARY_PATH
如此,即可以成功了。
2.若是要在IPv6的環境下運行openMPI,則安裝的時候要開啓:即在./configure --prefix=/home/<username>/openmpi --enable-ipv6,這樣即可以了。