在没有H2O集群的情况下加载并运行h2o MOJO模型

问题描述 投票:0回答:1

我在 Python 上的 h2o 中生成了几个模型。我使用以下代码将它们保存为 mojo 文件(.zip 和 h2o-genmodel.jar):

H2O_Model.download_mojo(path=Model_Path, get_genmodel_jar=True)

在 zip 文件内,有 2 个文件夹(“domains”和“experimental”)和一个 model.ini 文件,其中包含有关模型的信息。

我需要在旧的树莓派 2 中运行这些模型,以对 CSV 文件中提供的一些数据进行预测。我可以通过使用以下代码在 h2o 集群内运行模型来做到这一点:

#load H2O Model
h2o.init()

# Download the MOJO
mojo_path = model_mojo
imported_model = h2o.import_mojo(mojo_path)

# Run Model
new_observations = h2o.H2OFrame(df_prever)
predictions = imported_model.predict(new_observations)

# Save Results
predictions = predictions.as_data_frame(predictions)
data_results = pd.concat([df_prever, predictions], axis=1)
data_results = data_results.rename(columns={"predict" : "Predicted_Values"}) 
data_results = data_results.infer_objects()
data_results.to_csv("./Data_Results.csv", sep=delimiter, decimal=decimal_sep, index=False)

我最终得到了包含预测结果的 CSV。

问题是集群在 Raspberry Pi 2 中启动需要很长时间。我读到可以在没有集群的情况下运行模型,但我无法做到。

我尝试在不启动集群的情况下运行模型,但没有成功。我什至尝试让集群在启动时打开,但它不起作用,每次我运行脚本进行预测时,集群都会在脚本完成时启动和结束。

有人可以帮我吗?我的模型已排序;我有深度学习、XGboost、StackedEnsemble、GBM 等。我有回归、多类和二元分类模型,因此非常感谢灵活的方法来处理不同的模型。

下面是我用 h2o 集群加载模型的完整代码。

import pandas as pd
from pandas import read_csv
import h2o

# User defined Variables

# Data file to make predictions
csv_file = "Data.csv"

# CSV parameters
delimiter=";"
decimal_sep=","
encoding="ascii"

# Model zip file
model_mojo="DeepLearning_grid_1_AutoML_1_20231116_204416_model_581.zip"

# Load data
df_prever = read_csv(filepath_or_buffer = csv_file, sep=delimiter, decimal=decimal_sep, encoding=encoding)
df_prever = df_prever.reset_index(drop=True)

#load H2O Model
h2o.init()

# Import the MOJO file
mojo_path = model_mojo
imported_model = h2o.import_mojo(mojo_path)

# Run Model
new_observations = h2o.H2OFrame(df_prever)
predictions = imported_model.predict(new_observations)

# Save Results
predictions = predictions.as_data_frame(predictions)
data_results = pd.concat([df_prever, predictions], axis=1)
data_results = data_results.rename(columns={"predict" : "Predicted_Values"}) 
data_results = data_results.infer_objects()
data_results.to_csv("./Data_Results.csv", sep=delimiter, decimal=decimal_sep, index=False)

# Close H2O
h2o.cluster().shutdown()

我尝试使用 h2o-genmodel.jar 和 zip 文件在 Java 中调用模型(可能我做错了),但它要求提供我没有的“主”文件。我试图让一个集群打开。 我阅读了以下文档:

h2o-docs/生产化 h2o-docs/mojo-功能 h2o-genmodel/javadoc 教程/mojo-资源 示例/h2o_mojo

python java machine-learning data-modeling h2o.ai
1个回答
0
投票

您应该使用的正确链接在这里:https://docs.h2o.ai/h2o/latest-stable/h2o-docs/mojo-quickstart.html

请按照它生成您的模型并将其保存为mojo。您将有两个文件:yourModelMojoXXX.zip 和 h2o.genmodel.jar。

不要遵循链接中的java步骤,它们只教您如何一次生成一行数据的预测,这不是您想要的。相反,请点击此链接:https://github.com/h2oai/h2o-3/issues/15935,然后按照问题中列出的步骤进行操作。这应该允许您使用输入 csv 文件调用 mojo 模型,并在 csv 文件中输出预测,而无需运行 h2o-3 集群。

我希望这对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.