Это пятая статья в моей серии руководств по MLflow:
- Настроить MLflow в производстве
- MLflow: Основные функции ведения журнала
- Ведение журнала MLflow для TensorFlow
- Проекты MLflow
- Получение лучшей модели с помощью Python API для MLflow (вы здесь!)
- Обслуживание модели с помощью 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.