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

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

Журналы и загрузка моделей

При регистрации модели 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().

Дополнительные сведения об 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 является одним из следующих:

  • путь, относительный для выполнения (например, runs:/{run_id}/{model-path})
  • путь DBFS
  • путь к зарегистрированной модели (например, 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 в реальном времени.

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

Эту функцию также можно использовать в 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.

Artifact panel code snippets

Примеры

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

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

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

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

Сохранение моделей в DBFS

Чтобы сохранить модель локально, воспользуйтесь mlflow.<model-type>.save_model(model, modelpath). modelpath должен быть путем DBFS. Например, если для хранения проекта используется расположение DBFS dbfs:/my_project_models, необходимо использовать путь модели /dbfs/my_project_models:

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

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

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

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

Пример API Python:

from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository

model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")

Пример 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>

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

Службу моделей можно использовать для размещения моделей машинного обучения из реестра моделей в качестве конечных точек REST. Эти конечные точки обновляются автоматически в зависимости от доступности версий модели и их этапов.

Вы также можете развернуть модель на сторонних платформах обслуживания с помощью встроенных средств развертывания MLflow. См. следующий пример.