个人工具

Mpich2 集群

来自Ubuntu中文

Zhchshen讨论 | 贡献2010年9月29日 (三) 14:45的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航, 搜索

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 中靠前的节点。运行的程序必须放置到/mpi 路径的子目录下,       
        注意目录权限需要 mpiu 用户可读写(chown  mpiu /mpi/xxx -R)。结果也需要写回此路径。
       少于 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