微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 mlflow 提供用于评分的自定义 Python 模型

如何解决使用 mlflow 提供用于评分的自定义 Python 模型

我正在使用从带有 mlflow 的 ml 软件生成的 Python 代码来读取数据帧、执行一些表操作并输出数据帧。我能够成功运行代码并将新数据帧保存为工件。但是,我无法使用 log_model 记录模型,因为它不是我们训练和拟合的 lr 或分类器模型。我想为此记录一个模型,以便可以使用新数据为其提供服务并使用其余 API 进行部署

df = pd.read_csv(r"/home/xxxx.csv")


with mlflow.start_run():
    def getPrediction(row):
        
        perform_some_python_operaions 

        return [Status_prediction,Status_0_probability,Status_1_probability]
    columnValues = []
    for column in columns:
        columnValues.append([])

    for index,row in df.iterrows():
        results = getPrediction(row)
        for n in range(len(results)):
            columnValues[n].append(results[n])

    for n in range(len(columns)):
        df[columns[n]] = columnValues[n]

    df.to_csv('dataset_statistics.csv')
    mlflow.log_artifact('dataset_statistics.csv')
   

解决方法

MLflow 支持 custom models 的 mlflow.pyfunc 风格。您可以创建一个从 mlflow.pyfunc.PythonModel 继承的自定义类,它需要提供函数 predict 来执行预测,以及可选的 load_context 来加载必要的工件,就像这样(从文档中采用) :

class MyModel(mlflow.pyfunc.PythonModel):

    def load_context(self,context):
        # load your artifacts

    def predict(self,context,model_input):
        return my_predict(model_input.values)

您可以将模型所需的任何工件登录到 MLflow,必要时定义 Conda 环境等。
然后,您可以将 save_model 与您的类一起使用以保存您的实现,该实现可以使用 load_model 加载并使用您的模型执行 predict

mlflow.pyfunc.save_model(
        path=mlflow_pyfunc_model_path,python_model=MyModel(),artifacts=artifacts)

# Load the model in `python_function` format
loaded_model = mlflow.pyfunc.load_model(mlflow_pyfunc_model_path)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。