【问题标题】:How to log custom models in mlflow inside artifacts of a run?如何在运行的工件内的 mlflow 中记录自定义模型?
【发布时间】:2020-12-25 23:51:06
【问题描述】:

我已使用 MLProject 将我的模型存储在 Github 中,以便其他人可以以各种不同的方式运行它。现在我想将运行创建的模型记录为工件,以便用户可以使用 MLModel 加载它们。由于我的模型是自定义的,因此这不像 spark 之类的口味那么简单。 我首先在本地保存并加载了模型,以确保我的环境、模型和工件代码正常工作。 现在我想将模型的登录作为从 GitHub 运行的 MLProject 的一部分。 由于我所知道的文档中没有示例,因此我想寻求帮助并建议这可能是对文档或示例的一个很好的补充。

在代码方面,我在最后的 mlrun 中写了以下内容:

模型取决于项目运行中指定的参数

 ETS_Exogen = ETS_Exogen(params=res.x, before=before,after=after)

使用先前定义的模型、环境和工件记录模型

mlflow.pyfunc.log_model(python_model=ETS_Exogen, conda_env=conda_env,artifacts=artifacts)

mlflow.pyfunc.log_model 是否会自动将模型记录到运行的工件中,还是我需要定义 artifact_path? 我应该使用 mlflow.pyfunc.save_model 吗? 我定义了工件路径,以便从 GitHub 存储库中收集它们,如下所示:

artifacts = { "exogen_variables":os.path.join(os.path.dirname(os.path.abspath(file)),"exogen_variables.csv") }

这是正确的吗? 自定义模型文档链接: https://mlflow.org/docs/latest/python_api/mlflow.pyfunc.html#pyfunc-create-custom-workflows

【问题讨论】:

    标签: python mlflow


    【解决方案1】:

    记录模型需要路径,标准是将其存储在文件夹模型下的工件中。命令如下:

    mlflow.pyfunc.log_model(artifact_path="model",python_model=ETS_Exogen, conda_env=conda_env)

    以下是如何从 http 服务器在模型中添加数据。不要使用工件,而是直接在上下文中使用 Pandas 加载它。

    def load_context(self, context):
        import numpy as np
        import pandas as pd #data wrangeling
        url_to_exogen_raw = 'https://raw.githubusercontent.com/MatthiasHerp/ETS_Ex_BA_MLFlow/master/exogen_variables.csv'
        self.exogen = pd.read_csv(url_to_exogen_raw, index_col='date')
    

    【讨论】:

    • 您能否扩展您的答案并解释您的意思 “不要使用工件,而是直接在上下文中使用 Pandas 加载它。”?我不完全确定如何生成这些工件以及这些工件是从哪里加载的?做工件,例如预训练的权重需要预先存储在一些外部存储上吗?
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2021-10-22
    • 2021-08-19
    • 2022-06-20
    • 2022-06-27
    相关资源
    最近更新 更多