Поделиться через


Логирование, загрузка и регистрация моделей MLflow

Модель MLflow — это стандартный формат для упаковки моделей машинного обучения, который можно использовать в различных нижестоящих инструментах, например для вывода пакетов на Apache Spark или при обслуживании в режиме реального времени через REST API. Формат определяет соглашение, позволяющее сохранить модель в различных вариантах (python-function, pytorch, sklearn и т. д.), которые могут быть поняты различными платформами обслуживания и предсказания моделей.

Сведения о том, как регистрировать и оценить модель потоковой передачи, см. в статье "Как сохранить и загрузить модель потоковой передачи".

Запись и загрузка моделей

При регистрации модели MLflow автоматически регистрирует файлы requirements.txt и conda.yaml. Эти файлы можно использовать для повторного создания среды разработки модели и переустановки зависимостей с помощью virtualenv (рекомендуется) или conda.

Внимание

Корпорация Anaconda Inc. обновила свои условия предоставления услуг для каналов anaconda.org. Based on the new terms of service you may require a commercial license if you rely on Anaconda’s packaging and distribution. Дополнительные сведения см. в часто задаваемых вопросах о коммерческом выпуске Anaconda. Использование любых каналов Anaconda регулируется условиями предоставления услуг Anaconda.

Модели MLflow, зарегистрированные до выхода версии 1.18 (Databricks Runtime 8.3 ML или более ранней версии), по умолчанию регистрировались с каналом conda defaults (https://repo.anaconda.com/pkgs/) в качестве зависимости. Из-за этого изменения условий предоставления услуг компания Databricks прекратила использовать канал defaults для моделей, зарегистрированных с помощью MLflow 1.18 и более поздних версий. The default channel logged is now conda-forge, which points at the community managed https://conda-forge.org/.

Если вы зарегистрировали модель до выхода MLflow версии 1.18 и не исключили канал defaults из среды conda для модели, эта модель может иметь зависимость от канала defaults, которая, возможно, не предполагалась. Чтобы узнать, имеет ли модель эту зависимость, можно проверить значение channel в файле conda.yaml, который упакован с зарегистрированной моделью. Например, conda.yaml модели с зависимостью от канала defaults может выглядеть так:

channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
    - mlflow
    - scikit-learn==0.23.2
    - cloudpickle==1.6.0
      name: mlflow-env

Так как Databricks не может определить, разрешено ли вам использовать репозиторий Anaconda для взаимодействия с моделями, Databricks не требует от пользователей вносить какие-либо изменения. Если вы используете репозиторий Anaconda.com с помощью Databricks в соответствии с условиями Anaconda, вам не нужно предпринимать никаких действий.

Если вы хотите изменить канал, используемый в среде модели, можно повторно зарегистрировать модель в реестре моделей с новым conda.yaml. Это можно сделать, указав канал в параметре conda_envlog_model().

Дополнительные сведения об API log_model() см. в документации по MLflow для варианта модели, с которым вы работаете, например log_model для scikit-learn.

Дополнительные сведения о файлах conda.yaml см. в документации по MLflow.

Команды API

Чтобы зарегистрировать модель на сервере отслеживания MLflow, используйте mlflow.<model-type>.log_model(model, ...).

Чтобы загрузить ранее зарегистрированную модель для вывода или дальнейшей разработки, используйте mlflow.<model-type>.load_model(modelpath), где modelpath является одним из следующих вариантов:

  • a run-relative path (such as runs:/{run_id}/{model-path})
  • Путь к томам каталога Unity (например, dbfs:/Volumes/catalog_name/schema_name/volume_name/{path_to_artifact_root}/{model_path})
  • Путь к хранилищу артефактов под управлением MLflow, начиная с dbfs:/databricks/mlflow-tracking/
  • путь к зарегистрированной модели (например, models:/{model_name}/{model_stage}).

For a complete list of options for loading MLflow models, see Referencing Artifacts in the MLflow documentation.

Для моделей MLflow Python можно использовать mlflow.pyfunc.load_model() для загрузки модели в качестве универсальной функции Python.

Чтобы загрузить модель и оценить точки данных, можно использовать следующий фрагмент кода.

model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)

В качестве альтернативы можно экспортировать модель в качестве Apache Spark UDF для скоринга в кластере Spark, либо в виде пакетного задания, либо в виде задания Spark Streaming в реальном времени.

# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())

Зависимости логической модели

To accurately load a model, you should make sure the model dependencies are loaded with the correct versions into the notebook environment. В Databricks Runtime 10.5 ML и более поздних версий MLflow предупреждает о несоответствии между текущей средой и зависимостями модели.

Дополнительные функции, упрощающие восстановление зависимостей модели, включены в Databricks Runtime 11.0 ML и более поздних версий. В Databricks Runtime 11.0 ML и более поздних версиях для типов моделей pyfunc можно вызывать mlflow.pyfunc.get_model_dependencies, чтобы получить и загрузить зависимости модели. Эта функция возвращает путь к файлу зависимостей, который затем можно установить с помощью %pip install <file-path>. When you load a model as a PySpark UDF, specify env_manager="virtualenv" in the mlflow.pyfunc.spark_udf call. Это восстанавливает зависимости модели в контексте PySpark UDF и не влияет на окружающую среду.

Эту функцию также можно использовать в Databricks Runtime 10.5 или более ранних версий, вручную установив MLflow версии 1.25.0 или выше:

%pip install "mlflow>=1.25.0"

Дополнительные сведения о том, как регистрировать зависимости модели (Python и не-Python) и артефакты модели, см. в «Журнал зависимостей модели».

Learn how to log model dependencies and custom artifacts for model serving:

Автоматически созданные фрагменты кода в пользовательском интерфейсе MLflow

При регистрации модели в записной книжке Azure Databricks Azure Databricks автоматически создает фрагменты кода, которые можно копировать и использовать для загрузки и запуска модели. Чтобы просмотреть эти фрагменты кода, сделайте следующее:

  1. Navigate to the Runs screen for the run that generated the model. (See View notebook experiment for how to display the Runs screen.)
  2. Прокрутите до раздела Артефакты.
  3. Кликните на имя зарегистрированной модели. Справа откроется панель с кодом, который можно использовать для загрузки зарегистрированной модели и построения прогнозов в кадрах данных Spark или pandas.

Панель артефактов: фрагменты кода

Примеры

Примеры моделей ведения журнала см. в примерах, приведенных в разделе Примеры отслеживания пробных запусков машинного обучения.

Зарегистрируйте модели в реестре моделей

Вы можете зарегистрировать модели в реестре моделей MLflow, централизованное хранилище моделей, которое предоставляет пользовательский интерфейс и набор API для управления полным жизненным циклом моделей MLflow. Инструкции по управлению моделями в каталоге Databricks Unity см. в статье Управление жизненным циклом модели в каталоге Unity. Сведения об использовании реестра моделей рабочей области см. в разделе "Управление жизненным циклом модели" с помощью реестра моделей рабочей области (устаревшая версия).

Для регистрации модели с помощью API, воспользуйтесь mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}").

Сохраняйте модели в томах каталога Unity

Чтобы сохранить модель локально, воспользуйтесь mlflow.<model-type>.save_model(model, modelpath). modelpath must be a Unity Catalog volumes path. Например, если вы используете расположение томов каталога Unity dbfs:/Volumes/catalog_name/schema_name/volume_name/my_project_models для хранения вашей проектной работы, вы должны использовать путь модели /dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models:

modelpath = "/dbfs/Volumes/catalog_name/schema_name/volume_name/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)

For MLlib models, use ML Pipelines.

Download model artifacts

Можно скачать артефакты зарегистрированной модели (например, файлы модели, графики и метрики) с помощью различных API.

Пример API Python:

mlflow.set_registry_uri("databricks-uc")
mlflow.artifacts.download_artifacts(f"models:/{model_name}/{model_version}")

Пример API Java:

MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);

// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);

Пример команды CLI:

mlflow artifacts download --artifact-uri models:/<name>/<version|stage>

Развертывание моделей для обслуживания в сети

Заметка

Перед развертыванием модели полезно убедиться, что модель может обслуживаться. See the MLflow documentation for how you can use mlflow.models.predict to validate models before deployment.

Use Mosaic AI Model Serving to host machine learning models registered in Unity Catalog model registry as REST endpoints. Эти конечные точки обновляются автоматически на основе доступности версий модели.