Функция makeCluster в R snow зависает на неопределенный срок

Я использую makeCluster функцию из пакета R snow с компьютера Linux для запуска кластера SOCK на удаленном компьютере Linux. Кажется, все улажено для успешного взаимодействия двух машин (я могу установить ssh-соединения между ними). Но:

makeCluster("192.168.128.24",type="SOCK")

результата не выкидывает, просто зависает на неопределенный срок.

Что я делаю неправильно?

Большое спасибо


person Aaron Iemma    schedule 31.07.2013    source источник


Ответы (1)


К сожалению, есть много вещей, которые могут пойти не так при создании снежного (или параллельного) кластерного объекта, и наиболее распространенный режим отказа - это зависание на неопределенное время. Проблема в том, что makeSOCKcluster запускает рабочих кластера один за другим, и каждый рабочий (в случае успешного запуска) должен установить соединение сокета с мастером, прежде чем мастер продолжит запуск следующего рабочего. Если какой-либо из рабочих не сможет снова подключиться к мастеру, makeSOCKcluster зависнет без каких-либо сообщений об ошибке. Рабочий может выдать сообщение об ошибке, но по умолчанию любое сообщение об ошибке перенаправляется на /dev/null.

Помимо проблем с ssh, makeSOCKcluster мог зависнуть по следующим причинам:

  • R не установлен на рабочем компьютере
  • снег не установлен на рабочую машину
  • R или снег не установлен в том же месте, что и локальный компьютер
  • текущий пользователь не существует на рабочем компьютере
  • проблема с сетью
  • проблема с брандмауэром

и есть еще много возможностей.

Другими словами, никто не может диагностировать эту проблему без дополнительной информации, поэтому вам необходимо выполнить некоторые действия по устранению неполадок, чтобы получить эту информацию.

По моему опыту, единственный наиболее полезный метод устранения неполадок - это ручной режим, который можно включить, указав manual=TRUE при создании объекта кластера. Также неплохо установить outfile="", чтобы сообщения об ошибках от рабочих не перенаправлялись на /dev/null:

cl <- makeSOCKcluster("192.168.128.24", manual=TRUE, outfile="")

makeSOCKcluster отобразит команду Rscript для выполнения в терминале на указанном компьютере, а затем будет ждать, пока вы выполните эту команду. Другими словами, makeSOCKcluster зависнет, пока вы вручную не запустите воркера на хосте 192.168.128.24, в вашем случае. Помните, что это метод устранения неполадок, а не решение проблемы, и мы надеемся получить больше информации о том, почему рабочие не запускаются, пытаясь запустить их вручную.

Очевидно, что использование ручного режима позволяет обойти любые проблемы с ssh (поскольку вы не используете ssh), поэтому, если вы можете успешно создать кластер SOCK в ручном режиме, то, вероятно, ваша проблема - ssh. Если команда Rscript не найдена, то R либо не установлен, либо установлен в другом месте. Но, надеюсь, вы получите сообщение об ошибке, которое приведет вас к решению.

Если makeSOCKcluster по-прежнему просто зависает после того, как вы выполнили указанную команду Rscript на указанном компьютере, возможно, у вас проблема с сетью или брандмауэром.

Дополнительные советы по устранению неполадок см. В моем ответе на зависание кластера в doParallel / snowfall.

person Steve Weston    schedule 31.07.2013