(4) 配置samba共享
首先在本机上面安装samba服务器和客户端:
linuxidc@:~$ sudo apt-get install samba smbfs
在所有的客户机上面安装samba的客户端工具:
zzm@zcni-desktop:~$ sudo apt-get install smbfs
在本机上面配置samba共享:
将当前用户名加入samba的用户列表当中:
linuxidc@:/home/zzm$ sudo smbpasswd -a zzm
[sudo] password for zzm:
New SMB password:
Retype new SMB password:
然后打开/etc/samba/smb.conf,在文件的最后添加如下的语句:
[bin]
comment = mpich2 shared folder
path = /home/zzm/bin/mpich2
public = yes
writable = yes
valid users = zzm
create mask = 0664
directory mask = 0775
force user = zzm
force group = bioinf
available = yes
browseable = yes
关于上面的配置语句,其他的自不必说,关键是下面两句:
force user = zzm
force group = bioinf
这两句的意思是说,用户在客户机中上传的文件属于的默认用户和默认用户组,可以根据你的实际情况进行修改。
然后关闭文件,重新启动samba服务:
linuxidc@:/home/zzm$ sudo /etc/init.d/samba restart
* Stopping Samba daemons [ OK ]
* Starting Samba daemons [ OK ]
linuxidc@:/home/zzm$
在客户机中挂在samba共享的目录:
我们上面说过,需要将客户机中MPICH2的目录位置也和主机配置成一样的,因此我们必须建立一些目录:
zzm@zcni-desktop:/home/zzm$ mkdir bin
zzm@zcni-desktop:/home/zzm$ cd bin/
zzm@zcni-desktop:/home/zzm/bin$ mkdir mpich2
zzm@zcni-desktop:/home/zzm/bin$ mkdir mpich2/bin/
有人会说,建立/home/zzm/bin/mpich2/bin目录是多余的,因此挂载了之后,bin目录会出现的。但是其实并不多余,因为我们要在客 户机上面建立MPICH2的环境变量,如上所述,环境变量对应的目录是:/home/zzm/bin/mpich2/bin,因此如果不在这里建立bin 目录,当没挂载的时候,此环境变量就是无效的,因为找不到bin目录。此错误可能导致您的机器无法启动。
然后运行挂在的命令:
zzm@zcni-desktop:sudo mount -t smbfs -o unicode,codepage=unicode,iocharset=utf8,username=zzm%nicegiving //192.168.1.190/bin /home/zzm/bin/mpich2
Warning: ignoring deprecated smbfs option 'codepage=unicode'
现在来看看到底挂载上了没:
zzm@zcni-desktop:/home/zzm/bin$ cd mpich2/
zzm@zcni-desktop:/home/zzm/bin/mpich2$ ls
bin etc examples include lib sbin share
(5) 配置测试机器的环境变量
在每个测试机器上面也需要配置各自的环境变量,该部分参考"4. 设置环境变量" 这一节,此处不再详述。
(6) 开始测试
在主机上面使用mpdboot命令,启动每台机器上面的mpi进程:
linuxidc@:/home/zzm$ mpdboot -n 2 -f /home/zzm/mpd.hosts
mpdboot通过ssh启动列表中每台机器上面的mpi进程,然后将所有的机器组成一个环(ring),这个环就是并行计算的基础了。
mpdboot的命令格式是:mpdboot -n <number to start> -f /path/of/mpd.hosts
然后使用mpdtrace来查看当前在ring中的机器有哪些:
linuxidc@:/home/zzm$ mpdtrace
zzm-desktop
zcni-desktop
使用mpdallexit命令,结束每台机器上面的mpi进程:
linuxidc@:/home/zzm$ mpdallexit
如果你能得到上面的结果,说明你已经在多个机器之间成功建立了并行计算的环境。恭喜!如果有问题的话,请参考本文最后的Troubleshooting。
8. 并行程序运行测试
现在,我们来运行MPICH2的examples中的一个程序,让其在并行环境中运行:
linuxidc@:/home/zzm/bin/mpich2/examples$ mpiexec -n 5 ./cpi
Process 1 of 5 is on zcni-desktop
Process 0 of 5 is on zzm-desktop
Process 2 of 5 is on zzm-desktop
Process 3 of 5 is on zcni-desktop
Process 4 of 5 is on zzm-desktop
pi is approximately 3.1415926544231225, Error is 0.0000000008333294
wall clock time = 0.002013
linuxidc@:/home/zzm/bin/mpich2/examples$
9. 成功运行的关键点
每个测试机的环境配置必须一模一样
都必须有相同的用户名
都必须配置好环境变量
都必须可以在自己的机器上面ssh到任何一台机器上面而且不用输入密码
10. Troubleshooting
Note: 此处涉及到的错误及错误的解决方案皆是本人亲自碰到并成功处理的。
(1) no_port 错误
linuxidc@:/home/zzm$ mpdboot -n 2 -f /home/zzm/mpd.hosts
mpdboot_zzm-desktop (handle_mpd_output 420): from mpd on zzm-desktop, invalid port info:
no_port
导致此错误的原因有很多个,下面是我发现的几个:
* .mpd.conf文件的存取权限不正确,请确保其权限是600。
* 客户机上面的环境与主机上面的不一样,比如目录不一样,或者目录中的内容有差别,请对照"9. 成功运行的关键点"这一节进行排错。
* 客户机上面缺少.mpd.conf。 请参考"5. 添加mpd配置文件"这一节,在每台客户机上面都添加一个配置文件,并确保权限都是600,文件中的secret word都一样。
(2) failed to handshake 错误
linuxidc@:~$ mpdboot -n 2 -f mpd.hosts
mpdboot_zzm-desktop (handle_mpd_output 407): failed to handshake with mpd on 192.168.1.248; recvd output={}
导致此错误的原 因有很多个,下面是我发现的几个:
* 该错误是由于SSH不能达到本文中所说的"在列表中的每台机器上面都可以不用输入密码地SSH到列表中的所有机器上面,包括本机(localhost)" 而导致的。如果你做不到这点,请参考"7.3"节所述进行排错。
* 不要将客户机上面的.mpd.conf文件的内容写成"secretwork=nicegiving",要写成 "secretword=nicegiving"