这更像是一个初学者的问题。假设我有以下代码:
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 中收集结果?
最佳答案
准确地说,EC2 上的最大实例类型目前是 8 个核心,因此任何人,甚至是 R 的用户,都需要多个实例才能在 8 个以上的核心上同时运行。
如果您想使用更多实例,那么您有两种部署 R 的选项:“常规”R 调用或 MapReduce 调用。在前一种情况下,您必须设置代码来启动实例、分配任务(例如 foreach
中的独立迭代)、返回结果等。这是可行的,但您不太可能喜欢它。在这种情况下,您可以使用类似 rmr
的内容。或 RHipe
管理 MapReduce 网格,或者您可以使用 snow
和许多其他 HPC 工具来创建一个简单的网格。使用 snow
可能使保持代码完整更容易,但您必须学习如何将这些东西联系在一起。
在后一种情况下,您可以在 Amazon 提供的基础设施上进行构建,例如 Elastic MapReduce (EMR) 和使其更简单的包,例如 JD 的 segue
.我推荐 segue
作为一个很好的起点,正如其他人所做的那样,因为它具有更温和的学习曲线。开发人员也在 SO,因此您可以在中断时轻松地向他提问。
关于r - 是否可以在 R 中启动多个 EC2 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8063417/