这更像是初学者的问题。说我有以下代码:
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启动时收集结果?
答案 0 :(得分:1)
准确地说,EC2上的最大实例类型目前是8个内核,因此任何人,甚至是R的用户,都需要多个实例才能在8个以上的内核上同时运行。
如果要使用更多实例,则可以使用两种方法来部署R:“常规”R调用或MapReduce调用。在前一种情况下,您必须设置代码来启动实例,分配任务(例如foreach
中的独立迭代),返回结果等。这是可行的,但您不太可能喜欢它。在这种情况下,您可以使用rmr
或RHipe
之类的东西来管理MapReduce网格,也可以使用snow
和许多其他HPC工具来创建简单的网格。使用snow
可以更容易保持代码的完整性,但您必须学会如何将这些内容组合在一起。
在后一种情况下,您可以构建亚马逊提供的基础架构,例如Elastic MapReduce(EMR)和更简单的软件包,例如JD segue
。我推荐segue
作为一个很好的起点,正如其他人所做的那样,因为它有一个更温和的学习曲线。开发人员也是如此,所以你可以轻松地 embarrass 在它破裂时查询他。