我正在构建一个闪亮的应用程序,使用h2o
引擎对深度学习模型的数据进行评分。
我可以通过简单地将预测操作放入函数中来实现我的目标。在这个函数中,我通常会启动我的深度学习机,进行计算并停止它。不幸的是,这很慢。
我的目标是在用户从h2o
启动shiny app
时开始R-Server
,然后在用户关闭时确保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上没有任何后果
感谢任何帮助!
答案 0 :(得分:1)
当您收到错误“没有H2O实例正在运行”时,它确实意味着没有任何东西可以关闭,因此在您的情况下,这不是错误。当然,你应该通过登录你的R-Server来测试,当你得到错误检查h2o进程是否正在运行时:
ps -eaf | grep h2o
使用global.R
的方法对于Shiny app来说是完全合法的。
更新: 请注意,如果您运行多个Shiny应用程序,每个应用程序可能会启动自己的h2o实例,或者它们可能共享同一个实例并遇到冲突。因此,请事先测试一下,不要遇到意外的冲突/错误/
答案 1 :(得分:1)
您可以尝试使用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)
})