【问题标题】:"Error in unserialize" - foreach/doSNOW/snow with SOCK (windows)“反序列化错误” - foreach/doSNOW/snow with SOCK (windows)
【发布时间】:2011-08-29 23:05:33
【问题描述】:

我正在使用 SOCK 集群和本地计算机上的工作人员运行并行操作。如果我限制我正在迭代的集合(在一次测试中使用 70 个任务而不是完整的 135 个任务),那么一切正常。如果我选择全套,我会收到错误“反序列化错误(socklist [[n]]):从连接读取错误”。

  • 我已在 Windows 防火墙中解锁端口(输入/输出)并允许 Rscript/R 的所有访问。

  • 这不可能是超时问题,因为套接字超时设置为 365 天。

  • 这不是任何特定任务的问题,因为我可以很好地按顺序运行(如果我将数据集分成两半并执行两个单独的并行运行,也可以并行运行)

  • 我能想到的最好办法是通过套接字传输的数据过多。似乎没有限制数据限制的集群选项。

我不知道如何继续。有没有人见过这个问题或者可以提出解决方案?

这是我用来设置集群的代码:

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

编辑
虽然这个问题在整个数据集上都是一致的,但它也会不时出现在减少的数据集上。这可能表明这不仅仅是数据限制问题。

编辑 2
我挖得更深一点,结果发现我的函数实际上有一个随机组件,它使得有时任务会引发错误。如果我连续运行这些任务,那么在操作结束时我会被告知哪个任务失败了。如果我并行运行,则会收到“反序列化”错误。我尝试使用 error = function(e) { stop(e) } 将每个任务执行的代码包装在 tryCatch 调用中,但这也会产生“反序列化”错误。我很困惑,因为我认为雪通过将错误传回给主人来处理错误?

【问题讨论】:

  • R 仅限于 128 个同时打开的连接...也许这是其中的一部分?
  • 我正在测试 8 个连接。
  • 但是你的问题说 70 个任务一切正常,所以我很困惑。
  • 我认为您将任务与连接混淆了。我有多达 8 个连接处理更多任务。在这种情况下,我有 135 个要并行运行的任务,但 CPU 上只有 8 个核心来处理这些任务(实际上我从不超过 7 个 - 就像为操作系统留下一个可用的)
  • 是的,我很困惑,因为您使用的软件包不使用“任务”来描述他们所做的任何事情,并且您没有提供“任务”的含义的示例,所以我想弄清楚你的意思。产生您描述的行为的最小示例将有助于帮助他人。就目前而言,您需要有人在他们开始调查原因之前复制该行为。这可能是雪的作者忽略您的电子邮件的原因。

标签: r foreach parallel-processing


【解决方案1】:

我已将此问题报告给 SNOW 的作者,但遗憾的是没有回复。

编辑
我有一段时间没看到这个问题了。我搬到了 Parallel/doParallel。另外,我现在使用 try() 来包装任何并行执行的代码。我无法重现原始问题。

【讨论】:

  • 您如何确定这是雪中的错误,而不是 foreach 和/或 doSNOW?
  • 不是正面的。取消选中我的答案,直到我想出一个可行的例子。
  • 感觉就像多个工作节点正在尝试从硬盘驱动器上的同一个文件中读取。我有几个并行运行的模型写入同一个文件,这会导致各种随机错误。但是,如果它访问硬盘,您并没有提供有关该函数究竟做什么的详细信息,所以我们在某种程度上只能猜测。
  • 这是一个很好的猜测...我没有将输出写入文件,所以这不是问题(实际上,我想将输出泵送到父/主 R 屏幕但无法获得工作)。当子进程抛出错误时似乎会发生这种情况,但应该有一个错误处理工具。似乎这个错误处理程序并不总是有效。我没有时间重新制作,只是希望使用 Parallel 包解决问题
  • 我也遇到了同样的问题,请问有什么解决办法吗?和 SFun28 一样,我的函数有很多随机组件。
猜你喜欢
  • 1970-01-01
  • 2019-01-02
  • 2010-11-28
  • 2014-02-19
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多