这更像是一个初学者的问题.说我有以下代码:
library("multicore")
library("iterators")
library("foreach")
library("doMC")
registerDoMC(16)
foreach(i in 1:M) %dopar% {
##do stuff
}
Run Code Online (Sandbox Code Playgroud)
然后,此代码将在16个核心上运行(如果可用).现在,如果我理解正确,使用Amazon EC2,在一个实例上,我依赖于实例只有几个核心.因此,如果我想在16个内核上运行模拟,我需要使用多个实例,这意味着我理解启动新的R进程.但是我需要在R之外编写额外的代码来收集结果.
所以我的问题是,是否有一个R包,它允许从R内启动EC2实例,自动分配这些实例之间的负载,并在初始R启动时收集结果?
准确地说,EC2 上的最大实例类型目前为 8 个核心,因此任何人,甚至 R 的用户,都需要多个实例才能在超过 8 个核心上同时运行。
如果您想使用更多实例,那么您有两种部署 R 的选项:“常规”R 调用或 MapReduce 调用。在前一种情况下,您必须设置代码来启动实例、分发任务(例如 中的独立迭代foreach)、返回结果等。这是可行的,但您不太可能喜欢它。在这种情况下,您可以使用类似rmr或 的工具RHipe来管理 MapReduce 网格,也可以使用snow许多其他 HPC 工具来创建简单的网格。使用snow可能会让你的代码更容易保持完整,但是你必须学习如何将这些东西结合在一起。
在后一种情况下,您可以基于 Amazon 提供的基础设施进行构建,例如 Elastic MapReduce (EMR) 以及使该过程变得更简单的软件包,例如 JD 的segue. 正如其他人所做的那样,我建议segue将其作为一个很好的起点,因为它具有更温和的学习曲线。开发者也在SO上,所以当它坏了的时候你可以很容易尴尬地询问他。