R - 高性能Amazon EC2比i7慢?

时间:2015-04-25 21:14:33

标签: r amazon-ec2

我正在使用大型数据集,并尝试将其卸载到Amazon EC2以便更快地处理。

数据从两个表开始 - 6.5M x 6和11K x 15.然后我将它们合并到一个6.5M x 20表中。

这是我的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,60个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.8larlar似乎是亚马逊提供的最强大的计算解决方案。

我做错了吗?

编辑:

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

编辑:

根据我的建议,我尝试了data.table&#39; merge()

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 

这显然是一种更有效的功能,但我还是以不错的优势击败了最好的亚马逊EC2机器。

编辑:

scckey[data]会将此操作的时间缩短至小于1秒的笔记本电脑。我仍然很好奇如何更好地利用EC2。

1 个答案:

答案 0 :(得分:3)

并非我是Amazon EC2的专家,但它可能使用商用服务器作为基础硬件平台。 &#34;商品&#34;在这种情况下意味着x86 CPU,它们具有与笔记本电脑相同的基本架构。根据笔记本电脑的强大程度,它甚至可能比EC2实例中的内核具有更高的时钟速度。

EC2为您提供的是可伸缩性,这意味着比您本地更多的内核和内存。但是必须编写代码才能利用这些内核;意味着它必须在执行中并行化。我非常确定data.table像几乎所有R软件包一样是单线程的,因此获得更多内核不会让自己更快地完成任务。此外,如果您的数据已经适合您的记忆,那么获得更多数据并不会产生显着的收益。