zoukankan      html  css  js  c++  java
  • MPI并行计算环境搭建以及集群测试

    转自:http://wuyanzan60688.blog.163.com/blog/static/12777616320132851924235/

        MPI作为一种通过消息传递进行并行计算的框架,在很多科学计算上有很重要的应用,这次因为GraphLab环境搭建时的需要,花了三个来小时的时间进行了初步的搭建摸索,感觉很有意思!

    首先是单机MPI安装
    1.安装之前
    因为是集群测试,所以跟hadoop一样先要设置ssh无密钥登录(可以参考这里),我这里用的是一个服务器节点和一台虚拟机。
    上面给出的链接里对ssh无密钥登录设置说的很清楚。
    2.开始安装
    源码下载地址,这里我用的是1.0.8(mpich命名很怪气,明明是v2,它却命名是1,无力吐槽)
    mpich2-1.0.8.tar.gz
    单机安装很简单

    #tar -zxvf mpich2-1.0.8.tar.gz

    #./configure (我让它默认安装到/usr/local/bin下,不需要设置安装路径)

    #make

    #make install

    注意:对于集群的每一个机器都要安装,当然你如果用NFS挂载也可以,我没这样用。
    安装完成之后最重要的一步有人说是设置环境变量,其实你默认安装路径的话,这个变量设置与否无所谓的。因此最重要的一步是创建配置文件(mpd.conf)。

    #touch /etc/mpd.conf

    #chmod 600 /etc/mpd.conf

    #echo secretword=myword >> /etc/mpd.conf

    到此为止,单机安装就算完成了,可以进行单机测试

    # mpd &
    [1]4457
    # mpdtrace
    vm4
    # mpdallexit

    3.集群部署
    集群部署就多一步,只需要在主机种创建集合文件(mpd.hosts),文件地方无所谓,内容为集群的hostname列表。

    node9 #主服务器

    vm4 #子节点

    在主机中测试部署是否成功:

    # mpdboot -n 2 -f /root/mpd.hosts
    # mpdtrace
    node9
    vm4

    说明部署成功。
    4.样例测试
    icpi是已经经过编译的可执行文件,用于计算pi的值。(注意这里服务器和子节点中icpi放的地方要相同
    单机

    # ./icpi
    Enter the number of intervals:(0 quits)10000000000
    pi is approximately 3.1415926535895782,Erroris0.0000000000002149
    wall clock time =45.378959
    Enter the number of intervals:(0 quits)1000
    pi is approximately 3.1415927369231227,Erroris0.0000000833333296
    wall clock time =0.000149

    集群

    [root@node9 wyztest]# mpiexec -n 2 ./icpi
    Enter the number of intervals:(0 quits)10000000000
    pi is approximately 3.1415926535895737,Erroris0.0000000000002194
    wall clock time =22.696655
    Enter the number of intervals:(0 quits)0

    Enter the number of intervals:(0 quits)1000
    pi is approximately 3.1415927369231254,Erroris0.0000000833333322
    wall clock time =0.001589

    测试结果表明:对于间隔比较大时,明显集群快,但是间隔很小时,由于消息传递机制本身会耗时,因此集群效率不如单机。
    部分参考资料链接:
    http://blog.sina.com.cn/s/blog_5daeb2750100z3qx.html
    http://blog.csdn.net/logwt/article/details/7325314
    http://www.cnblogs.com/lyq105/archive/2010/06/01/1749515.html
    http://blog.csdn.net/ngvjai/article/details/8000045
    补充:(可能会出现的问题,这是我在再次部署的时候出现的问题,第一次部署的时候太顺利了,因此没有出现问题,第二次再部署的时候出现了如下四个问题。)
    问题1

    /usr/local/bin/mpdlib.py:8:DeprecationWarning:The popen2 moduleis deprecated.Use the subprocess module.
    import sys, os, signal, popen2, socket,select, inspect
    /usr/local/bin/mpdlib.py:15:DeprecationWarning: the md5 moduleis deprecated;use hashlib instead
    from md5 importnewas md5new

    原因:python版本太高了,python2.6开始都不支持popen2模块,转而用subprocess模块代替,因此会出现这个错误。
    解决办法是降低python的版本,转到python2.5之后就可以了。(源码下载
    问题2

    #ssh node2

    ssh: node2: Temporary failure in name resolution

    #ssh 192.168.169.2 则成功

    原因:/etc/hosts中配置不完全
    解决办法:两端都需要配置如下:

    192.168.168.9 node9
    192.168.169.2 node2

    问题3

    [root@node9 source]# mpdboot -n 2 -f /root/mpd.hosts
    mpdboot_node9 (handle_mpd_output 401): failed to connect to mpd on node2

    原因:防火墙的问题,node2中防火墙禁止node9进行mpd连接
    解决办法:我直接将node2中端口关掉了

    [root@node2 .ssh]# iptables -F
    [root@node2 .ssh]# iptables -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    或者你可以参考这里,这个连接的第二个问题就是教你如何解决防火墙禁止mpd访问的。
    问题4

    mpiexec_node9 (mpiexec 392):no msg recvd from mpd when expecting ack of

  • 相关阅读:
    PostgreSQL pg_hba.conf 文件简析
    Centos 查看端口占用情况
    Nginx 从0开始学
    windows 杀死端口号对应进程
    MyBatis基础-05-缓存
    MyBatis基础-04-动态sql
    MyBatis基础-02
    SpringMVC基础-14-SpringMVC与Spring整合
    SpringMVC基础-13-SpringMVC运行流程
    SpringMVC基础-12-异常处理
  • 原文地址:https://www.cnblogs.com/likai198981/p/3116816.html
Copyright © 2011-2022 走看看