2013-04-18 2 views
5

Я только что установил Rmpi с помощью этого урока: http://www.stats.uwo.ca/faculty/yu/Rmpi/mac_os_x.htm на Mac OS-X Mountain Lion. Мне нужен 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 

Тогда загрузка моих процессоров просто перескакивает на 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

Для одной машины часто гораздо удобнее и эффективно использовать память для использования семейства функций 'mclapply' и друзей из пакета' parallel'; они используют разделяемую память и вилки, а не порождают независимые процессы. Это также может помочь добавить тег «mpi» к вашему вопросу, поскольку он действительно не соответствует R-специфике. –

+0

@MartinMorgan за ваш совет. Проблема в том, что у меня нет контроля над той параллельной библиотекой, которую я буду использовать, поскольку функциональность реализована в других пакетах, на которых я основываюсь ('xcms' и' CAMERA' из Bioconductor). Эти пакеты просто проверяют, установлены ли «Rmpi» (предпочтительнее) или «снег» и развертываются вычисления на столько ядер, сколько я указываю. Однако с помощью «снега» я могу обойти описанную проблему, но смотреть на других. – Beasterfield

+0

Эти пакеты из той же группы; возможно, электронная почта для 'packageDescription ('CAMERA') $ Maintainer', а также xcms приведет к долгосрочному решению? –

ответ

4

Это не требуется подключение к Интернету, но Open MPI, кажется, терпят неудачу, когда вы икру процессы, если у вас есть только «я» и «см» БТЛ доступно, и на моем Mac ноутбук , BTL «tcp» недоступен, если в «Сетевых настройках» нет хотя бы одной сети «Подключено». Интересно отметить, что я смог успешно использовать Rmpi, когда работники были запущены mpirun, а не появлялись. Кроме того, у меня не было никаких проблем с нерестами на Linux-машине, когда он был полностью отключен.

Я смог получить свой ноутбук, чтобы успешно обработать процессы, подключив его к другому компьютеру с помощью кабеля Ethernet, даже до небольшого количества малины Pi. Несмотря на то, что кабель вообще не мог использоваться для чего-либо, он обманул Mac и подумал, что «Ethernet» подключен, поэтому BTL «tcp» был доступен в Open MPI, поэтому процессы нереста работали.

Update:

я, наконец, понял, решение этой проблемы, которая работает на моем MacBook Pro. Установив параметр MCA btl_tcp_if_include на «lo0», вы можете заставить Open MPI использовать loopback-интерфейс для связи TCP, когда ваш ноутбук не подключен к какой-либо внешней сети. Один из способов установить это с переменным окружением в вашем R сценарии:

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

Это, кажется, работает до тех пор, как вы установите переменные окружения перед загрузкой Rmpi, которая когда MPI_INIT называется.

+0

Спасибо, что воспроизвели проблемы и детализировали его. Но, как вы упомянули, это действительно не решает мою проблему. Поэтому я надеялся, что для MPI может быть какой-то вариант компиляции, чтобы избежать такого поведения.Мне также интересно, можно ли подключить «фальшивое» устройство, то есть просто позволить ОС думать, что устройство подключено, что BT BTL становится доступным. – Beasterfield

+0

@Beasterfield: Мне было интересно о устройстве Bluetooth, поскольку «Bluetooth PAN» - одна из перечисленных сетей, но она не работает с моим мобильным телефоном. –

+0

Очевидно, что нет лучшего решения. Так что спасибо за это. – Beasterfield

Смежные вопросы