2

我正在使用从带有 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')
   
4

1 回答 1

6

MLflow 支持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_modelpredict使用您的模型:

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)
于 2021-01-25T16:41:54.947 回答