【问题标题】:What is furrr's "black magic?"什么是弗尔的“黑魔法”?
【发布时间】:2020-07-01 17:55:39
【问题描述】:

我使用 R 包 furrr 来满足我的大部分并行化需求,并且基本上从来没有将东西从我的全局环境导出到集群的问题。今天我做到了,我不知道为什么。包文档似乎将全局变量发送到集群的过程描述为“黑魔法”。黑魔法是什么?

furrr::future_options 文档说:

全局变量和包 默认情况下,future 包将执行黑魔法来查找您的 furrr 调用所需的全局变量和包,并将这些导出到每个工作人员。但是,它并不总是完美的,可以使用 globals 和 packages 参数进行优化。

作为第二个问题:有没有一种优雅的方式来告诉它执行它的黑魔法,但导出它错过的东西?或者,选择是 a) 全是黑魔法,还是 b) 对 .options 参数中的所有内容进行硬编码?

【问题讨论】:

  • w.r.t.第二个问题,您只能在“计划”中添加错过的对象, globals = structure(TRUE, add = "a")cran.r-project.org/web/packages/future/vignettes/…
  • 众所周知,future 并不总是与data.table 配合得很好
  • 我喜欢这个问题,很悲惨,还没有答案。我也见过同样的事情。有时我的全局变量会出现,有时它们不会出现……我对这个问题的答案非常感兴趣。

标签: r environment-variables furrr


【解决方案1】:

这并不能完全回答问题,但我认为它为您指明了正确的方向。来自this intro vignette的“全局”部分:

它在globals 包的帮助下做到这一点,该包使用静态代码检查来识别全局变量。如果识别出全局变量,则会将其捕获并提供给评估过程。

还有this "Common Issues with Solutions" vignette(@michael 在上面有用地链接)讨论了一些由 globals 包中的静态代码 eval 产生的常见“问题”。

我在这里找到了方法,因为我的 future_map() 代码未能找到我在 glue() 调用中引用的变量。该小插曲准确地解释了为什么会发生这种情况。

至于为什么您的代码有时有效,有时无效,很难说。但正如您所看到的,引擎盖下发生了足够的复杂性,如果一些看似无关的更改破坏了某些东西,我并不感到惊讶。 (对我来说,这个更改是清理我的代码并使用 glue 而不是 paste :shrug:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2012-05-14
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多