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

Memory H2o:迭代大于内存的数据,而不将所有数据加载到内存中,memory,h2o,Memory,H2o,有没有一种方法可以使用H2O对大于集群累积内存大小的数据进行迭代?我有一个大数据集,我需要成批迭代,然后输入Tensorflow进行梯度下降。在给定的时间,我只需要在内存中加载一批(或一把)。有没有一种方法可以让H2O在不将整个数据集加载到内存的情况下执行这种迭代 这里有一个相关的问题在一年前得到了回答,但并没有解决我的问题:简单的回答是,这不是H2O的设计目的。 不幸的是,今天的答案是否定的 更长的答案。。。(假设问题的目的是关于H2O-3.x中的模型培训…) 我可以想出至少两种方式来使用H

有没有一种方法可以使用H2O对大于集群累积内存大小的数据进行迭代?我有一个大数据集,我需要成批迭代,然后输入Tensorflow进行梯度下降。在给定的时间,我只需要在内存中加载一批(或一把)。有没有一种方法可以让H2O在不将整个数据集加载到内存的情况下执行这种迭代


这里有一个相关的问题在一年前得到了回答,但并没有解决我的问题:

简单的回答是,这不是H2O的设计目的。 不幸的是,今天的答案是否定的


更长的答案。。。(假设问题的目的是关于H2O-3.x中的模型培训…)

我可以想出至少两种方式来使用H2O:一次流式传输和交换

将单通道流视为连续的数据流输入,数据不断地被操作,然后被丢弃(或传递)

将交换视为交换的计算机科学等价物,其中有快速存储(内存)和慢速存储(磁盘),并且算法不断地从磁盘到内存扫描数据和故障(交换)数据

从性能角度看,数据越大,交换就越糟糕。H2O从来没有这样测试过,你只能靠自己。也许您可以从另一个引用的stackoverflow问题(或源代码)中的线索/提示中找出如何启用不受支持的交换模式,但没有人以这种方式运行,您只能靠自己。H2O被设计成通过在内存中保存数据来快速进行机器学习。机器学习算法反复扫描数据。如果每次数据触摸都会碰到磁盘,那就不是内存H2O-3平台设计的目的


流式使用案例,特别是对于一些算法,如深度学习和DRF,对于H2O来说肯定更有意义。H2O算法支持检查点,您可以想象这样一种场景:读取一些数据,训练模型,然后清除该数据并读取新数据,然后从检查点继续训练。在深度学习案例中,您将使用新数据更新神经网络权重。在DRF案例中,您将根据新数据添加新的树。

“输入Tensorflow”意味着您使用的是深水,而不是内置的h2o算法?指定集群的外观可能很有用:有多少节点,每个节点中有多少CPU核心和GPU,等等。Darren,感谢您的回复。我用的是普通的张量流。我有一个单独的数据转换管道,使用Spark、Hive和HDFS生成用于培训的ORC文件。接下来,我需要将这些数据的批处理流式传输到Tensorflow/python中,这就是问题所在。我们使用py4j编写了自己的ORC python拖缆,但速度太慢了。因此,为ORC/HDFS寻找更快的流io python库—尝试了pyarrow和Spark localIterator之外的一个库,但在所有情况下都遇到了错误。H2O可以工作,但需要大量的RAM,甚至有时会遇到内存问题。汤姆,谢谢你的回复。使用h2o一段时间后,我意识到它没有拖缆。我的体系结构就是你所说的一次流式传输——正是因为我在一个时代有1亿到数十亿条记录。尝试了spark的本地迭代器函数,但它在spark 2.01上不起作用-而且我没有时间升级。所以我希望找到一个快速解决问题的方法,那就是我尝试使用h2o(我已经安装了一个集群)。我本可以研究卡夫卡/其他大数据技术,但不想再打开一罐蠕虫。