Это пятая статья в моей серии руководств по MLflow:

  1. Настроить MLflow в производстве
  2. MLflow: Основные функции ведения журнала
  3. Ведение журнала MLflow для TensorFlow
  4. Проекты MLflow
  5. Получение лучшей модели с помощью Python API для MLflow (вы здесь!)
  6. Обслуживание модели с помощью MLflow

В этом руководстве показано, как получить ранее зарегистрированную модель из выполнения MLflow.

Предположим, вы выполнили несколько испытаний следующего примера с разными параметрами:

mlflow run [email protected]:databricks/mlflow-example.git -P alpha=0.5

Теперь вы хотите получить сохраненную модель, которая лучше всего работала по определенным критериям. Вам необходимо импортировать модуль глубокого обучения библиотеки MLflow, к которой принадлежит ваша модель. В моем примере я использую модель Sklearn Kit, поэтому я импортирую mlflow.sklearn.

import mlflow.sklearn
import pandas as pd
import os

Затем нам нужно использовать Python API MLflow для запроса к серверу отслеживания MLflow. Мы используем функцию mlflow.search_runs (). Эта функция принимает filter_string, который действует как фильтр для запроса, и возвращает pandas.DataFrame запусков, где каждая метрика, параметр и тег раскрываются в свои собственные столбцы. именованные metrics. *, params. * и tags. * соответственно. Для прогонов, не имеющих определенной метрики, параметра или тега, их значение будет (NumPy) Nan, None или None соответственно.

df = mlflow.search_runs(filter_string="metrics.rmse < 1")

Когда у нас есть Pandas DataFrame прогонов, мы можем найти лучшую модель в соответствии с метрикой, используя функцию idxmin () или idxmax () в pandas.DataFrame, в зависимости от того, пытаемся ли мы минимизировать или максимизировать метрическая. Idxmin () возвращает индекс строки с минимальным значением метрики. Затем мы используем этот индекс в качестве входных данных для функции loc () для выборки всей строки. Наконец, [‘run_id’] даст нам run_id прогона, который дал лучшую модель.

run_id = df.loc[df['metrics.rmse'].idxmin()]['run_id']

Мы используем run_id, полученный на предыдущем шаге, для загрузки модели в среду выполнения Python. Для этого мы используем функцию load_model () модуля глубокого обучения (в нашем случае mlflow.sklearn).

model = mlflow.sklearn.load_model("runs:/" + run_id + "/model")

Наконец, мы делаем вывод из загруженной модели. Этот шаг очень специфичен для модели и структуры глубокого обучения и кардинально меняется от модели к модели.

wine_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "wine-quality.csv")
data = pd.read_csv(wine_path)
test = data.drop(["quality"], axis=1)
print(model.predict(test))

Весь код:

import mlflow.sklearn
import pandas as pd
import os
#Reading Pandas Dataframe from mlflow
df=mlflow.search_runs(filter_string="metrics.rmse < 1")
#Fetching Run ID for
run_id = df.loc[df['metrics.rmse'].idxmin()]['run_id']
#Load model
model = mlflow.sklearn.load_model("runs:/" + run_id + "/model")

#Inference
wine_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "wine-quality.csv")
data = pd.read_csv(wine_path)
test = data.drop(["quality"], axis=1)
print(model.predict(test))

В следующей статье мы рассмотрим, как обслуживать модель с помощью MLflow Serving.