R - 高性能 Amazon EC2 比 i7 慢?

R - High performance Amazon EC2 slower than i7?

我正在处理一个大型数据集,并尝试将其卸载到 Amazon EC2 以加快处理速度。

数据以两个 tables - 6.5M x 6 和 11K x 15 开始。然后我将它们合并为一个 6.5M x 20 table.

这是我的 R 代码:

library(data.table)
library(dplyr)

download.file("http://d396qusza40orc.cloudfront.net/exdata%2Fdata%2FNEI_data.zip", "data.zip")

unzip("data.zip")

data <- readRDS("summarySCC_PM25.rds")
scckey <- readRDS("Source_Classification_Code.rds")

system.time(data <- data %>% inner_join(scckey))

在我的家用笔记本电脑(i7 1.9GHZ、8GB RAM、SSD)上,这是我的输出

   user  system elapsed 
 226.91    0.36  228.39 

在 Amazon EC2 c4.8xlarge(36 vCPU、132 EPU、60GB RAM、EBS 存储)上

   user  system elapsed 
302.016   0.396 302.422 

在 Amazon EC2 c3.8large(32 vCPU、108 EPU、60GB RAM、SSD 存储)上

   user  system elapsed 
374.839   0.367 375.178

为什么两个 EC2 系统都比我自己的笔记本电脑慢?尤其是 c4.8large 似乎是亚马逊提供的最强大的计算解决方案。

我是不是做错了什么?

编辑:

我检查了监控系统 - 看起来连接 运行 在 3-5% CPU 使用率。这似乎很低 - 在我的笔记本电脑上它运行大约 30-40%。

编辑:

根据建议,我尝试了 data.tablemerge()

3.8xlarge @ ~1% CPU 利用率:

system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
193.012   0.658 193.654

4.8xlarge @ ~2% CPU 利用率:

system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
162.829   0.822 163.638 

笔记本电脑:

最初需要 5 分钟以上,所以我重新启动了 R。

system.time(datamerge <- merge(data, scckey, by = "SCC"))
   user  system elapsed 
133.45    1.34  135.81 

这显然是一个更高效的函数,但我仍然以可观的优势击败了最好的 Amazon EC2 机器。

编辑:

scckey[data] 在我的笔记本电脑上 将此操作的时间减少到 不到 1 秒 。我仍然很好奇如何更好地利用 EC2。

并不是说我是 Amazon EC2 的专家,但它可能使用商用服务器作为基础硬件平台。 "Commodity" 在此上下文中表示 x86 CPU,其基本架构与您的笔记本电脑相同。根据您的笔记本电脑的强大程度,它甚至可能具有比 EC2 实例中的内核更高的时钟速度。

EC2 为您带来的是可扩展性,这意味着比您在本地拥有的内核和内存更多。但是您必须编写代码以利用这些核心;这意味着它必须在执行中并行化。我很确定 data.table 像几乎所有 R 程序包一样是单线程的,因此获得更多内核本身并不能使事情变得更快。此外,如果您的数据已经适合您的记忆,那么获取更多数据不会产生显着的收益。