问题标签 [r-future]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
470 浏览

r - R未来的多会话限制CPU数量

我目前正在使用 future 包进行并行化,如下所示:

问题是它使用了服务器上的所有 CPU。我想通过设置如下参数来限制使用的 CPU 数量:workers = 18

0 投票
0 回答
314 浏览

r - 如何异步处理knitr代码块?

我想知道是否有一种方法可以异步处理RMarkdown 文档中的knitr代码块。

这就是我的想法:想象一个包含复杂数据分析的文档被分解成几个代码块,其中几个代码块包含复杂的代码,因此运行速度很慢。这些代码块彼此之间没有任何依赖关系,它们的输出要么是绘图、表格,要么是其他一些数字结果,但不是任何其他代码块使用的任何数据对象。

如果我可以并行处理这些代码块,那就太好了。通常,knitr按顺序处理每个代码块,因此,可能有几个代码块在一个处理缓慢的代码块后面的队列中。像futurepromise这样的R 包支持异步编程,我想知道是否可以利用它以相同的方式并行处理knitr代码块。我知道我可以将慢速代码块放在单独的 Rmd 文件中,然后在调用中的代码块调用knitr::knit_childfuture::future_map,但是将所有内容放在同一个文件中会更好。我也知道可以使用child代码块中的选项。此外,我知道我可以通过使用ref.label选项按名称调用代码块来重用代码块。所以我想知道是否有任何方法可以劫持这些功能中的任何一个(可能使用future),以便在执行传递到后续代码块时延迟呈现代码块输出。或类似的东西。只是探索超越knitr中代码块的顺序计算并使用多核或多会话处理的可能性空间。

0 投票
0 回答
126 浏览

r - 加速分组数据的处理

更新:

我尝试了@Adam 的方法,它成功了。使用 8 个核心,处理只需要 20 分钟。到目前为止这很棒。

但是我遇到了另一个问题:foreach's %dopar%operator forks 工作区n时间(等于注册的核心数)。这本身没有问题,但是对于 20 GB 的数据集,这将很快变得丑陋。

所以对原始问题的限制:可以在没有整个数据集在内存分叉n时间的情况下完成吗?

情况:

我需要处理一个大标题(>3000 万行)。tibble 正在分组,并为每个组调用一个函数。

在第一步中,我通过仅提取那些在列中共享一个值的行来减少数据集,name如下所示:

在那之后,我如上所述处理这些重复项:

重复的分组group_by通常导致大约>500k 组。每个组都由 处理myFunction()。现在,这个处理大约需要90 分钟,这还可以,但远不能令人满意。

问题:

有没有办法加快这些组的处理速度,这样这项任务就不会花费 90 分钟,而是显着减少时间?

(包括但不限于多处理)

0 投票
1 回答
201 浏览

r - R包Future - 为什么与远程工作者的循环会挂起本地R会话

如果您需要示例,请告诉我,但我认为没有必要。

我编写了一个 for 循环,它生成期货并将每个结果存储在一个列表中。它plan是远程的,比如说,由一台互联网机器上的 4 个节点组成。

在部署了第 4 个 future 并且远程机器的所有核心都忙后,R 挂起,直到其中一个空闲。由于我没有使用任何本地内核,为什么它必须挂起?这是改变这种行为的方法吗?

0 投票
1 回答
146 浏览

r - 在另一个函数中运行 parLapply 和 future_map 会不必要地将大对象复制到每个工作人员

我一直在寻找替代方法,furrr:future_map()因为当此函数在另一个函数中运行时,它会将在该函数中定义的所有对象复制到每个工作人员,而不管这些对象是否被显式传递(https://github.com/DavisVaughan/furrr/issues/ 26 )。

使用时看起来像parLapply()做同样的事情clusterExport()

reprex 包(v0.3.0)于 2020-01-06 创建

我怎样才能big_obj避免被复制到每个工人?我使用的是 Windows 机器,所以分叉不是一种选择。

0 投票
1 回答
763 浏览

r - 如何正确使用 R 未来 (furrr) 包中的集群计划

我目前正在使用furrr我的模型创建更有条理的执行。我使用 adata.frame以有序的方式将参数传递给函数,然后使用 将furrr::future_map()函数映射到所有参数。在我的本地机器(OSX)上使用顺序和多核期货时,该功能可以完美运行。

现在,我想测试创建自己的 AWS 实例集群的代码(如图所示

我使用链接的文章代码创建了一个函数:

然后,我创建集群对象,然后检查它是否连接到正确的实例

当我打印时,f我得到了我的一个远程实例的规格,这表明套接字已正确连接:

但是当我使用我的集群计划运行我的代码时:

我收到以下错误:

我无法弄清楚引擎盖下发生了什么,我也无法traceback()从我的远程机器上看到错误。我已经测试了与文章中示例的连接,并且事情似乎运行正常。我想知道为什么要tempdir在执行期间创建一个。我在这里想念什么?

(这也是repo中的一个问题)furrr

0 投票
1 回答
923 浏览

r - 在 Linux 上从 future_apply() 杀死期货

我用来future_lapply()在 Linux 机器上并行我的代码。如果我提前终止进程,则只有一名工作人员被释放,并行进程继续存在。我知道我可以进入tools::pskill(PID)以结束每个单独的进程,但这很乏味,因为我在 26 个内核上运行。

如果有办法从 R 对 linux 进行系统调用以获取所有活动的 PID?

我这样设置future_lapply

如果我终止进程并运行,top我仍然会看到: 在此处输入图像描述

因为我的并行会话仍在运行。

使用会话信息更新:
version.string R 版本 3.6.2 (2019-12-12)
future 1.12.0
future.apply 1.2.0

0 投票
0 回答
444 浏览

r - 使用 Future 包在 R 中进行并行处理

我正在尝试使用“Future”包并行运行一堆任务,由于某种原因,它无法找到我希望它找到的数据帧。我创建了下面的示例程序来展示我在做什么。我应该将全局数据导出到每个子进程吗?我目前没有这样做,因为我在某处读到它是在使用多会话计划时自动完成的。知道我做错了什么吗?

0 投票
0 回答
165 浏览

r - 有没有更好的方法在函数中使用 disk.frame ?

我创建了一些需要处理 adisk.frame或 adata.table作为输入的函数。由于执行时未找到对象,我从其中future使用的包中收到错误。disk.frame我认为这是因为future在全局环境中寻找要传递给每个工作人员的对象,而没有识别出我在函数执行环境中生成的对象。超级赋值<<-解决了这个问题,但我想知道是否有更好或更合适的方法来实现disk.frame在函数中使用 's?

我在 Windows 10 x64 上使用最新版本的 R 版本 4.0.0 disk.frame '0.3.5'future '1.17.0'

我已经使用 iris 数据集复制了一个示例:

设置

工作磁盘框架操作

这是有效的,因为filterVals它是在全球环境中。

在函数中执行 disk.frame 操作

0 投票
0 回答
323 浏览

r - R未来包 - 理解错误消息

我在 Linux (R 3.6.0) 上提交了如下两个工作。请参见下面的示例代码。

如果由于数据大小而导致作业花费超过 3 分钟,那么我将遇到错误。如果数据很小,那么我不会出错。我错过了什么吗?

sendMaster(try(eval(expr, env),silent = TRUE)) 中的错误:忽略 SIGPIPE 信号调用:source ... run.MulticoreFuture -> do.call -> -> sendMaster

其他参考:

我发现在不同的博客上已经讨论了类似的问题。听起来错误已在 R 3.6.0 中修复,但即使使用 R 3.6.0 我仍然得到它

https://r.789695.n4.nabble.com/error-in-parallel-sendMaster-td4760382.html

https://github.com/wch/r-source/commit/e08cffac1c5b9015a1625938d568b648eb1d8aee

我的 job1 和 job2 是独立的并将输出写入文件,因此我不需要将任何内容发送回主作业。有什么方法可以在工作中定义说没有必要将任何东西发回主要工作?

更新

如果我使用计划(多会话),我不会收到错误消息

会话和核心信息