ошибка mclapply sendmaster только с Rscript

Я периодически получаю следующую ошибку при использовании Rscript для вызова mclapply из командной строки:

Error in sendMaster(try(lapply(X = S, FUN = FUN, ...), silent = TRUE)) : 
  write error, closing pipe to the master

Если я запускаю тот же самый код в R Studio или из интерактивного сеанса R, я не получаю ошибку. Эта ошибка появляется в различных контекстах: от очень больших заданий, где каждый рабочий должен вернуть очень большой объект, до небольших заданий. Я также пытался отключить prescheduling, но все равно выдает ошибку. Иногда это уйдет, если я уменьшу количество потоков в аргументе mc.cores. Я использую Microsoft R Open в Ubuntu 18.04.1. Он также появился в Ubuntu 16.04. Одна вещь, которую я не пробовал, — это запускать код в стандартном R вместо MRO.

Вот мой Rscript -e 'sessionInfo()':

R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.1 LTS

Matrix products: default
BLAS: /opt/microsoft/ropen/3.5.1/lib64/R/lib/libRblas.so
LAPACK: /opt/microsoft/ropen/3.5.1/lib64/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] RevoUtils_11.0.1     RevoUtilsMath_11.0.0

loaded via a namespace (and not attached):
[1] compiler_3.5.1

Есть идеи? Кто-нибудь еще сталкивался с чем-то подобным? Я извиняюсь за то, что у меня нет воспроизводимого примера, но данные/код, в которых я столкнулся с ошибкой, непрактично велики, чтобы делиться ими, и я не смог воспроизвести ошибку в других контекстах. Кажется, это просто происходит случайно.


person louiszya    schedule 23.08.2018    source источник
comment
Привет, louiszya, не могли бы вы создать минимальный фрагмент кода, который демонстрирует эту проблему? В нынешнем виде это невозможно воспроизвести для других (имеется в виду: это определенно происходит не с каждым кодом, использующим mclapply, для этого требуются очень специфические обстоятельства). Тем не менее, вы молодец, опубликовав свою конфигурацию R (но не запускайте ее в чистом сеансе, запустите ее в проблемном сеансе, чтобы показать, какие другие пакеты подключены)!   -  person Konrad Rudolph    schedule 23.08.2018
comment
Возможно, данные, отправленные обратно в главные процессы из разветвленных дочерних процессов, слишком велики. Для устранения неполадок попробуйте добавить trace(parallel:::sendMaster, at = 3L, tracer = quote({ str(list(what = what)) })) в начало сценария и перезапустите его. Это должно дать нам представление о размере данных, которые вызывают эту ошибку.   -  person HenrikB    schedule 23.08.2018
comment
@HenrikB, я тоже сталкиваюсь с этой проблемой. Стало значительно хуже, когда я увеличил размер возвращаемого объекта. Однако в документации утверждается, что до версии R 3.4.0 и на 32-разрядной платформе размер сериализованного результата каждого разветвленного процесса ограничен 2^31 - 1 байт. Кажется, этого достаточно. R 3.5.1, дебиан сид.   -  person Ott Toomet    schedule 13.11.2018


Ответы (1)


Попробуйте выполнить обновление до R версии 3.6.0 или более поздней версии.

Я столкнулся с той же проблемой, которая была вызвана ошибкой (использование неинициализированной переменной) в пакете parallel, как подробно описано здесь: https://r.789695.n4.nabble.com/error-in-parallel-sendMaster-td4760382.html.

person akersting    schedule 04.12.2019