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


Рекомендации по развертыванию моделей MLflow

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения Azure CLI версии 2 (текущее)

В этой статье вы узнаете о развертывании моделей MLflow для Машинное обучение Azure для вывода в режиме реального времени и пакетной обработки, а также о различных средствах, которые можно использовать для управления развертываниями.

Развертывание без кода

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

Для развертывания без кода Машинное обучение Azure:

  • Убедитесь, что все зависимости пакета, указанные в модели MLflow, удовлетворены.
  • Предоставляет базовый образ MLflow или курированную среду, содержащую следующие элементы:
    • Пакеты, необходимые для выполнения вывода Машинное обучение Azure, включая mlflow-skinny.
    • Скрипт оценки для выполнения вывода.

Совет

Рабочие области без доступа к общедоступной сети. Перед развертыванием моделей MLflow в сетевых конечных точках без подключения к исходящим данным необходимо упаковать модели (предварительная версия). Используя упаковку моделей, можно избежать необходимости подключения к Интернету, Машинное обучение Azure в противном случае потребуется динамически установить необходимые пакеты Python для моделей MLflow.

Пакеты и зависимости

Машинное обучение Azure автоматически создает среды для выполнения вывода в моделях MLflow. Чтобы создать среды, Машинное обучение Azure считывает зависимости conda, указанные в модели MLflow, и добавляет все пакеты, необходимые для запуска сервера вывода. Эти дополнительные пакеты зависят от типа развертывания.

В следующем примере файла conda.yaml показаны зависимости conda, указанные в модели MLflow.

channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
  - mlflow==2.7.1
  - cloudpickle==1.6.0
  - dataclasses==0.6
  - lz4==4.0.0
  - numpy==1.23.5
  - packaging==23.0
  - psutil==5.9.0
  - pyyaml==6.0
  - scikit-learn==1.1.2
  - scipy==1.10.1
  - uuid==1.30
name: mlflow-env

Внимание

MLflow автоматически обнаруживает пакеты при журнале модели и закрепляет версии пакетов в зависимости conda модели. Это автоматическое обнаружение пакетов может не отражать ваши намерения или требования. Кроме того, можно записывать модели с помощью пользовательской подписи, среды или примеров.

Модели с сигнатурами

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

Сигнатуру модели MLflow можно проверить, открыв файл MLmodel. Дополнительные сведения о том, как подписи работают в MLflow, см. в разделе "Подписи" в MLflow.

В следующем примере MLmodel-файл выделяется signature.

artifact_path: model
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.10.11
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
  inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
    {"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
    "s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
    "double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
    {"name": "s6", "type": "double"}]'
  outputs: '[{"type": "double"}]'

Совет

Подписи в моделях MLflow рекомендуется использовать, так как они предоставляют удобный способ обнаружения проблем совместимости данных. Дополнительные сведения о том, как регистрировать модели с сигнатурами, см. в разделе "Модели ведения журнала" с помощью настраиваемой подписи, среды или примеров.

Развертывание на встроенном сервере MLflow и развертывании в Машинное обучение Azure сервере вывода

Разработчики моделей могут использовать встроенные средства развертывания MLflow для локального тестирования моделей. Например, можно запустить локальный экземпляр модели, зарегистрированной в реестре серверов MLflow, с помощью mlflow models serve или интерфейса командной строки mlflow models predictMLflow. Дополнительные сведения о встроенных средствах развертывания MLflow см . в документации по MLflow встроенным средствам развертывания.

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

  • Машинное обучение Azure сетевые конечные точки, аналогичные встроенному серверу MLflow, предоставляют масштабируемый, синхронный и упрощенный способ выполнения моделей для вывода.

  • Машинное обучение Azure конечные точки пакетной службы могут выполнять асинхронное выводение по длительным процессам вывода, которые могут масштабироваться до больших объемов данных. Сервер MLflow не имеет этой возможности, хотя вы можете достичь аналогичной возможности с помощью заданий Spark. Дополнительные сведения о конечных точках пакетной службы и моделях MLflow см. в статье Об использовании моделей MLflow в пакетных развертываниях.

Форматы входных данных

В следующей таблице показаны типы входных данных, поддерживаемые встроенным сервером MLflow, и Машинное обучение Azure сетевые конечные точки.

Тип Ввода Встроенный сервер MLflow Машинное обучение Azure конечная точка в Сети
Кадры данных pandas, сериализованные в формате JSON, в ориентации разделения
Кадры данных pandas, сериализованные в формате JSON, в ориентации записей Устарело
Кадры данных pandas, сериализованные в формате CSV Используйте пакетное выводение. Дополнительные сведения см. в статье "Развертывание моделей MLflow в конечных точках пакетной службы".
Входные данные TensorFlow в виде сериализованных в формате JSON (tensors) и словаря списков (именованных тензоров)
Входные данные TensorFlow с помощью API обслуживания TensorFlow

В следующих разделах рассматриваются модели MLflow, развернутые в Машинное обучение Azure сетевых конечных точек.

Входная структура

Независимо от типа входных данных, Машинное обучение Azure требует предоставления входных данных в полезные данные JSON в ключе input_dataсловаря. Этот ключ не требуется при использовании команды mlflow models serve для обслуживания моделей, поэтому полезные нагрузки нельзя использовать взаимозаменяемо для Машинное обучение Azure сетевых конечных точек и встроенного сервера MLflow.

Внимание

Структура полезных данных изменилась в MLflow 2.0.

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

Json-сериализованные pandas DataFrame в разделенной ориентации

{
    "input_data": {
        "columns": [
            "age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
        ],
        "index": [1],
        "data": [
            [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
        ]
    }
}

Входные данные Tensor

{
    "input_data": [
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
    ]
}

Входные данные с именованным тензором

{
    "input_data": {
        "tokens": [
          [0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
        ],
        "mask": [
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
        ]
    }
}

Настройка вывода для моделей MLflow

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

Если необходимо изменить способ выполнения вывода для модели MLflow, можно выполнить одно из следующих действий:

  • Измените способ входа модели в подпрограмму обучения.
  • Настройте вывод с помощью скрипта оценки во время развертывания.

Изменение способа ведения журнала модели во время обучения

При регистрации модели с помощью mlflow.autolog одного или или того же mlflow.<flavor>.log_modelвкуса, используемого для модели, определяется способ выполнения вывода и возвращаемых результатов. MLflow не применяет какое-либо конкретное поведение для того, как predict() функция создает результаты.

В некоторых случаях может потребоваться выполнить предварительную обработку или после выполнения модели. Или вы можете изменить возвращаемое значение; например, вероятности вместо классов. Одним из решений является реализация конвейеров машинного обучения, которые переходят от входных данных к выходным данным напрямую.

Например, sklearn.pipeline.Pipeline или pyspark.ml.Pipeline являются популярными способами реализации конвейеров и иногда рекомендуется по соображениям производительности. Вы также можете настроить способ вывода модели путем ведения журнала пользовательских моделей.

Настройка вывода с помощью скрипта оценки

Хотя для моделей MLflow не требуется скрипт оценки, при необходимости можно настроить выполнение вывода для моделей MLflow. Дополнительные сведения о настройке вывода см. в статье "Настройка развертываний модели MLflow для сетевых конечных точек" или "Настройка развертывания модели" с помощью скрипта оценки для конечных точек пакетной службы.

Внимание

Если вы решили указать скрипт оценки для развертывания модели MLflow, необходимо также предоставить среду для развертывания.

Средства развертывания

Машинное обучение Azure предлагает следующие средства для развертывания моделей MLflow в сетевых и пакетных конечных точках:

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

Сценарий Пакет SDK для MLflow Машинное обучение Azure CLI/SDK или studio
Развертывание в управляемых сетевых конечных точках1 Поддерживается. См. прогрессивное развертывание моделей MLflow в сетевых конечных точках Поддерживается. См. статью "Развертывание моделей MLflow в сетевых конечных точках"
Развертывание в управляемых сетевых конечных точках с помощью скрипта оценки Не поддерживается3 Поддерживается. См. статью "Настройка развертываний модели MLflow"
Развертывание в конечных точках пакетной службы Не поддерживается3 Поддерживается. См. сведения об использовании моделей MLflow в пакетных развертываниях
Развертывание в конечных точках пакетной службы с помощью скрипта оценки Не поддерживается3 Поддерживается. См. раздел "Настройка развертывания модели с помощью скрипта оценки"
Развертывание в веб-службах, таких как Экземпляры контейнеров Azure или Служба Azure Kubernetes (AKS) Устаревшая поддержка2 Не поддерживается2
Развертывание в веб-службах, таких как Экземпляры контейнеров или AKS с помощью скрипта оценки Не поддерживается3 Устаревшая поддержка2

1 Развертывание в сетевых конечных точках, которые находятся в рабочих областях с включенным приватным каналом, требует пакет моделей перед развертыванием (предварительная версия).

2 Переключитесь на управляемые сетевые конечные точки, если это возможно.

3 MLflow с открытым кодом не имеет концепции скрипта оценки и не поддерживает пакетное выполнение.

Выбор средства развертывания

Используйте пакет SDK MLflow, если:

  • Вы знакомы с MLflow и хотите продолжать использовать те же методы, и
  • Вы используете платформу, например Azure Databricks, которая поддерживает MLflow в собственном коде.

Используйте Машинное обучение Azure CLI версии 2 или пакет SDK для Python, если:

  • Вы знакомы с ними или
  • Вы хотите автоматизировать развертывание с помощью конвейеров или
  • Вы хотите сохранить конфигурацию развертывания в репозитории Git.

Используйте пользовательский интерфейс Студия машинного обучения Azure, если вы хотите быстро развернуть и протестировать модели, обученные с помощью MLflow.