全部博文(15)
分类:
2011-04-07 16:18:39
原文地址:[原创]MPICH2-1.3中的hydra配置与使用 作者:ssdut_virt
如果你最近编译了mpich2-1.3或者1.3.1你就会惊奇的发现,怎么mpd没有了!难道是我的配置有误?!当然不是,其实mpd被另一种进程管理器(Process Manager,PM)取代了默认位置,它就是hydra。估计hydra的历史可能并不算长(这个具体的我没考证),它是从1.1版本加入的。目前网上除了官方的说明,还没有找到什么太具体的说明,而且在早期的mpich2的安装文档中,对hydra的描述仅仅一句话而已。
其实hydra是一种比较轻量的PM(相对于mpd),利用ssh、rsh、pbs、slurm和sge等工具部署运行并行程序的。
先说说它的配置吧,当然在使用hydra管理MPI进程部署前,一些和以往的辅助工作你还得做,这些工作包括配置IP地址和Host Names,配置NFS建立共享磁盘空间,关闭防火墙,安装并配置sshd等等。这些工作在以往的集群搭建的文档中随处可见,就不细说了。
这里强调一下让集群间各个机器不用输入密码而相互访问的配置方法。我认为虽然这个配置无关大局,但是如果你每次运行MPI程序都要输入一堆密码,肯定会烦死的,所以还是弄一下这个比较好。首先,我们需要导出各个节点的公钥和私钥:
$ ssh-keygen -t rsa
在运行过程中,会提示你输入这个输入那个,不用管那么多,直接回车就完了。等运行结束后,进入.ssh目录,你会看到公钥和私钥文件:
$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub (可能还有其他乱七八糟的东西)
其中id_rsa就是私钥,id_rsa.pub就是公钥,现在我们需要把各个节点上的公钥都集中发送到一个节点上,来制作授权文件(authorized_keys):
$ scp id_rsa.pub User@MainNode:/path/to/yours/id_rsa.pub-X
其中有色字体需要你根据实际情况进行调整,这里我们讲所有的公钥发送到了MainNode,然后我们在MainNode上用这些公钥合成一个authorized_keys:
$ cp ~/.ssh/id_rsa.pub authorized_keys
$ cat /path/to/yours/id_rsa.pub-X >> authorized_keys
其中第2条语句需要反复多次,讲所有的公钥都放入authorized_keys中,这样就做好了authorized_keys文件。然后我们分别把他拷到各个机器的.ssh目录中:
$ cp authorized_keys ~/.ssh/
$ scp authorized_keys User@SomeNode:/home/User/.ssh/
如果你现在试一下ssh很可能发现他们仍旧不好用,别急,我的话还没有说完呢。这个东西对权限的要求很严格,所以我们需要更改一下必要的文件的权限(所有节点都要更改):
$ chmod 755 ~
$ chmod 755 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/id_rsa
$ chmod 644 ~/.ssh/id_rsa.pub
现在,你再来试一下,应该就好用了,如果ssh仍旧提示你输入密码,你可以重启一下机器或sshd,如果仍旧不好用,就只能怪你的人品了,呵呵。
如果好用了,我们继续往下来,配置hydra让他能够正常工作。首先hydra需要一个hosts文件,需要告诉hydra都有那些节点可用,每个节点都有几个CPU。我们在/etc下建立一个hydra目录,然后建立一个hosts文件(当然也可以建在别的地方):
$ sudo mkdir /etc/hydra
$ sudo vi /etc/hydra/hosts
文件的结构如下:
# Some Comments
MainNode:8 # other comments
Node1:2
Node2:2
每行中由冒号(:)分隔的前半部分表示节点,可以使用节点名也可以使用IP地址,貌似不区分大小写;后半部分表示可用的CPU数量。注释用“#”前导。根据你的实际情况撰写hosts文件。
然后我们需要告诉hydra hosts文件的位置,hydra通过环境变量进行配置,因此我们需要修改.bashrc文件:
$ vi ~/.bashrc
在其中加入如下行:
export HYDRA_HOST_FILE=/etc/hydra/hosts
除了这个HYDRA_HOST_FILE之外,hydra还提供了一些别的环境变量,具体的你可以查阅官方文档:
说实话,到这里关于hydra的配置已经结束了,我们不需要其他的操作了。现在就来测试一下:首先我们要确定你的mpi可以正常的运行程序,我们就用现成的例程cpi(它位于mpich源代码树的examples目录中),这里我们假设它已经被拷贝到了用户的主目录下:
$ mpiexec -np 1 ./cpi
如果你的节点是双核的或者是多核的,你可以尝试一下更大的数值。如果能够毫无问题的执行,下面我们来看一下跨机器运行,测试hydra能够正常的部署:
$ mpiexec -np 16 ./cpi
如果你看到屏幕输出的提示信息,发现你的程序已经在别的节点上运行,说明所有的工作都已经成功了。如果程序没有正常运行,你可以检查一下你的网络是否配置正确、防火墙是否关闭、ssh是否能够正常工作等等。
相比与mpd,hydra确实轻巧了很多,我们不用额外的启动服务器端,不用进行复杂的服务器配置。只要转写一个hosts文件即可。另外,hydra还可以进行一些绑定的配置,在上面的那个官方文档的链接中都有说明,我就不细说了。不过个人感觉对于容错性方面hydra还赶不上mpd,如果某个节点掉线了,mpd可以管理它并不再在其上分配任务,但是hydra则会直接把应用挂掉,不过这也许使我还不太会用的原因。
最后,还有一些需要提示你的地方,就是跨机器运行mpi应用,需要在每台机器对应的目录下都有一个应用的副本。