Mpich2 集群:修订间差异
来自Ubuntu中文
跳到导航跳到搜索
Ubuntu 8.10 组建mpich2 计算集群 |
(没有差异)
|
2010年9月26日 (日) 11:40的版本
Ubuntu 8.10 组建基于mpich2 计算集群
1.操作系统平台及配套的软件环境
各计算节点的操作系统:Ubuntu-8.10-desktop-amd64 MPICH2 软件版本: mpich2-1.0.8, MPICH2 配置的 Fortran 编译器为: 英特尔 Fortran 编译器 ifort 10
2.计算节点配置
检查主机名是否同名 2.1 $ sudo vim /etc/hostname # 查看 hostname, 要求所有节点具有不同的 hostname。 2.2 修改主机名和 IP 配置文件 $ sudo vim /etc/hosts 文件内容类似如下: ------------------------------------------------------------------------------------------------------ 127.0.0.1 localhost # MPICH2 HOSTS 193.168.100.121 193.168.100.116 193.168.100.109 193.168.100.11 193.168.100.100 ------------------------------------------------------------------------------------------------------- 2.3 所有节点固定 IP 地址 <1> 文件配置用如下命令设置: $ sudo vim /etc/network/interfaces
文件内容类似如下: ------------------------------------------------------------------------------------------------------- auto lo iface lo inet loopback auto eth0 iface eth0 inet static # 修改为实际的 IP 地址 address 193.168.100.121 # 修改为实际的子网掩码 netmask 255.255.255.0 # 修改为实际的网关地址 gateway 193.168.100.1 <2> 设置 DNS $ sudo vim /etc/resolv.conf # Generated by NetworkManager nameserver 202.41.52.3 # 修改为实际的 DNS 服务器 注意事项: <1> 通 过 配 置 文 件 设 置 固 定 IP 的 时 候 , Ubuntu 8.10 的 Network Manager 会 出 现 一 个ifupdown(eth0)的连接,无法删除,无法修改,每次重启,都会清空 DNS 设置。 网上有解决办法,但是不通用,实在解决不了,可以将 Network Manager 卸载。 <2> 为了省去以上麻烦,建议采用在 Network Manager 中手动配置,不必修改配置文件。 2.4 创建新的用户用于运行 MPI 安全起见,所有机器使用如下命令添加一个用户来参与运算,以下命令切换到 root 帐户下: # mkdir /mpi # useradd -N -d /mpi -s /bin/bash -u 500 mpiu # chown mpiu /mpi -R 2.5 安装必须的软件 build-essential, nfs-common, openssh-server # apt-get install build-essential nfs-common openssh-server 以下仅 master 主节点配置完成后,在普通节点配置: ${master_hostname} = 主节点的主机名 NFS 客户端配置 2.6 # mount ${master_hostname}:/mpi /mpi 2.7 自动挂载 NFS # echo "${master_hostname}:/mpi /mpi nfs defaults" >> /etc/fstab
3. Master 主节点的配置
3.1 基本节点配置 按普通节点配置 3.2 NFS Server 配置 安装 nfs server # apt-get install nfs-kernel-server # echo "/mpi *(rw, sync)" >> /etc/exports 以下切换到 mpiu 用户操作 3.3 openssh keypair 生成公-私密钥对以使节点相互可无密码访问 首先将主节点切换到*mpiu*用户,在 hostname:/mpi/.ssh/ 下面生成公钥:id_dsa.pub 以及私钥:
id_dsa
mpiu@master:~$ ssh-keygen -q -t dsa -N "" -f ~/.ssh/id_dsa 将公钥文件内容追加到授权文件 authorized_keys 里面, .ssh 下最初没有 authorized_keys, 如果有,
则需要复制追加,如下所示:
mpiu@master:~$ cat ~/mpi/.ssh/id_dsa.pub >> ~/mpi/.ssh/authorized_keys 在计算节点(假设主机名为:hostname1)上,配置公私密钥 mpiu@hostname1:~$ mkdir /.ssh 然后, 将主节点的./mpi/.ssh/路径下的所有文件, 复制到所有计算节点的./mpi/.ssh/路径下,至此,
各节点之间可以实现无密码访问。
例如:mpiu@hostname1:~$ ssh hostname2 可以登录到 hostname2: mpiu@hostname2:~$ 3.4 节点统计并修改所有机器/etc/hosts 文件 统计所有节点的 hostname 和对应 IP 地址,将所有节点(包括 Master)的 hostname 写入到
/mpi/mpd.hosts 文件,一行一个。
将 hostname 和 IP 对应写入到所有节点(包括 Master)的/etc/hosts 文件中,见 2.2。 3.5 mpich2 编译安装 下载 mpich2 源码包到/mpi 下,本配置方案中所使用的 mpich2 为 mpich2-1.0.8 mpiu@master:~$ tar xzf mpich2-${ver}.tar.gz mpiu@master:~$ cd mpich2-${ver}/ mpiu@master:~$ configure --prefix=/mpi/mpich2 #此处以实际的安装位置替换/mpi/mpich2 mpiu@master:~$ make mpiu@master:~$ make install 3.6 .mpd.conf mpiu@master:~$ echo "secretword=somestring" > .mpd.conf # 此处:somestring 为设置的 mpiu 帐户密码 mpiu@master:~$ chmod 600 .mpd.conf 3.7 mpiu 用户的环境变量设置 从原来的用户帐户下拷一份.bashrc .profile 到/mpi 下 mpiu@master:~$ cp /home/xxx/.bashrc /mpi mpiu@master:~$ cp /home/xxx/.profile /mpi mpiu@master:~$ chown mpiu .bashrc .profile 添加如下两行到/mpi/.bashrc 中,
注意:此处”/mpi/mpich2/bin“是 MPICH2 的实际安装路径,应该根据你的具体情况修改
export PATH = "/mpi/mpich2/bin:$PATH" export LD_LIBRARY_PATH = "/mpi/mpich2/lib:$LD_LIBRARY_PATH" 3.8 再次确认/mpi 下所有文件属主均为 mpiu mpiu@master:~$ ls -al
4.测试是否组建成功
全部在 mpiu 用户下执行 4.1 测试 mpd mpiu@master:~$ mpdcheck -l 按照提示修改,无输出结果即说明配置正确 4.2 本机测试 mpiu@hostname:~$ mpd & mpiu@hostname:~$ mpdtrace mpiu@hostname:~$ mpdallexit 返回本机 hostname 即为正常。 4.3 cluster 启动测试 $ mpdboot -n ${numberofnode) $ mpdtrace $ mpdallexit 应当返回全部的节点 hostname 4.4 测试两台机器之间的相互通讯【仅且当启动失败时】 使用第一台的主机名 hostname1 和返回的 port 号为参数,测试与 hostname2 的通讯 一台机器执行第一句: mpiu@hostname1: ~$ mpdcheck – s 另一台执行第二句: mpiu@hostname2: ~$ mpdcheck -c [host] [port] 4.5 圆周率π算例测试
(源码路径 example/cpi)
$ mpdboot -n ${numberofnode) $ mpiexec -n ${numberofprocess) /mpi/mpich2-${ver}/example/cpi 4.6 HPL 算例测试 HPL 全称 High Performance Linpack 是个用于测试分布式计算环境的浮点计算性能(FLOPS)的工
具.
<1> 注意事项: 1. 作业运行时间尽量为夜间,在下午下班时启动作业 2. 进行以下所有操作前使用 su mpiu 切换到 mpiu 帐户下。 3. 运行作业前使用 mpdtrace 检查节点数,检查其它节点是否运行于 Linux,并协调使用时 间(包括只运行于本机的程序) 。 4. 节点不足时使用 mpdboot -n ${N} -f ~/mpd.hosts --chkup 启动足够的 cluster 节点。${N} 为节点数 ${N}<=5,注意 N<5 时除本地节点外会优先启动 mpd.hosts 中靠前的节点。
5. 运行的程序必须放置到/mpi 路径的子目录下, 注意目录权限需要 mpiu 用户可读写(chown
mpiu /mpi/xxx -R)。结果也需要写回此路径。
6. 少于 4 个进程的程序请按原方法在本机跑,效率较高。
<2> Cluster 测试算例运行方法: 假设现在在主节点上, 其主机名为:master 运行以下命令 # 切换到 mpiu 帐户 user@master:~$ su mpiu # 输入登录到 mpiu 的密码 user@master:~$ # 转到 mpiu 帐户的根目录 mpiu@master:~$ cd # 退出所有可能已经启动的 MPD 帐户 mpiu@master:~$ mpdallexit # 启动 5 个计算节点 mpiu@master:~$ mpdboot -n 5 –chkup mpiu@master:~$ cd /mpi/hpl-2.0/bin/Linux_PII_FBLAS/ 修改 HPL.dat mpiu@master:~$ mpirun -np 20 ./xhpl 2>&1 > result-cluster-`date +%s`.txt <3>关于修改 HPL.dat 说明 HPL.dat 是 HPL20core.dat 的软链接。 运行前修改第 5-6 行即可 第 5 行是总的矩阵个数 第 6 行是每个矩阵的规模 测试以下几个即可 40960 51200 81920 102400 测试完成的矩阵可以从文件中去掉
5.维护事项
5.1 添加计算节点 按照第 2 节内容配置新节点 在所有已有节点的/etc/hosts 文件中增加一行新节点的 hostname 解析 在/mpi/mpd.hosts 中添加一行新节点的 hostname 使用下面命令启动: $ mpdboot -n ${numberofnode} --chkup 5.2 删除计算节点 用 mpdtrace -l 得到对应节点${mpdid} 用 mpdexit ${mpdid}删除节点 将/mpi/mpd.hosts 中对应行删除
6. 常见问题及解答
通常为 hosts 文件出错,检查: 6.1 hosts 文件要有本机和其它节点 hostname 的解析 6.2 127.0.0.1/16 只能解析为 localhost 6.3 节点中不能有 hostname 相同的机器 6.4 运行 HPL 测试算例时,可能会提示缺少 libgfortran.so.2 库,此时要在各计算节点上安装
gfortran-4.2 编译器。
./xhpl: error while loading shared libraries: libgfortran.so.2: cannot open shared object file: No
such file or directory
./xhpl: error while loading shared libraries: libgfortran.so.2: cannot open shared object file: No
such file or directory
./xhpl: error while loading shared libraries: libgfortran.so.2: cannot open shared object file: No
such file or directory