Amazon ec2上的R随机林错误:无法分配大小为5.4 Gb的向量


9

我正在R中训练随机森林模型,并randomForest()使用1000个树和数据帧以及大约20个预测变量和600K行。在我的笔记本电脑上,一切正常,但是当我转到Amazon ec2时,要运行相同的内容,则会收到错误消息:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

我正在使用c3.4xlarge实例类型,因此非常强大。有谁知道为此解决方案以使其在此实例上运行?我很想知道仅在ec2实例上而不在笔记本电脑上导致此问题的内存细微差别(OS X 10.9.5处理器2.7 GHz Intel Core i7;内存16 GB 1600 MHz DDR3)

谢谢。

Answers:


5

以下是一些建议(使用风险自负!):

如果上述简单措施无济于事,或者您想获得更大的可伸缩性和/或性能,包括能够在一台或多台计算机上并行化进程,请考虑使用bigrfR包:http:// cran。 r-project.org/web/packages/bigrf。另请参阅以下讨论:https : //stackoverflow.com/q/1358003/2872891


2

其他建议的补充:减少数据,直到您确定可以在Amazon实例上运行的内容。如果它不能执行10万行,那么就很不对劲;如果它无法完成590k行,那么它的边际是错误的。

c3.4xlarge实例具有30Gb RAM,因此是足够的。


2

仅将您所看到的确切错误Google排除在外总是有帮助的,不包括矢量的实际内存之类的细节。对我而言,第一本是一个有趣的文档,名为“ R:R的内存限制 ”,在“ Unix”下,该文档可以读取:

地址空间限制是特定于系统的:32位操作系统施加的限制不超过4Gb:通常为3Gb。在64位OS上运行32位可执行文件将具有类似的限制:64位可执行文件将具有实质上无限的特定于系统的限制(例如,对于x86_64 cpus上的Linux为128Tb)。

有关如何对单个进程可用的资源施加限制,请参阅OS / shell的关于诸如limit或ulimit之类的命令的帮助。例如bash用户可以使用

ulimit -t 600 -v 4000000

而csh用户可能会使用

limit cputime 10m limit vmemoryuse 4096m

将进程限制为10分钟的CPU时间和(大约)4Gb虚拟内存。(还有其他选项可设置正在使用的RAM,但通常不兑现。)

所以,你应该检查

  1. 您在EC2实例上运行哪种类型的操作系统
  2. 您在该OS上运行哪种类型的R构建,并确保运行64位版本
  3. 如果两个都已经是64位,则用于ulimit将内存设置为例如8Gb:ulimit -v 8000000
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.