gpt4 book ai didi

R 目标与 H2O

转载 作者:行者123 更新时间:2023-12-05 04:49:28 24 4
gpt4 key购买 nike

我使用 targets作为 ML 项目的流水线工具 H2O .在这里使用 H2O 的主要独特之处在于它创建了一个新的“集群”(据我所知,基本上是一个新的本地进程/服务器,它通过 Rest API 进行通信)。

我遇到的问题有两个方面。

  1. 如何以智能方式在目标框架内停止/操作集群
  2. 如何在目标框架内保存和加载数据/模型

MWE

我想出的最小工作示例如下所示(即 _targets.R 文件):

library(targets)
library(h2o)

# start h20 cluster once _targets.R gets evaluated
h2o.init(nthreads = 2, max_mem_size = "2G", port = 54322, name = "TESTCLUSTER")

create_dataset_h2o <- function() {
# connect to the h2o cluster
h2o.init(ip = "localhost", port = 54322, name = "TESTCLUSTER", startH2O = FALSE)
# convert the data to h2o dataframe
as.h2o(iris)
}
train_model <- function(hex_data) {
# connect to the h2o cluster
h2o.init(ip = "localhost", port = 54322, name = "TESTCLUSTER", startH2O = FALSE)

h2o.randomForest(x = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width"),
y = c("Species"),
training_frame = hex_data,
model_id = "our.rf",
seed = 1234)
}
predict_model <- function(model, hex_data) {
# connect to the h2o cluster
h2o.init(ip = "localhost", port = 54322, name = "TESTCLUSTER", startH2O = FALSE)
h2o.predict(model, newdata = hex_data)
}

list(
tar_target(data, create_dataset_h2o()),
tar_target(model, train_model(data), format = "qs"),
tar_target(predict, predict_model(model, data), format = "qs")
)

这有点管用,但面临着我在上面和下面提到的两个问题......

广告 1 - 停止集群

通常我会在我的脚本末尾输出一个 h2o::h2o.shutdown(prompt = FALSE) ,但这在这种情况下不起作用。或者,我提出了一个始终运行的新目标。

# in _targets.R in the final list
tar_target(END, h2o.shutdown(prompt = FALSE), cue = tar_cue(mode = "always"))

这在我运行 tar_make() 时有效,但在我使用 tar_visnetwork() 时无效。

另一种选择是使用。

# after the h2o.init(...) call inside _targets.R
on.exit(h2o.shutdown(prompt = FALSE), add = TRUE)

我想出的另一种选择是在目标之外处理服务器并且只连接到它。但我觉得这可能会破坏目标工作流程......

你有其他想法如何处理这个吗?

广告 2 - 保存数据集和模型

MWE 中的代码没有以正确的格式保存目标 modelpredict 的数据(format = "qs" ).有时(我认为当集群重新启动时),数据“无效”并且 h2o 抛出错误。 R session 中 h2o 格式的数据是指向 h2o 数据帧的指针(另请参见 docs )。

对于类似地在 R 之外存储模型的 keras,有一个选项 format = "keras" ,它在幕后调用 keras::save_model_hdf5()。同样,H2O 需要 h2o::h2o.exportFile()h2o::h2o.importFile() 用于数据集和 h2o::h2o.saveModel( )h2o::h2o.loadModel() 用于模型(另见 docs )。

有没有办法为 tar_targets 创建额外的格式,或者我是否需要将数据写入文件,然后返回文件?缺点是这个文件在 _targets 文件夹系统之外,如果我没记错的话。

最佳答案

广告 1

我建议在单独的脚本中处理管道外的 H2O 集群。这样,tar_visnetwork()不会启动或停止集群,您可以更清楚地将软件工程与数据分析分开。

# run_pipeline.R
start_h2o_cluster(port = ...)
on.exit(stop_h2o_cluster(port = ...))
targets::tar_make_clustermq(workers = 4)

广告 2

听起来 H2O 对象是 not exportable .目前,您需要手动保存这些文件、确定路径并写入 format = "file"tar_target() .我愿意考虑基于 H20 的格式。 h2o.exportFile()是否以某种方式涵盖了所有对象? , h2o.importFile() , h2o::h2o.saveModel() , 和 h2o::h2o.loadModel() ,还是有更多种类的对象具有不同的序列化功能?并且h2o有实用程序在内存中执行此(反)序列化,如 serialize_model()/unserialize_model()keras

关于R 目标与 H2O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67584018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com