如何在 MLFlow 模型上保存更多元数据
How can I save more metadata on an MLFlow model
我正在尝试将模型保存到 MLFlow,但由于我有自定义预测管道来检索数据,因此我需要将额外的元数据保存到模型中。
我尝试使用我的自定义签名 class,它正确地完成了工作并将带有额外元数据的模型保存在 MLModel 文件(YAML 格式)中。但是当想从MLFlow注册表加载模型时,签名不容易访问。
mlflow.sklearn.log_model(model, "model", signature = signature)
我还尝试在 log_model 函数中保存一个额外的字典,但它保存在 conda.yaml 文件中:
mlflow.sklearn.log_model(model, "model", {"metadata1":"value1", "metadata2":"value2"})
我应该自己做口味吗?还是我自己的Model继承?我已经看到 here PyFuncModel 收到了一些元数据 class 和一个解决这个问题的实现,但我不知道我应该在实验脚本上将我自己的实现传递给 PyFuncModel 的哪里。这是一个最小的例子:
import mlflow
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
metadata_dic = {"metadata1": "value1",
"metadata2": "value2"}
X = np.array([[-2, -1, 0, 1, 2, 1],[-2, -1, 0, 1, 2, 1]]).T
y = np.array([0, 0, 1, 1, 1, 0])
X = pd.DataFrame(X, columns=["X1", "X2"])
y = pd.DataFrame(y, columns=["y"])
model = LogisticRegression()
model.fit(X, y)
mlflow.sklearn.log_model(model, "model")
最后,我制作了一个包含所有元数据的 class 并将其保存为模型参数:
model = LogisticRegression()
model.fit(X, y)
model.metadata = ModelMetadata(**metadata_dic)
mlflow.sklearn.log_model(model, "model")
这里我丢掉了自定义的predict
流程,但是看了MLFlow
文档后不是很清楚如何进行。
如果有人找到好的方法,将不胜感激。
PythonModel
在执行推理时可以使用的工件集合。 PythonModelContext 对象由 save_model()
和 log_model()
持久性方法隐式创建,使用这些方法的 artifacts 参数指定的内容。
propertyartifacts
A dictionary containing <name, artifact_path> entries, where
artifact_path is an absolute filesystem path to the artifact.
我正在尝试将模型保存到 MLFlow,但由于我有自定义预测管道来检索数据,因此我需要将额外的元数据保存到模型中。
我尝试使用我的自定义签名 class,它正确地完成了工作并将带有额外元数据的模型保存在 MLModel 文件(YAML 格式)中。但是当想从MLFlow注册表加载模型时,签名不容易访问。
mlflow.sklearn.log_model(model, "model", signature = signature)
我还尝试在 log_model 函数中保存一个额外的字典,但它保存在 conda.yaml 文件中:
mlflow.sklearn.log_model(model, "model", {"metadata1":"value1", "metadata2":"value2"})
我应该自己做口味吗?还是我自己的Model继承?我已经看到 here PyFuncModel 收到了一些元数据 class 和一个解决这个问题的实现,但我不知道我应该在实验脚本上将我自己的实现传递给 PyFuncModel 的哪里。这是一个最小的例子:
import mlflow
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
metadata_dic = {"metadata1": "value1",
"metadata2": "value2"}
X = np.array([[-2, -1, 0, 1, 2, 1],[-2, -1, 0, 1, 2, 1]]).T
y = np.array([0, 0, 1, 1, 1, 0])
X = pd.DataFrame(X, columns=["X1", "X2"])
y = pd.DataFrame(y, columns=["y"])
model = LogisticRegression()
model.fit(X, y)
mlflow.sklearn.log_model(model, "model")
最后,我制作了一个包含所有元数据的 class 并将其保存为模型参数:
model = LogisticRegression()
model.fit(X, y)
model.metadata = ModelMetadata(**metadata_dic)
mlflow.sklearn.log_model(model, "model")
这里我丢掉了自定义的predict
流程,但是看了MLFlow
文档后不是很清楚如何进行。
如果有人找到好的方法,将不胜感激。
PythonModel
在执行推理时可以使用的工件集合。 PythonModelContext 对象由 save_model()
和 log_model()
持久性方法隐式创建,使用这些方法的 artifacts 参数指定的内容。
propertyartifacts
A dictionary containing <name, artifact_path> entries, where artifact_path is an absolute filesystem path to the artifact.