【发布时间】:2017-08-31 08:04:57
【问题描述】:
我正在尝试使用 H2O (3.14) 训练机器学习模型。我的数据集大小是 4Gb,我的计算机 RAM 是 2Gb,带有 2G 交换,JDK 1.8。参考这个article,H2O 可以处理具有 2Gb RAM 的巨大数据集。
- 关于大数据和 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。我可以加载数据集,但 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标签? -
我删除了
r标签。我的客户是r程序
标签: java garbage-collection jvm h2o