虚拟机中配置MPI多机环境与PC中基本相同,但会有许多不同之处,连同配置时经常出现的错误和解决方法在此记录。
步骤:
1.准备:
首先需要搭建多个虚拟机,即建立虚拟机,不同数量的虚拟机搭建过程基本相似(省略虚拟机安装步骤),同时需要保证虚拟机能上网,且能互相连通。
错误常见:虚拟机不能上网,不能互相连通(ping通),除了常见的虚拟机上网方式选择错误外,还要检查是否是杀毒软件停止了虚拟机服务(右键 此电脑->管理->服务和应用程序->服务,开启VMware DHCP Service和VMware NAT Service)。
2.安装MPICH(3.2)、安装SSH、虚拟机间免密码登录:
详情见:http://www.linuxdiyf.com/linux/26035.html,第二到第五步。
常见错误:
(1)SSH建立连接时拒绝访问,此时可能是默认禁止root连接ssh,解决方案见:
(2)利用scp传输文件(密钥)时,接收方接收不到,此时重启接收方可能解决问题。
3.建立共享目录:
在步骤2中的文章中,其要求在每个虚拟机的相同目录中都生成可执行文件,该操作方式比较繁琐,为解决该问题,我们可以采用建立共享目录的方案。
建立和挂载NFS共享目录:
(1)在所有的虚拟机中建立相同路径下的相同目录,并设置权限:mkdir /home/mpi_share,chmod -R 777 /home/mpi_share(所有虚拟机均需执行,目录路径和名字可随意选取,只要保证所有虚拟机中的相同即可)。
(2)安装NFS,不同的Linux安装和启动NFS的命令可能不同,在ubuntu14.04.1中,命令为:sudo apt-get install nfs-kernel-server,另外还需要安装sudo apt-get install portmap或sudo apt-get install rpcbind。
(3)设置NFS服务器,选取一台虚拟机作为服务器,即编写程序的虚拟机,当在此台虚拟机的共享目录编写程序并编译后会将共享目录中的所有文件同步到其它虚拟机中(NFS客户端):sudo vi /etc/exports或sudo gedit /etc/exports,打开文件后,在文件的最后附件上所有同步的客户端的虚拟机的Ip和权限,如:
/home/mpi_share 192.168.150.131 (rw,sync,no_root_squash,no_subtree_check)
/home/mpi_share 192.168.150.132 (rw,sync,no_root_squash,no_subtree_check)
/home/mpi_share 192.168.150.129 (rw,sync,no_root_squash,no_subtree_check)
/home/mpi_share 192.168.150.130 (rw,sync,no_root_squash,no_subtree_check)
其中最前面的/home/mpi_share是共享目录,ip地址是所有的客户端(其它共享虚拟机)的地址,包括本机的,后面括号中的是权限,具体含义可上网查阅(rw即读写权限)。
(4)重启NFS,sudo /etc/init.d/nfs-kernel-server restart,此时,NFS服务器虚拟机配置完毕。
(5)接下来需要配置其它NFS客户端虚拟机,使其能共享NFS服务器的共享目录:在所有剩余的虚拟机中运行mount -t nfs 192.168.150.131:/home/mpi_share /home/mpi_share,其中ip为NFS服务器的地址,:后面跟的是服务器的共享目录,在后面跟的是本机(客户端)的共享同步目录。此时,所有的共享目录便配置完毕了。
(6)测试:在NFS服务器端的共享目录建立一个文件gedit test.cpp并保存,几秒钟后检查剩余所有的虚拟机中是否在共享目录中产生了该文件,若产生则配置成功。
借鉴:
常见错误:因为不同版本的Linux的nfs开启名字和方法不同,其它版本注意上网查阅NFS的配置方式。
4.编写和测试MPI程序
以上便是mpi的配置过程,接下来在服务器端的共享目录中编写mpi程序并编译,便可以自动同步到其它虚拟机的共享目录中,按照步骤2文章中的第五步运行程序即可。
5.体会
因为不同版本的Linux各个服务和软件的名字不同,但大体步骤基本相同,因此不同版本的linux需要上网查阅相似的操作,不能一味的使用相同的名字和命令进行操作,可能会提示“未知任务”或者“未知服务”。