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

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

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

Развертывание моделей MLflow и пользовательских моделей

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

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

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

Совет

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

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

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

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

conda.yaml

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 модели. Однако это автоматическое обнаружение пакетов может не всегда отражать ваши намерения или требования. В таких случаях рассмотрим модели ведения журнала с помощью пользовательского определения зависимостей conda.

Последствия использования моделей с сигнатурами

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

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

В следующем файле показан файл MLmodel, связанный с моделью MLflow.

MLmodel

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 являются необязательными, но настоятельно рекомендуется, так как они предоставляют удобный способ обнаружения проблем совместимости данных рано. Дополнительные сведения о том, как регистрировать модели с сигнатурами, см. в разделе "Модели ведения журнала" с помощью настраиваемой подписи, среды или примеров.

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

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

Вывод с помощью пакетных и сетевых конечных точек

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

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

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

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

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

Тип Ввода Встроенный сервер MLflow Машинное обучение Azure сетевые конечные точки
Кадры данных pandas, сериализованные в формате JSON, в ориентации разделения
Кадры данных pandas, сериализованные в формате JSON, в ориентации записей Устарело
Кадры данных pandas, сериализованные в формате CSV Использование пакета1
Формат входного тензора в виде сериализованных в формате JSON списков (тензоров) и словаря списков (именованных тензоров)
Входные данные Tensor, отформатированные как в API обслуживания TF

1 Рассмотрите возможность использования пакетного вывода для обработки файлов. Дополнительные сведения см. в статье "Развертывание моделей MLflow в конечных точках пакетной службы".

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

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

Важно!

Рекомендации MLflow 2.0. Обратите внимание, что структура полезных данных изменилась в MLflow 2.0.

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

Пример полезных данных для кадра данных, сериализованного в ФОРМАТЕ JSON, в разделенной ориентации

{
    "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]
        ]
    }
}

Пример полезных данных для входного тензора

{
    "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 для Машинное обучение Azure решение о том, как следует выполнять вывод, выполняется построителем моделей (человеком, который создал модель), а не инженером DevOps (человеком, который пытается развернуть его). Каждая платформа модели может автоматически применять определенные подпрограммы вывода.

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

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

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

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

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

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

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

Важно!

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

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

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

  • Пакет SDK для MLflow
  • Интерфейс командной строки службы "Машинное обучение Azure"
  • Пакет SDK для Машинного обучения Azure для Python
  • Студия машинного обучения Azure

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

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

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

2 . Вместо этого рекомендуется переключиться на управляемые сетевые конечные точки.

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

Какое средство развертывания следует использовать?