我正在尝试用H2O(3.14)来训练机器学习模型。我的数据集大小是4Gb,而我的计算机RAM是2Gb,JDK 1.8是2Gb。参考article,H2O可以处理2Gb RAM的大数据集。如何用H2O处理大数据集
- 在更大的数据和GC的说明:我们做一个用户模式交换到磁盘时,Java堆已满,即你正在使用更多的大数据比 物理DRAM。我们不会死于GC死亡螺旋,但我们会降低到核心外的速度。我们将尽可能快地达到 允许的磁盘。我亲自测试了将12Gb数据集加载到2Gb (32位)JVM中;大约需要5分钟才能加载数据,另外需要5分钟来运行Logistic回归。
解决此问题的一些问题:
- Loading data bigger than the memory size in h2o。由于性能非常糟糕,所提到的用户模式交换磁盘的答案已被禁用。但是,他没有解释任何替代方法,以及如何在h2o中启用标志
--cleaner
?
解决方法1:
我配置的选项java -Xmx10g -jar h2o.jar
Java堆。当我加载数据集。 H2O信息如下:
但是,JVM消耗了所有的RAM内存和Swap,然后操作系统暂停了java h2o程序。
解决方法2:
我安装H2O spark。我可以加载的数据集,但火花与一个完整的交换内存以下日志挂:
+ FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM!
09-01 02:01:12.377 192.168.233.133:54321 6965 Thread-47 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM!
09-01 02:01:12.377 192.168.233.133:54321 6965 Thread-48 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM!
09-01 02:01:12.381 192.168.233.133:54321 6965 Thread-45 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.3 MB + FREE:426.7 MB == MEM_MAX:2.67 GB), desiredKV=803.2 MB OOM!
09-01 02:01:12.382 192.168.233.133:54321 6965 Thread-46 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.4 MB + FREE:426.5 MB == MEM_MAX:2.67 GB), desiredKV=840.9 MB OOM!
09-01 02:01:12.384 192.168.233.133:54321 6965 #e Thread WARN: Swapping! GC CALLBACK, (K/V:1.75 GB + POJO:513.4 MB + FREE:426.5 MB == MEM_MAX:2.67 GB), desiredKV=802.7 MB OOM!
09-01 02:01:12.867 192.168.233.133:54321 6965 FJ-3-1 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.4 MB + FREE:426.5 MB == MEM_MAX:2.67 GB), desiredKV=1.03 GB OOM!
09-01 02:01:13.376 192.168.233.133:54321 6965 Thread-46 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=803.2 MB OOM!
09-01 02:01:13.934 192.168.233.133:54321 6965 Thread-45 WARN: Swapping! OOM, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=841.3 MB OOM!
09-01 02:01:12.867 192.168.233.133:54321 6965 #e Thread WARN: Swapping! GC CALLBACK, (K/V:1.75 GB + POJO:513.2 MB + FREE:426.8 MB == MEM_MAX:2.67 GB), desiredKV=803.2 MB OOM!
在这种情况下,我认为gc
收集正在等待清理掉一些不用的内存。
如何在有限的RAM内存中处理大型数据集?
为什么'r'标签? – shmosel
我删除了'r'标签。我的客户端是一个'r'程序 – khant