H2O服务器崩溃

时间:2017-07-26 17:35:20

标签: python-3.x h2o

去年我一直在使用H2O,而且我对服务器崩溃感到非常厌倦。我放弃了"夜间发布",因为它们很容易被我的数据集崩溃。请告诉我在哪里可以下载稳定版本。

查尔斯

我的环境是:

  • Windows 10企业版,内置1607版,内存为64 GB。
  • Java SE Development Kit 8 Update 77(64位)。
  • Anaconda Python 3.6.2-0。

我用:

启动了服务器
localH2O = h2o.init(ip = "localhost",
                    port = 54321,
                    max_mem_size="12G",
                    nthreads = 4)

h2o init信息是:

H2O cluster uptime:         12 hours 12 mins
H2O cluster version:        3.10.5.2
H2O cluster version age:    1 month and 6 days
H2O cluster name:           H2O_from_python_Charles_ji1ndk
H2O cluster total nodes:    1
H2O cluster free memory:    6.994 Gb
H2O cluster total cores:    8
H2O cluster allowed cores:  4
H2O cluster status:         locked, healthy
H2O connection url:         http://localhost:54321
H2O connection proxy:
H2O internal security:      False
Python version:             3.6.2 final

崩溃信息是:

OSError: Job with key $03017f00000132d4ffffffff$_a0ce9b2c855ea5cff1aa58d65c2a4e7c failed with an exception: java.lang.AssertionError: I am really confused about the heap usage; MEM_MAX=11453595648 heapUsedGC=11482667352
stacktrace: 
java.lang.AssertionError: I am really confused about the heap usage; MEM_MAX=11453595648 heapUsedGC=11482667352
    at water.MemoryManager.set_goals(MemoryManager.java:97)
    at water.MemoryManager.malloc(MemoryManager.java:265)
    at water.MemoryManager.malloc(MemoryManager.java:222)
    at water.MemoryManager.arrayCopyOfRange(MemoryManager.java:291)
    at water.AutoBuffer.expandByteBuffer(AutoBuffer.java:719)
    at water.AutoBuffer.putA4f(AutoBuffer.java:1355)
    at hex.deeplearning.Storage$DenseRowMatrix$Icer.write129(Storage$DenseRowMatrix$Icer.java)
    at hex.deeplearning.Storage$DenseRowMatrix$Icer.write(Storage$DenseRowMatrix$Icer.java)
    at water.Iced.write(Iced.java:61)
    at water.AutoBuffer.put(AutoBuffer.java:771)
    at water.AutoBuffer.putA(AutoBuffer.java:883)
    at hex.deeplearning.DeepLearningModelInfo$Icer.write128(DeepLearningModelInfo$Icer.java)
    at hex.deeplearning.DeepLearningModelInfo$Icer.write(DeepLearningModelInfo$Icer.java)
    at water.Iced.write(Iced.java:61)
    at water.AutoBuffer.put(AutoBuffer.java:771)
    at hex.deeplearning.DeepLearningModel$Icer.write105(DeepLearningModel$Icer.java)
    at hex.deeplearning.DeepLearningModel$Icer.write(DeepLearningModel$Icer.java)
    at water.Iced.write(Iced.java:61)
    at water.Iced.asBytes(Iced.java:42)
    at water.Value.<init>(Value.java:348)
    at water.TAtomic.atomic(TAtomic.java:22)
    at water.Atomic.compute2(Atomic.java:56)
    at water.Atomic.fork(Atomic.java:39)
    at water.Atomic.invoke(Atomic.java:31)
    at water.Lockable.unlock(Lockable.java:181)
    at water.Lockable.unlock(Lockable.java:176)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.trainModel(DeepLearning.java:491)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.buildModel(DeepLearning.java:311)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.computeImpl(DeepLearning.java:216)
    at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:173)
    at hex.deeplearning.DeepLearning$DeepLearningDriver.compute2(DeepLearning.java:209)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1349)
    at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
    at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
    at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
    at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
    at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

2 个答案:

答案 0 :(得分:1)

你需要一艘更大的船。

错误消息是&#34; heapUsedGC = 11482667352&#34;,它高于MEM_MAX。而不是给max_mem_size="12G"为什么不给它更多的64GB?或者建立一个不那么雄心勃勃的模型(更少的隐藏节点,更少的训练数据,等等)。

(显然,理想情况下,h2o不应该崩溃,而应该在它接近使用所有可用内存时优雅地中止。如果你能够与H2O共享你的数据/代码,它可能是值得打开关于他们的JIRA的错误报告。)

顺便说一下,我已经运行h2o 3.10.x.x作为Web服务器进程的后端大约9个月左右,在周末自动重启,并且没有一次崩溃。嗯,我做了 - 在我离开它运行3周后,它填满了所有的内存与越来越多的数据和模型。这就是为什么我将其切换为每周重启,并且只保留内存中我需要的模型。 (顺便说一句,这是在AWS实例上,4GB内存;由cron作业和bash命令重新启动。)

答案 1 :(得分:0)

您始终可以从https://www.h2o.ai/download下载最新的稳定版本(其中包含标有&#34;最新稳定版本和#34的链接;)。可以通过PyPI和Anaconda下载最新的稳定Python包。 CRAN提供最新的稳定R包装。

我同意Darren你可能需要更多内存 - 如果你的H2O集群中有足够的内存,H2O不应该崩溃。我们通常会说,为了训练模型,你应该拥有一个至少是磁盘训练集大小3-4倍的集群。但是,如果要构建模型网格或许多模型,则需要增加内存,以便有足够的RAM来存储所有模型。