R параллельно makeCluster() бесконечно зависает на Mac
Я столкнулся с некоторой проблемой, когда я пытался использовать 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= наборы данных, утилиты,grDevices, графика, статистика, методы -e 'parallel:::.slaveRSOCK()' MASTER=localhost PORT=11303 OUT=/dev/null TIMEOUT=2592000 XDR= ПРАВДА
Ожидание работника № 1 на локальном хосте для подключения обратно
Проблема в том, что localhost никогда не подключается обратно...
Следующая моя информация о сессии. Надеюсь, это поможет.
Версия 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 ответа
Несколько возможных причин включают в себя нехватку памяти, ошибки установки и т. Д. Они, похоже, не являются проблемой здесь, так как я перезапустил сеансы, переустановил 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. Вам нужен только один работник для устранения этой проблемы.
После нескольких недель попыток я наконец решил эту проблему. Я помещаю свой ответ здесь.
Проблема на самом деле вызвана неизвестной проблемой брандмауэра в macOS. Решением для этого является переустановка всей операционной системы... Я знаю, это звучит глупо и хлопотно, но после этого проблема решается.
Мотивация для этого заключается в том, что я заметил, что у меня нет доступа к некоторым моим папкам в домашнем каталоге (я пытался использовать sudo
изменить некоторые файлы, но не был предоставлен доступ). Это мой личный ноутбук, и не должно быть такой проблемы. Затем я понимаю, что этот Mac был синхронизирован с моим старым Mac. Процесс синхронизации может вызвать проблемы с брандмауэром.