如何从 python 中的 mlflow 下载工件

How to download artifacts from mlflow in python

我正在创建一个 mlflow 实验,它记录逻辑回归模型以及一个指标和一个工件。

import mlflow
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_recall_fscore_support

with mlflow.start_run(run_name=run_name, experiment_id=experiment_id):

        logreg = LogisticRegression()
        logreg.fit(x_train, y_train)
        print('training over', flush=True)
        y_pred = logreg.predict(x_test)
        mlflow.sklearn.log_model(logreg, "model")
   
        mlflow.log_metric("f1", precision_recall_fscore_support(y_test, y_pred, average='weighted')[2])
        mlflow.log_artifact(x_train.to_csv('train.csv')

一些数据 (x_train, y_train, x_test, y_test)

是否有任何方法可以访问此 run_name 的特定 experiment_id 的工件并阅读 train.csv 并阅读 model

有一个 download_artifacts function 允许您访问记录的工件:

local_path = client.download_artifacts(run_id, "train.csv", local_dir)

可以使用相同的函数下载模型工件(应该有名为 model/model.pkl 的对象(用于 scikit-learn 或其他),或者您可以通过 运行 加载模型:

loaded_model = mlflow.pyfunc.load_model(f"runs:/{run_id}/model")

我无法 python api 使用 mlflow 实例,该实例使用文件系统存储工件(从另一台机器访问,在本地它应该可以正常工作)。此外,REST api 没有任何帮助,因为没有下载工件的方法。但是我能够使用 HTML 来让它工作,这里的示例将提供的 运行 id 的工件 csv 文件加载到 pandas 数据帧中:

import pandas as pd
import urllib.request
import io

with urllib.request.urlopen('http://server:5000/get-artifact?path=dataframe.csv&run_uuid=75hf8234h9dj29jr943909') as f:
    file = pd.read_csv(io.BytesIO(f.read()))