【问题标题】:H2O using too much RAM with Sparse MatricesH2O 在稀疏矩阵中使用过多 RAM
【发布时间】:2017-10-31 17:37:40
【问题描述】:

我正在使用 H2O 和尺寸为 ~700,000 x ~800,000 的 SVMLight 稀疏矩阵。磁盘上的文件大小约为 800MB。但是将其导入 H2O 会占用超过 300GB 的 RAM?该过程也需要很长时间(约 15 分钟)才能完成。

相比之下,我可以使用 Matrix 包相当快地创建稀疏矩阵并将其存储在 RAM 中。在这种情况下,稀疏矩阵需要大约 1.2GB 的 RAM。

下面是我的代码:

library(h2o)
h2o.init(nthreads=-1,max_mem_size = "512g")

x <- h2o.importFile('test2.svmlight', parse = TRUE)

这是我的系统:

openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)

Starting H2O JVM and connecting: .. Connection successful!

R is connected to the H2O cluster: 
H2O cluster uptime:         2 seconds 76 milliseconds 
H2O cluster version:        3.14.0.3 
H2O cluster version age:    1 month and 8 days  
H2O cluster name:           H2O_started_from_R_ra2816_fhv677 
H2O cluster total nodes:    1 
H2O cluster total memory:   455.11 GB 
H2O cluster total cores:    24 
H2O cluster allowed cores:  24 
H2O cluster healthy:        TRUE 
H2O Connection ip:          localhost 
H2O Connection port:        54321 
H2O Connection proxy:       NA 
H2O Internal Security:      FALSE 
H2O API Extensions:         XGBoost, Algos, AutoML, Core V3, Core V4 
R Version:                  R version 3.4.1 (2017-06-30) 

我将不胜感激任何建议,因为我真的很喜欢 H2O,并希望将它用于这个项目。

【问题讨论】:

    标签: r sparse-matrix h2o


    【解决方案1】:

    H2O 将数据存储在列压缩存储中,并且经过优化,可以很好地处理具有大量(数十亿)行和大量(数千)列的数据集。

    每一列都存储在一堆 H2O 所谓的块中。块是一组连续的行。一个块可能是稀疏的,所以如果一个块包含 10,000 行并且它们都丢失了,那么该块所需的内存量可能非常小。但是块仍然需要在那里。

    实际上,这意味着 H2O 稀疏地存储行但不稀疏地存储列。所以它不会像纯稀疏矩阵包那样有效地存储宽数据。

    在您的具体情况下,800,000 列正在推动 H2O 的极限。

    有些人不了解 H2O 的一件事是它可以有效地处理分类列。因此,如果您通过手动对数据进行 1-hot-encoding 来获得列爆炸,则无需使用 H2O 进行此操作。另一种数据表示会更有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多