R параллельно makeCluster () бесконечно висит на Mac - PullRequest
0 голосов
/ 10 сентября 2018

Я столкнулся с некоторой проблемой, когда пытался использовать пакет parallel в R на моем Mac.

Вот как работает параллельный пакет.

cl = makeCluster(2) # Using 2-core parallel as an example
# Your parallel code
stopCluster(cl)

Когда я запускал этот код, cl = makeCluster(2) зависает бесконечно . Я пытался решить это, но не смог. Я также сослался на некоторые другие посты. Несколько возможных причин включают в себя нехватку памяти, ошибки установки и т. Д. Они, похоже, не являются проблемой здесь, так как я перезапустил сеансы, переустановил R, но проблема осталась.

Я думаю, проблема в разрешении, когда R пытался подключиться к ядрам. Вот что я узнал. Я использовал пакет future, чтобы увидеть конкретный процесс подключения к ядрам. Прилагаются код и его возврат.

cl <- future::makeClusterPSOCK(2, verbose = TRUE)

Работники: [n = 2] ‘localhost’, ‘localhost’ Базовый порт: 11303 Создание узла 1 из 2 ... - настройка узла Начинающий работник # 1 на 'localhost': '/Library/Frameworks/R.framework/Resources/bin/Rscript' --default packages = наборы данных, utils, grDevices, графика, статистика, методы -e 'параллельные :::. SlaveRSOCK () 'MASTER = ПОРТ локального узла = 11303 OUT = / dev / null TIMEOUT = 2592000 XDR = TRUE
Ожидание подключения рабочего # 1 на локальном хосте

Проблема в том, что localhost никогда не подключается обратно ...

Следующая информация о сеансе. Надеюсь, это поможет.

R версия 3.5.1 (2018-07-02).
Платформа: x86_64-apple-darwin15.6.0 (64-разрядная версия).
Работает под: macOS High Sierra 10.13.6.

Матричные продукты: по умолчанию.
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib.
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

Язык:
[1] en_US.UTF-8 / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US.UTF-8

прикрепленные базовые пакеты:
[1] stats graphics grDevices использует наборы методов базы данных

загружено через пространство имен (и не подключено):
[1] compiler_3.5.1 parallel_3.5.1 tools_3.5.1 listenv_0.7.0 codetools_0.2-15 digest_0.6.16
[7] globals_0.12.2 future_1.9.0

Интересно, что тот же код работает на моей старой машине Mac (та же ОС, но аппаратная часть старше). Я понятия не имею, что здесь происходит. Любая помощь приветствуется! Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

После нескольких недель попыток я наконец решил эту проблему. Я помещаю свой ответ здесь.

Проблема на самом деле вызвана неизвестной проблемой брандмауэра в macOS. Решением для этого является переустановка всей операционной системы ... Я знаю, это звучит глупо и хлопотно, но проблема после этого решена.

Мотивация для этого заключается в том, что я заметил, что у меня нет доступа к некоторым моим папкам в домашнем каталоге (я пытался использовать sudo для изменения некоторых файлов, но у меня не было доступа). Это мой личный ноутбук, и не должно быть такой проблемы. Затем я понимаю, что этот Mac был синхронизирован с моим старым Mac. Процесс синхронизации может вызвать проблемы с брандмауэром.

0 голосов
/ 12 сентября 2018

Несколько возможных причин включают в себя нехватку памяти, ошибку установки и т. Д. Они, похоже, не являются проблемой здесь, так как я перезапустил сеансы, переустановил R, но проблема осталась.

Правильно, проблемы такого типа не должны быть здесь.Вызовы, которые вы показали, используют базовые встроенные функции R (в основном из «параллельного» пакета) и задействуют очень мало памяти.

Я думаю, проблема в разрешении, когда Rпытался подключиться к ядрам.[...]

И parallel:makeCluster(2), и future::makeClusterPSOCK(2) запускают рабочих (используя parallel:::.slaveRSOCK()), которые являются независимыми сеансами R, работающими в фоновом режиме.Мастер сессия и эти работники общаются через сокеты.Так что, да, возможно, у вас есть проблемы с брандмауэром, мешающие R открыть эти порты.(Я не знаю достаточно macOS, чтобы устранить это)

Установив outfile = NULL, вы также получите информацию о том, что происходит на стороне работников.Вот как это должно выглядеть, когда работает:

> cl <- future::makeClusterPSOCK(1, outfile = NULL, verbose = TRUE)
Workers: [n = 1] ‘localhost’
Base port: 11306
Creating node 1 of 1 ...
- setting up node
Starting worker #1 on ‘localhost’: '/usr/lib/R/bin/Rscript' --default-packages=datasets,utils,grDevices,graphics,stats,methods -e 'parallel:::.slaveRSOCK()' MASTER=localhost PORT=11306 OUT= TIMEOUT=2592000 XDR=TRUE
Waiting for worker #1 on ‘localhost’ to connect back
starting worker pid=7608 on localhost:11306 at 14:46:57.827
Connection with worker #1 on ‘localhost’ established
- assigning connection UUID
- collecting session information
Creating node 1 of 1 ... done

PS.Вам нужен только один работник для устранения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...