【问题标题】:How can I save more metadata on an MLFlow model如何在 MLFlow 模型上保存更多元数据
【发布时间】:2022-01-07 04:15:55
【问题描述】:

我正在尝试将模型保存到 MLFlow,但由于我有一个自定义预测管道来检索数据,因此我需要将额外的元数据保存到模型中。

我尝试使用我的自定义签名类,它可以正确完成工作并将模型与额外的元数据一起保存在 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"})

我应该自己做口味吗?还是我自己的模型继承?我已经看到here PyFuncModel 收到了一些元数据类和一个实现来解决这个问题,但我不知道我应该在哪里将我自己的实现传递给实验脚本上的 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")

【问题讨论】:

    标签: python scikit-learn mlflow mlops


    【解决方案1】:

    PythonModel 在执行推理时可以使用的工件集合。 PythonModelContext 对象由 save_model()log_model() 持久化方法隐式创建,使用这些方法的 artifacts 参数指定的内容。

    属性工件

    包含 条目的字典,其中 artifact_path 是工件的绝对文件系统路径。

    【讨论】:

    • 我确实检查过,但我不清楚我应该在哪里实例化 PythonModelContext,因为我正在使用 sklearn 风格。你能用我写的最小例子给出一些代码吗?提前致谢。
    【解决方案2】:

    最后,我创建了一个包含所有元数据的类并将其保存为模型参数:

    model = LogisticRegression()
    model.fit(X, y)
    model.metadata = ModelMetadata(**metadata_dic)
    mlflow.sklearn.log_model(model, "model")
    

    这里我丢失了可自定义的predict 进程,但是在阅读了MLFlow 文档后不太清楚如何进行。

    如果有人找到好的方法,将不胜感激。

    【讨论】:

      猜你喜欢
      • 2020-07-30
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 2016-06-13
      • 2012-05-06
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多