我正在嘗試用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