【发布时间】:2014-03-28 19:27:43
【问题描述】:
我正在通过在一台机器上运行工作者和在另一台机器上运行主/服务器来测试 doRedis 包。我的master上的代码是这样的:
#Register ...
r <- foreach(a=1:numreps, .export(...)) %dopar% {
train <- func1(..)
best <- func2(...)
weights <- func3(...)
return ...
}
在每个函数中,都会访问一个全局变量,但不会对其进行修改。我已经在 foreach 循环的 .export 部分中导出了全局变量,但是每当我运行代码时,都会出现一个错误,指出找不到该变量。有趣的是,当我的所有工作人员都在一台机器上时,代码可以工作,但当我有一个“外部”工作人员时会崩溃。任何想法为什么会发生此错误,以及如何纠正它?
谢谢!
更新:我在这里有一些代码的要点:https://gist.github.com/liangricha/fbf29094474b67333c3b
UPDATE2:我问了另一个与doRedis相关的问题:“是否有可能允许每台工作机器利用其所有内核?
@Steve Weston 回复:“每个核心启动一个 redis worker 通常会充分利用一台机器。”
【问题讨论】:
-
我认为我们需要查看更多代码。也许是要点中一些扩展 sn-ps 的链接?
-
嗨!抱歉回复晚了。我在这里上传了一个要点:gist.github.com/liangricha/fbf29094474b67333c3b。并行化发生在“howmanypulses”函数中,“parttable”全局变量的访问发生在“createdataset”函数中。根据 doRedis 的日志,前 300 个作业运行良好,但在第一批 300 个后程序崩溃,并指出找不到对象“parttable1”。诊断此问题的任何帮助都将是最有帮助的。非常感谢!
标签: r parallel-processing redis cluster-computing r-doredis