虛擬機(jī)CentOS中配置MPI多節(jié)點(diǎn)并行計(jì)算完整版,這是一個(gè)新手教程,從一個(gè)空白的CentOS到能正常運(yùn)行的基礎(chǔ)環(huán)境,盡量詳細(xì)寫(xiě)了每個(gè)步驟
目前創(chuàng)新互聯(lián)建站已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、自流井網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
我的環(huán)境如下:
宿主機(jī):Windows 10 Pro
虛擬機(jī):VMware 12 + CentOS 6.6
一、 虛擬機(jī)網(wǎng)絡(luò)配置實(shí)現(xiàn)多節(jié)點(diǎn)互訪(fǎng)
硬件資源有限,所以我只開(kāi)了兩臺(tái)虛擬機(jī)均為 Centos 6.6。
1.修改網(wǎng)卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 將其中內(nèi)容修改如下:
DEVICE=eth0
HWADDR=00:0C:29:A0:3A:CA
TYPE=Ethernet
UUID=bf583745-f834-451c-890c-39821a590543
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.207.128
NETMASK=255.255.255.0
DNS1=192.168.207.2
將每一臺(tái)虛擬機(jī)都如此配置,IPADDR是ip地址,不要重復(fù)
2.修改網(wǎng)關(guān)及主機(jī)名
/etc/sysconfig/network
ETWORKING=yes
HOSTNAME=node1
NTPSERVERARGS=iburst
GATEWAY=192.168.207.2
一些文章中提到還需要修改VMware的設(shè)置(關(guān)閉本地DHCP服務(wù)),實(shí)際上,Centos 中設(shè)置好后就不需要?jiǎng)覸Mware的設(shè)置了
二、 在虛擬機(jī)中添加同名用戶(hù)
在不同節(jié)點(diǎn)中需要有同名的用戶(hù)以方便免密碼SSH連接
node1和node2中以root用戶(hù)執(zhí)行下列命令
# useradd mpiuser
三、 實(shí)現(xiàn)免密碼SSH登陸
當(dāng)前節(jié)點(diǎn)為node1,用戶(hù)為mpiuser,工作目錄為 ~ 家目錄
1.生成 SSH 私鑰對(duì)
$ ssh-keygen -t rsa 一路回車(chē)就好
2.進(jìn)入 .ssh 目錄
$ cd ./.ssh
3.生成authorized_keys文件
$ cp id_rsa.pub authorized_keys
4.回到mpiuser的家目錄
$ cd ~
5.建立本身的信任連接
$ ssh node1
6.設(shè)置 node2
$ ssh-keygen -t rsa 生成.ssh文件夾
$ scp node1:~/.ssh/* ./ 拷貝node1上的.ssh文件夾到node2
# scp node1:/etc/hosts /etc/hosts 拷貝node1上的hosts文件到node2,可能需要root權(quán)限
$ ssh node2
$ ssh node1
7.如果還有其他節(jié)點(diǎn),設(shè)置方法同node2
設(shè)置成功后,在任意節(jié)點(diǎn)執(zhí)行SSH連接其他節(jié)點(diǎn)都不需要密碼,注意必需每個(gè)節(jié)點(diǎn)都有mpiuser這個(gè)用戶(hù),之所以使用一個(gè)普通用戶(hù),是為了避免root執(zhí)行mpi程序時(shí)遇到風(fēng)險(xiǎn)。在一些mpi實(shí)現(xiàn)中,也不允許以root用戶(hù)執(zhí)行。
四、 配置MPI運(yùn)行環(huán)境
1. 下載 mpich
官方網(wǎng)站 下載其中的mpich-3.2.tar.gz
2. 解壓并進(jìn)入目錄
# tar xvf mpich-3.2.tar.gz
# cd mpich-3.2
# ./configure –prefix=/usr/local/mpich
# make
# make install
3. 設(shè)置環(huán)境變量,修改 /etc/profile ,加入下面幾行代碼
PATH=$PATH:/usr/local/mpich/bin
MANPATH=$MANPATH:/usr/local/mpich/man
export PATH MANPATH
4. 使剛剛的修改生效
# source /etc/profile
5. mpi多節(jié)點(diǎn)配置
新建一個(gè)配置文件
# touch /usr/local/mpich/servers
修改其中內(nèi)容為:
node1:2 #在node1上運(yùn)行兩個(gè)進(jìn)程
node2:2
如果有多個(gè)節(jié)點(diǎn)繼續(xù)往下寫(xiě)
五、 單節(jié)點(diǎn)測(cè)試
將源碼包中的 examples 拷貝到 mpich 的安裝目錄
# cp -r ./examples /usr/local/mpich/
用示例程序進(jìn)行測(cè)試
$ mpirun -np 4 /usr/local/mpich/examples/cpi
Process 1 of 4 is on node1
Process 0 of 4 is on node1
Process 3 of 4 is on node1
Process 2 of 4 is on node1
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.081049
得到如圖的回顯結(jié)果證明mpich的運(yùn)行環(huán)境正常
六、 多節(jié)點(diǎn)測(cè)試
$ mpiexec -np 4 -f /usr/local/mpich/servers /usr/local/mpich/examples/cpi
Process 1 of 4 is on node1
Process 0 of 4 is on node1
Process 3 of 4 is on node2
Process 2 of 4 is on node2
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.139722
如上,在兩個(gè)節(jié)點(diǎn)上分別運(yùn)行了兩個(gè)進(jìn)程,配置過(guò)程到此結(jié)束
linux mpi.h一般在哪?MPI(Message Passing Interface),是一種必須和其它程序語(yǔ)言一起使用的一個(gè)接口。mpi.h就是這個(gè)接口庫(kù)的頭文件,需要下載并安裝這個(gè)第三方庫(kù),目前主要使用的就是Mpich。1.首先進(jìn)行解壓文件openmpi-1.6.2.tar.gz。 2.然后執(zhí)行cd openmpi-1.6.2 3.接著執(zhí)行./configure,一段時(shí)間之后發(fā)現(xiàn)缺少g++編譯器,所以執(zhí)行sudo apt-get install g++ 4.執(zhí)行完之后再執(zhí)行一次./configure就可以配置成功, 5.執(zhí)行sudo make all in。Linux下MPI環(huán)境的安裝配置及MPI程序的編譯運(yùn)行,step by step。
下載MPI安裝包
去這里下載一個(gè)適合的安裝包。
安裝包的解壓
安裝包所在的目錄下,運(yùn)行tar xzvf mpich-x.x.x.tgz。
切換到解壓出來(lái)的包目錄下
cd mpich-x.x.x
configure配置編譯環(huán)境,我這里為它選擇了一個(gè)安裝路徑。
新手,純純搬運(yùn)工【出處引用自: 】
1. Linux常用命令
最常用:
ls(英文全拼:list files):列出目錄及文件名
ls -l:列出目錄及文件名,可查看更多
ls -al:可以看到隱藏文件
cd(英文全拼:change directory):切換目錄
cd .. :返回上一級(jí)
cd 文件夾名:進(jìn)入目錄
pwd(英文全拼:print work directory):顯示目前的目錄
mkdir 文件夾名(英文全拼:make directory):創(chuàng)建一個(gè)新的目錄
rmdir 文件夾名(英文全拼:remove directory):刪除一個(gè)空的目錄
cp xxx xxx(英文全拼:copy file): 復(fù)制文件或目錄
mv xxx xxx(英文全拼:move file): 移動(dòng)文件或目錄,或修改文件或目錄的名稱(chēng)
rm(英文全拼:remove): 刪除文件
rm -r 文件夾名:遞歸刪除某目錄
clear:清空terminal的所有內(nèi)容(或者使用Ctrl+L)
tab按鍵:補(bǔ)充完整文件名或文件夾名
次常用:
vim/vi 某文件 (編輯文件)
nano 某文件 (編輯文件)
touch 文件 (新建空文件)
sudo -s (切換到root模式)
exit (退出root模式等)
sudo chmod -R 755 文件名/文件夾名 (獲取文件/文件夾的755權(quán)限)
chown [用戶(hù)] [文件或目錄](méi) (改變文件或目錄的所有者)
chgrp [用戶(hù)組] [文件或目錄](méi) (改變文件或目錄的所屬組)
make (編譯成.exe)
解壓/解包:
tar文件?(注:tar是打包,不是壓縮?。?/p>
解包:tar?xvf?FileName.tar
打包:tar?cvf?FileName.tar?DirName
.gz文件
解壓1:gunzip?FileName.gz
解壓2:gzip?-d?FileName.gz
壓縮:gzip?FileName
.tar.gz?和?.tgz文件
解壓:tar?zxvf?FileName.tar.gz
壓縮:tar?zcvf?FileName.tar.gz?DirName
安裝和卸載deb軟件包:
安裝:sudo dpkg -i deb文件
查看:sudo dpkg -l
卸載:sudo dpkg -r 軟件名
參考資料:
[1]? Linux?教程
[2]? Linux常用命令
[3]? linux中tar命令的用法
[4]? 全網(wǎng)最全Linux命令總結(jié)
2. vim/vi里的操作
:q 退出
:wq 保存并退出
:w 保存
:q! 強(qiáng)行退出(不保存退出)
:w! 強(qiáng)行保存
i 進(jìn)入編輯,轉(zhuǎn)為輸入模式(光標(biāo)前面)
a 進(jìn)入編輯,轉(zhuǎn)為輸入模式(光標(biāo)后面)
o 進(jìn)入編輯,轉(zhuǎn)為輸入模式(光標(biāo)下方新建一行)
Esc 退出i(插入)命令
3. 超算中PBS常用命令
pbsnodes (查看所有節(jié)點(diǎn))
pbsnodes -l free (查看空閑節(jié)點(diǎn))
pbsnodes 某節(jié)點(diǎn) (查看某節(jié)點(diǎn)狀態(tài))
ssh 某節(jié)點(diǎn) (轉(zhuǎn)到某節(jié)點(diǎn))
exit (離開(kāi)節(jié)點(diǎn))
qsub 文件名.pbs/sh (提交任務(wù))
qstat (列出狀態(tài))
qstat -q (列出隊(duì)列)
qstat -n (列出隊(duì)列中使用的節(jié)點(diǎn))
qstat -f jobid (查看jobid任務(wù)的詳細(xì)信息)
qdel jobid (取消任務(wù))
4. 其他
(1)Linux開(kāi)機(jī)自啟
sh文件中包含:
#!/bin/bash#chkconfig: 2345 80 90#description:auto_run
sh文件移動(dòng)到/etc/init.d后,分別輸入命令:
chkconfig --add xxx.sh
chkconfig --list???
chkconfig xxx.sh on?
service xxx.sh start
參考資料: linux 開(kāi)機(jī)啟動(dòng) .sh 文件 - 自己的太陽(yáng) - 博客園
(2)Linux環(huán)境變量
方法1:臨時(shí)使用環(huán)境變量:export PATH="/home/www/anaconda3/bin:$PATH"
方法2:修改.bashrc文件
參考資料: Linux PATH 作用以及查看和修改方法_haozhepeng的專(zhuān)欄
(3)兩個(gè)sh文件
a.sh文件(用于提交任務(wù),執(zhí)行a.py文件)
#!/bin/sh#PBS -N task#PBS -l nodes=1:ppn=1#PBS -q scorecd $PBS_O_WORKDIRexport OMP_NUM_THREADS=1python a.py
a.sh文件(用于提交任務(wù),執(zhí)行a.exe文件)
#!/bin/sh#PBS -N task#PBS -l nodes=1:ppn=1#PBS -q scorecd $PBS_O_WORKDIRexport OMP_NUM_THREADS=1./a.exe
(4)一個(gè)makefile文件
makefile文件(用于編譯Fortran文件)
INC := -I/public/software/compiler/intel/composer_xe_2015.2.164/mkl/include/intel64/lp64
LIB := -L/public/software/compiler/intel/composer_xe_2015.2.164/mkl/lib/intel64
mpi:= -I/public/software/mpi/mpich/3.1.4/intel/include /public/software/mpi/mpich/3.1.4/intel/lib -lmpich -limf -lsvml -lintlc
src:=Console1exec:=a
all: $(src).f90
ifort? $(src).f90? $(INC) $(LIB) -openmp -lmkl_intel_lp64 -Wl,--start-group -lmkl_intel_thread -lmkl_lapack95_lp64 -lmkl_core -lmkl_blas95_lp64? -Wl,--end-group -liomp5 -lpthread -O2 -o $(exec).exe