【发布时间】: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