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

数据挖掘 r 随机森林
2021-09-26 08:57:50

我正在使用randomForest()1000 棵树和具有大约 20 个预测变量和 600K 行的数据框在 R 中训练随机森林模型。在我的笔记本电脑上一切正常,但是当我搬到亚马逊 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)

谢谢。

3个回答

这里有一些建议(使用风险自负!):

如果上述更简单的措施没有帮助,或者您希望获得更多的可扩展性和/或性能,包括在单台机器或多台机器上并行化进程的能力,请考虑使用bigrfR 包:http://cran。 r-project.org/web/packages/bigrf另请参阅此讨论:https ://stackoverflow.com/q/1358003/2872891 。

其他想法的补充:减少数据,直到弄清楚可以在 Amazon 实例上运行什么。如果它不能做 100k 行,那么事情就非常错误,如果它在 590k 行时失败,那么它的边缘。

c3.4xlarge 实例有 30Gb 的 RAM,所以应该足够了。

只用谷歌搜索你看到的确切错误总是有帮助的,不包括向量的实际内存等细节。对我来说,第一个热门是一个有趣的文档,名为“ R:R 的内存限制”,其中,在“Unix”下,可以阅读:

地址空间限制因系统而异:32 位操作系统的限制不超过 4Gb:通常为 3Gb。在 64 位操作系统上运行 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. 您在该操作系统上运行什么类型的 R 版本,并确保您运行的是 64 位版本
  3. 如果两者都已经是 64 位,则使用ulimit将内存设置为例如 8Gb:ulimit -v 8000000