«Ошибка в десериализации» - foreach / doSNOW / snow с SOCK (windows) - PullRequest
9 голосов
/ 30 августа 2011

Я выполняю параллельную операцию, используя кластер SOCK с работниками на локальной машине. Если я ограничу набор, который я повторяю (в одном тесте, используя 70 вместо полных 135 задач), то все работает просто отлично. Если я иду на полный набор, я получаю ошибку «Ошибка в unserialize (socklist [[n]]): ошибка чтения из соединения».

  • Я разблокировал порт в брандмауэре Windows (как вход / выход), так и разрешил весь доступ для Rscript / R.

  • Это не может быть проблема тайм-аута, потому что тайм-аут сокета установлен на 365 дней.

  • Это не проблема для любой конкретной задачи, потому что я могу работать последовательно просто отлично (также работает нормально параллельно, если я разделю набор данных пополам и сделаю два отдельных параллельных запуска)

  • Лучшее, что я могу придумать, это то, что через сокеты передается слишком много данных. Кажется, не существует кластерного параметра для ограничения ограничений данных.

Я не знаю, как поступить. Кто-нибудь видел эту проблему раньше или может предложить исправить?

Вот код, который я использую для настройки кластера:

cluster = makeCluster( degreeOfParallelism , type = "SOCK" , outfile = "" )
registerDoSNOW( cluster )

Редактировать
Хотя эта проблема касается всего набора данных, время от времени она также отображается с уменьшенным набором данных. Это может указывать на то, что это не просто проблема с ограничением данных.

Редактировать 2
Я копнул немного глубже, и оказалось, что моя функция на самом деле имеет случайный компонент, который делает так, что иногда задача вызовет ошибку. Если я запускаю задачи последовательно, то в конце операции мне говорят, какая задача не удалась. Если я запускаю параллельно, то я получаю ошибку «unserialize». Я попытался обернуть код, который выполняется каждой задачей, в вызов tryCatch с ошибкой = function (e) {stop (e)}, но это также приводит к ошибке "unserialize". Я в замешательстве, потому что я думал, что снег обрабатывает ошибки, передавая их обратно мастеру?

1 Ответ

2 голосов
/ 15 октября 2011

Я сообщил об этой проблеме автору SNOW, но, к сожалению, ответа не было.

Редактировать
Я не видел эту проблему в течение некоторого времени. Я перешел в Parallel / doParallel. Кроме того, я теперь использую try (), чтобы обернуть любой код, который выполняется параллельно. Я не могу воспроизвести исходный номер.

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