H2o:迭代大于内存的数据而不将所有数据加载到内存中

时间:2017-04-27 21:39:18

标签: memory h2o

有没有办法可以使用H2O来迭代大于群集累积内存大小的数据?我有一个大数据集,我需要批量迭代并输入Tensorflow进行梯度下降。在给定的时间,我只需要在内存中加载一个批次(或少量)。有没有办法设置H2O来执行这种迭代而不将整个数据集加载到内存中?

这是一年前回答的一个相关问题,但没有解决我的问题:Loading data bigger than the memory size in h2o

1 个答案:

答案 0 :(得分:2)

简短的回答是,这不是H2O的设计目标。 所以不幸的是,今天的答案是否定的。

答案越长......(假设问题的意图是关于H2O-3.x中的模型训练......)

我可以想到至少有两种方式可能希望以这种方式使用H2O:一次通过流式传输和交换。

将单遍流式传输视为连续数据流输入,数据不断被执行然后被丢弃(或传递)。

将交换视为计算机科学相当于交换,存在快速存储(内存)和慢速存储(磁盘),并且算法不断扫描数据并将数据从磁盘故障(交换)到内存。

从性能角度来看,交换变得越来越糟,数据越大。 H2O并没有经过这种方式的测试,而且你是独立的。也许你可以弄清楚如何从其他引用的stackoverflow问题(或源代码)中的线索/提示启用不支持的交换模式,但是没有人会以这种方式运行,而你自己也是如此。通过将数据保存在内存中,H2O被设计为快速进行机器学习。机器学习算法一次又一次地迭代扫描数据。如果每次触摸数据都会碰到磁盘,那就不是内存中H2O-3平台设计提供的体验了。

流媒体使用案例,尤其是某些算法(如深度学习和DRF),对H2O来说无疑更有意义。 H2O算法支持检查点,您可以想象一种情况,您可以读取一些数据,训练模型,然后清除数据并读入新数据,并继续从检查点进行培训。在深度学习案例中,您将使用新数据更新神经网络权重。在DRF案例中,您将根据新数据添加新树。