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


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

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

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

MLflow 3 представляет значительные улучшения моделей MLflow, введя новый выделенный LoggedModel объект с собственными метаданными, такими как метрики и параметры. Дополнительные сведения см. в разделе "Отслеживание и сравнение моделей" с помощью моделей MLflow Logged.

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

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

Внимание

Anaconda Inc. обновил условия обслуживания для каналов anaconda.org. В соответствии с новыми условиями предоставления услуг вам может потребоваться коммерческая лицензия, если вы полагаетесь на пакетирование и распространение Anaconda. Дополнительные сведения см. в статье Часто задаваемые вопросы о коммерческой версии Anaconda. Использование любых каналов Anaconda регулируется условиями предоставления услуг Anaconda.

Модели MLflow, зарегистрированные до версии 1.18 (Databricks Runtime 8.3 ML или более ранней версии), по умолчанию регистрировались с помощью канала conda defaults (https://repo.anaconda.com/pkgs/) в качестве зависимости. Из-за этого изменения условий предоставления услуг компания Databricks прекратила использовать канал defaults для моделей, зарегистрированных с помощью MLflow 1.18 и более поздних версий. По умолчанию теперь регистрируется канал conda-forge, который указывает на управляемый сообществом канал 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().

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

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

Команды API

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

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

  • путь модели (например models:/{model_id}) (только MLflow 3 )
  • путь, относительный для исполнения (например, 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}).

Для полного списка параметров загрузки моделей MLflow см. в разделе документации MLflow «Артефакты».

Для моделей 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())

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

Чтобы правильно загрузить модель, необходимо убедиться, что зависимости модели загружены в ноутбук с правильными версиями. В 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>. При загрузке модели в качестве определяемой пользователем функции (UDF) PySpark укажите env_manager="virtualenv" в вызове mlflow.pyfunc.spark_udf. Это восстанавливает зависимости модели в контексте PySpark UDF и не влияет на окружающую среду.

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

%pip install "mlflow>=1.25.0"

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

Узнайте, как регистрировать зависимости модели и пользовательские артефакты для обслуживания моделей:

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

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

  1. Перейдите на экран "Запуски" для поиска запуска, создавшего модель. (См. пункт "Просмотр эксперимента в записной книжке", чтобы отобразить экран "Запуски".)
  2. Прокрутите страницу до раздела "Артефакты ".
  3. Кликните на имя зарегистрированной модели. Справа откроется панель с кодом, который можно использовать для загрузки зарегистрированной модели и построения прогнозов в кадрах данных Spark или pandas.

Фрагменты кода панели артефактов

Примеры

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

Регистрация моделей в реестре моделей

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

При регистрации моделей, созданных с использованием MLflow 3 в реестре моделей каталога Unity, можно просматривать информацию, такую как параметры и метрики, в одном месте для всех экспериментов и рабочих областей. Дополнительные сведения см. в разделе "Усовершенствования реестра моделей" с помощью MLflow 3.

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

MLflow 3

mlflow.register_model("models:/{model_id}", "{registered_model_name}")

MLflow 2.x

mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}")

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

Чтобы сохранить модель локально, воспользуйтесь mlflow.<model-type>.save_model(model, modelpath). modelpath должен быть путём к томам каталога Unity . Например, если вы используете расположение томов каталога 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)

Для моделей MLlib используйте конвейеры машинного обучения.

Скачать артефакты модели

Можно скачать артефакты зарегистрированной модели (например, файлы модели, графики и метрики) с помощью различных 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>

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

Заметка

Перед развертыванием модели полезно убедиться, что модель может обслуживаться. См. документацию по MLflow по использованию mlflow.models.predictдля проверки моделей перед развертыванием.

Используйте службу Mosaic AI Model Serving для размещения моделей машинного обучения, зарегистрированных в реестре моделей Unity Catalog, в качестве REST-сервисов. Эти конечные точки обновляются автоматически на основе доступности версий модели.