MPI并行计算环境的建立

来源:互联网 发布:mac版qq查看群相册 编辑:程序博客网 时间:2024/04/19 22:15

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