2013-04-18 93 views
5

我刚刚在Mac OS-X Mountain Lion上使用本教程安装了Rmpihttp://www.stats.uwo.ca/faculty/yu/Rmpi/mac_os_x.htm。我只需要使用Rmpi来使用所有内核,而不是在硬件集群或类似设备上部署。Rmpi​​是否需要互联网连接?

其实,一切正常,但现在我体验到,只要我没有一个活跃的互联网连接(如坐在火车上或只是转动无线)产卵奴隶将失败,我想知道这是否应该工作喜欢这个?

> require(Rmpi) 
> mpi.spawn.Rslaves(nslaves=2) 

-------------------------------------------------------------------------- 
At least one pair of MPI processes are unable to reach each other for 
MPI communications. This means that no Open MPI device has indicated 
that it can be used to communicate between these processes. This is 
an error; Open MPI requires that all MPI processes be able to reach 
each other. This error can sometimes be the result of forgetting to 
specify the "self" BTL. 

    Process 1 ([[56132,1],0]) is on host: ABC-MB02 
    Process 2 ([[56132,2],0]) is on host: ABC-MB02 
    BTLs attempted: self sm 

Your MPI job is now going to abort; sorry. 
-------------------------------------------------------------------------- 
    2 slaves are spawned successfully. 0 failed. 
[ABC-MB02:53970] 2 more processes have sent help message help-mca-bml-r2.txt/unreachable proc 
[ABC-MB02:53970] Set MCA parameter "orte_base_help_aggregate" to 0 to see all help/error messages 

然后我的CPU的负载刚刚跳到100%,最终R会话会崩溃。

任何想法如何我可以避免这种行为?这是我的sessionInfo

R version 2.15.2 (2012-10-26) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] graphics grDevices datasets stats  utils  methods base  

other attached packages: 
[1] Rmpi_0.6-3  ggplot2_0.9.3 stringr_0.6.2 reshape2_1.2.2 plyr_1.8  

loaded via a namespace (and not attached): 
[1] colorspace_1.2-1 dichromat_2.0-0 digest_0.6.3  grid_2.15.2  gtable_0.1.2  labeling_0.1  
[7] MASS_7.3-23  munsell_0.4  proto_0.3-10  RColorBrewer_1.0-5 scales_0.2.3  tools_2.15.2 
+1

对于单个机器来说,使用'parallel'包中'mclapply'和朋友系列函数通常要方便得多,这些使用共享内存和分叉,而不是产生独立的进程。它也可能有助于为你的问题添加一个'mpi'标签,因为它听起来不像R特有的。 –

+0

@MartinMorgan谢谢你的建议。问题是,我并不真正控制使用哪个并行库,因为这些功能是在我正在构建的其他软件包(来自Bioconductor的'xcms'和'CAMERA')中实现的。这些软件包只是测试是否安装了'Rmpi'(首选)或'snow',并将计算部署到我指定的多个核心。但是,用'雪'我可以绕过这里描述的问题,但面对其他问题。 – Beasterfield

+0

这些软件包来自同一组;也许发送电子邮件到'packageDescription('CAMERA')$ Maintainer'和xcms会导致一个长期的解决方案? –

回答

4

它并不需要互联网连接,但开放MPI似乎失败,当你创建子进程,如果你只有BTL的可用的“自我”和“SM”,并在我的Mac笔记本电脑除非“网络偏好设置”中至少有一个“已连接”网络,否则“tcp”BTL不可用。有趣的是,我注意到,当工作人员由mpirun创建时,我能够成功地使用Rmpi,而不是产生它。另外,在Linux机器完全拔出时,我没有任何问题在Linux机器上产生。

我能够让我的笔记本电脑通过使用以太网电缆将其连接到另一台计算机成功生成进程,甚至是一个小树莓派。尽管电缆实际上不能用于任何事情,但它欺骗了Mac认为“以太网”已连接,因此“tcp”BTL在Open MPI中可用,所以产卵过程起作用。

更新:

我终于想出了一个解决这个问题,关于我的MacBook Pro工作。通过将btl_tcp_if_include MCA参数设置为“lo0”,您可以强制Open MPI在笔记本没有连接到任何外部网络时使用TCP通信的环回接口。设置它的一种方法是在你的[R脚本中的环境变量:

Sys.setenv(OMPI_MCA_btl_tcp_if_include='lo0') 
library(Rmpi) 
mpi.spawn.Rslaves(nslaves=2) 

这似乎加载Rmpi,这是当MPI_INIT调用之前,只要你设置环境变量工作。

+0

感谢您复制问题并详述它。但正如你所提到的,这并不能真正解决我的问题。所以我希望MPI可以有一些编译选项来避免这种行为。我也想知道是否可以连接一个“伪装”设备,即让操作系统认为设备已连接,TCP BTL变得可用。 – Beasterfield

+0

@Beasterfield:我想知道蓝牙设备,因为“蓝牙PAN”是列出的网络之一,但它不适用于我的手机。 –

+0

显然似乎没有更好的解决方案。所以谢谢你。 – Beasterfield