mclapply在使用Rscript时出现sendmaster错误

6

在使用命令行调用mclapply时,我偶尔会遇到以下错误:

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

如果我在R Studio或交互式R会话中运行完全相同的代码,则不会出现错误。无论是每个工作人员必须返回非常大的对象的非常大的作业,还是小作业,都会出现此错误。我还尝试关闭“prescheduling”,但仍会引发错误。如果我减少mc.cores参数中的线程数,有时它会消失。我正在使用Ubuntu 18.04.1上的Microsoft R Open。它也在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

有什么想法吗?其他人是否遇到过类似的问题?很抱歉我没有一个可重现的示例,因为我遇到错误的数据/代码太大而无法分享,并且我在其他情况下也无法复制该错误。它似乎只是随机发生。


1
你好,louiszya,请问你能提供一份最小化的代码来展示这个问题吗?当前的代码并不能被其他人复现(意思是:这个问题绝对不会出现在每一个使用mclapply的代码中,它需要非常特定的情况)。顺便说一句,你发布了你的R配置做得很好(但请勿在一个干净的会话中运行它,请在有问题的会话中运行以展示其他已加载的软件包)! - Konrad Rudolph
可能是从分叉的子进程发送回主进程的数据太大了。为了进行故障排除,请尝试在脚本顶部添加trace(parallel:::sendMaster, at = 3L, tracer = quote({ str(list(what = what)) })),然后重新运行。这应该能让我们了解导致错误的数据大小。 - HenrikB
@HenrikB,我也遇到了这个问题。当我增加返回对象的大小时,它变得更加严重。然而,文档声称: _在R 3.4.0版本之前并且在32位平台上,每个分叉进程的序列化结果被限制为2^31-1字节_。这感觉足够了。 R 3.5.1,debian sid。 - Ott Toomet
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接