Ubuntu下MPI并行环境配置

下面以两台计算机为例,配置MPI并行环境。

一、修改机器主机名

为了方便我们给两台机器分别取名为 master(作为主节点) 和 node1。(不改也无所谓,就是不方便而已)

sudo vi /etc/hostname

二、给机器配置固定 IP

(如果已经配好固定ip,就忽略这一步。)

配置IP:(假设分别配置为 192.168.0.100 和 192.168.0.101)

sudo vi /etc/network/interfaces


打开上述配置文件 之后 ,编辑内容如下:(下面是 master 节点的,node1 改一下 address 就好)

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1


然后配置 DNS 服务器:

sudo vi /etc/resolv.conf


在上述文件中添加或更改一行:

nameserver xxx.xxx.xxx.xxx(查看自己的网络连接的dns)

然后重启网络服务:

sudo /etc/init.d/networking restart



三、配置机器 hosts

配置两台机器上的 hosts 文件:

sudo vi /etc/hosts

修改上述文件前几行:(两台机器做一样的配置)

127.0.0.1         localhost
192.168.0.100     master
192.168.0.101     node1

四、挂载 NFS 文件系统

在两台机器上都执行下述指令:

sudo apt-get install nfs-kernel-server nfs-common
sudo mkdir /mirror

这样一来,我们就在根目录下创建了一个 /mirror 目录,接下来我们将通过挂载把该目录作为所有节点的共享目录,那么,我们后续安装 mpich2 时,只要安装到该目录,我们就只需要在主节点 master 上安装一次即可。

如果目前你所在的用户组不是 root 的话(假设用户组为heregy),那么还需将刚刚创建的 /mirror 目录的权限改为 heregy:

sudo chown heregy /mirror
然后,我们还要编辑【主节点】的 /etc/exports 文件,对各个节点进行共享目录的授权,在文件中添加以下几行:

/mirror 192.168.0.100(rw,sync)
/mirror 192.168.0.101(rw,sync)

接下来,就可以在 node1 上执行下述命令实现挂载了:

sudo mount master:/mirror/ /mirror/

五、实现主从节点之间 SSH 无密码互访

首先,给两台机器安装SSH服务,执行如下命令:

sudo apt-get install ssh
安装完成之后,两节点分别执行:

ssh-keygen -t rsa

一直回车,即可生成 .ssh 目录。

然后,在 master 节点上:

进入 .ssh 目录:

cd ~/.ssh

生成 authorized_keys 文件:

cat id_rsa.pub >> authorized_keys

拷贝 authorized_keys 到 node1 节点上:

scp authorized_keys node1:~/.ssh/

在 node1 节点上的操作基本相同,命令如下:

cd ~/.ssh
cat id_rsa.pub >> authorized_keys
scp authorized_keys master:~/.ssh/

然后,只要关闭两个节点的防火墙,就可以实现无密码互访了:

sudo iptables –P INPUT ACCEPT
sudo iptables –P OUTPUT ACCEPT
sudo ufw disable

六、安装 mpich2

首先,下载 mpich2 的安装包到主节点的 /mirror 目录下,命令如下:

wget -c http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz

然后,在 /mirror 目录下解压:

cd /mirror
mkdir mpich2
tar zxvf mpich-3.0.4.tar.gz


解压完毕后,开始安装:

cd mpich-3.0.4
./configure --enable-fc --enable-cxx --enable-romio --enable-threads=multiple --prefix=/mirror/mpich2 --with-pm=mpd
make
make install


七、配置 mpich2 的环境变量

打开 ~/.bashrc 文件:

vi ~/.bashrc

在该文件末尾添加以下语句:

PATH=$PATH:/mirror/mpich2/bin
export PATH
MPI_LIB=$MPI_LIB:/mirror/mpich2/lib
export MPI_LIB
MPI_INCLUDE=$MPI_INCLUDE:/mirror/mpich2/include
export MPI_INCLUDE

然后,需要配置 /etc/environment 文件使 ssh 能找到 mpich2 的安装目录:

sudo vi /etc/environment

在该文件的 PATH 环境变量中添加 /mirror/mpich2/bin(不同路径用冒号隔开),效果如下:

PATH="/mirror/mpich2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

接下来,用以下命令测试 mpich2 是否安装成功:

which mpd
which mpiexec
which mpirun

如果安装正确,执行结果应该分别为:

/mirror/mpich2/bin/mpd
/mirror/mpich2/bin/mpiexec
/mirror/mpich2/bin/mpirun


八、配置 mpd

首先,在两个节点上执行命令:

vi ~/mpd.hosts

然后,写入所有节点的hostname:

master
node1

然后,需要配置 ~/.mpd.conf 文件,(在所有节点上),使用如下命令:

echo secretword=xxx >> ~/.mpd.conf	//xxx随便填

将 ~/.mpd.conf 文件的权限设置为 600:

sudo chmod 600 ~/.mpd.conf

这样一来,mpd 完成配置,可以使用以下命令测试 mpich2 是否正常工作:

mpd &		//启动该节点
mpdboot -n 2 -f ~/mpd.hosts	//启动mpd.hosts中的两个节点
mpdtrace	//查看已启动的节点
mpdallexit	//关闭所有运行节点


九、执行 mpi 程序

这里直接使用 mpich2 的安装包中自带的 examples 进行测试。(如果要使用自己写的程序,最好放到 /mirror 目录底下,这样只要在一个节点上上传或修改程序就好了,比较方便)

首先启动并行集群:

mpdboot -n 2 -f ~/mpd.hosts

然后进入安装包解压位置里的 example 目录,接下来就可以直接运行了:

cd /mirror/mpich-3.0.4/examples
mpiexec -n 4 ./cpi

执行结果类似于:

Process 0 of 4 is on master
Process 2 of 4 is on master
Process 1 of 4 is on node1
Process 3 of 4 is on node1
pi is approximately 3.1415926544231243, Error is 0.0000000008333312
wall clock time = 0.002129

可以看出来,4个进程被平均分配到了2个节点上。


十、MPI 程序编译

直接贴一个 makefile 出来:

CC = mpic++
CFLAGS = -g -I$(HOME)/include -I/mirror/mpich2/include

ALL = main

all: $(ALL)

#.SUFFIXES: .cpp .o
#.cpp.o:
# g++ $(CFLAGS) -c $*.cpp

a.o: a.h
    gcc $(CFLAGS) -c a.c

b.o: b.h
    g++ $(CFLAGS) -c b.cpp

main.o: main.cpp main.h a.h b.h
    $(CC) $(CFLAGS) -c main.cpp
main: main.o a.o b.o
    $(CC) $(CFLAGS) -o main main.o a.o b.o

clean:
    rm -f $(ALL) *.o



你可能感兴趣的:(MPI,并行,配置,ubuntu,linux)