【问题标题】:How to manage h2o instance in Shiny App correctly如何在 Shiny App 中正确管理 h2o 实例
【发布时间】:2018-06-05 03:51:23
【问题描述】:

我正在构建一个闪亮的应用程序,它使用h2o 引擎对深度学习模型的数据进行评分。

我可以通过简单地将我的预测操作放入函数中来实现我的目标。在这个函数中,我通常会启动我的深度学习机器,进行计算并停止它。不幸的是,这很慢。

我的目标是一开始就启动h2o,当用户从R-Server启动shiny app,然后确保h2o虚拟机在用户关闭浏览器时关闭。

我会要求建议最好的方法来做到这一点,因为我对这种取自 here 的方法并不完全满意,我只是将这些代码行放入 global.R 脚​​本中:

#global.R
library(h2o)
h2o.init(nthreads = 2)
onStop(function() {
  # shut down the h2o on app exit see 
  h2o.shutdown(prompt = FALSE)
})

似乎有时我的 h2o 实例之前已停止,因为我收到错误 Error in h2o.shutdown(prompt = FALSE) : There is no H2O instance running.

...我现在正在浏览器中对其进行测试,但我只是想确保不会对 R-Server 造成任何后果

感谢任何帮助!

【问题讨论】:

    标签: r shiny shiny-server h2o


    【解决方案1】:

    当您收到错误“没有运行 H2O 实例”时,这实际上意味着没有什么可以关闭,所以在您的情况下这不是错误。当然,您应该通过登录您的 R-Server 并在收到错误时检查 h2o 进程是否正在运行来进行测试:

    ps -eaf | grep h2o
    

    使用global.R 的方法对于 Shiny 应用来说是完全合法的。

    更新: 请注意,如果您运行多个 Shiny 应用程序,每个应用程序都可能启动自己的 h2o 实例,或者它们可能共享同一个实例并发生冲突。所以提前测试一下,不要遇到意外的冲突/错误/

    【讨论】:

    • 非常感谢。然后我需要在闪亮的内部使功能更“安全”
    【解决方案2】:

    您可以尝试使用 try-catch 来防止出现该错误消息。这就是我从本地机器初始化的方式:

      # Try to connect to existing cluster. If it does not exist then initialize.
      errorStatus <- tryCatch({
        h2o.init(startH2O = FALSE)
      }, error = function(err) {
        errorStatus <- err[1]$message
        message(paste0(errorStatus,"\n Initializing new H2O cluster..."))
        # Inititialize H2o cluster
        try({h2o.shutdown(prompt = FALSE)}, silent=TRUE)
        h2o.init(ip = 'localhost', port = 54321, nthreads= -1, max_mem_size = '4g')
        return(errorStatus)
      }) # END tryCatch
    
      # Shut down H2O cluster on app exit
      onStop(function() {
        try({h2o.shutdown(prompt = FALSE)}, silent=TRUE)
      })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2022-06-15
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多