] «Ошибка при десериализации» - foreach / doSNOW / snow с SOCK (windows) [

] [

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

] [
    ] [
  • ][

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

    ][
  • ] [
  • ][

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

    ][
  • ] [
  • ][

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

    ][
  • ] [
  • ][

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

    ][
  • ] [
] [

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

] [

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

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

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

] [

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

]
9
задан SFun28 31 August 2011 в 02:39
поделиться