是否可以在R中启动多个EC2实例?

时间:2011-11-09 10:12:31

标签: r amazon-ec2

这更像是初学者的问题。说我有以下代码:

library("multicore")
library("iterators")
library("foreach")
library("doMC")

registerDoMC(16)

foreach(i in 1:M) %dopar% {
   ##do stuff
}

此代码将在16个核心上运行(如果可用)。现在,如果我理解正确,使用Amazon EC2,在一个实例上,我依赖于实例只有几个核心。因此,如果我想在16个内核上运行模拟,我需要使用多个实例,这意味着我理解启动新的R进程。但是我需要在R之外编写额外的代码来收集结果。

所以我的问题是,是否有一个R包,它允许从R中启动EC2实例,自动分配这些实例之间的负载,并在初始R启动时收集结果?

1 个答案:

答案 0 :(得分:1)

准确地说,EC2上的最大实例类型目前是8个内核,因此任何人,甚至是R的用户,都需要多个实例才能在8个以上的内核上同时运行。

如果要使用更多实例,则可以使用两种方法来部署R:“常规”R调用或MapReduce调用。在前一种情况下,您必须设置代码来启动实例,分配任务(例如foreach中的独立迭代),返回结果等。这是可行的,但您不太可能喜欢它。在这种情况下,您可以使用rmrRHipe之类的东西来管理MapReduce网格,也可以使用snow和许多其他HPC工具来创建简单的网格。使用snow可以更容易保持代码的完整性,但您必须学会如何将这些内容组合在一起。

在后一种情况下,您可以构建亚马逊提供的基础架构,例如Elastic MapReduce(EMR)和更简单的软件包,例如JD segue。我推荐segue作为一个很好的起点,正如其他人所做的那样,因为它有一个更温和的学习曲线。开发人员也是如此,所以你可以轻松地 embarrass 在它破裂时查询他。